From 2d07847237e754d9050f06f565baa430c70ed937 Mon Sep 17 00:00:00 2001 From: Rastislav Szabo Date: Thu, 25 May 2017 13:47:43 +0200 Subject: added async connect API, new structure of examples Change-Id: Iab9bce174596c30998981e02b7030c248c423384 Signed-off-by: Rastislav Szabo --- adapter/mock/binapi/binapi_reflect.go | 74 +++++++++++++++++++++++++++++++++++ adapter/mock/mock_adapter.go | 4 +- adapter/mock/util/binapi_reflect.go | 74 ----------------------------------- 3 files changed, 76 insertions(+), 76 deletions(-) create mode 100644 adapter/mock/binapi/binapi_reflect.go delete mode 100644 adapter/mock/util/binapi_reflect.go (limited to 'adapter') diff --git a/adapter/mock/binapi/binapi_reflect.go b/adapter/mock/binapi/binapi_reflect.go new file mode 100644 index 0000000..ee89909 --- /dev/null +++ b/adapter/mock/binapi/binapi_reflect.go @@ -0,0 +1,74 @@ +// Copyright (c) 2017 Cisco and/or its affiliates. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at: +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package binapi is a helper package for generic handling of VPP binary +// API messages in the mock adapter and integration tests. +package binapi + +import ( + "reflect" +) + +const swIfIndexName = "swIfIndex" +const retvalName = "retval" +const replySuffix = "_reply" + +// findFieldOfType finds the field specified by its name in provided message defined as reflect.Type data type. +func findFieldOfType(reply reflect.Type, fieldName string) (reflect.StructField, bool) { + if reply.Kind() == reflect.Struct { + field, found := reply.FieldByName(fieldName) + return field, found + } else if reply.Kind() == reflect.Ptr && reply.Elem().Kind() == reflect.Struct { + field, found := reply.Elem().FieldByName(fieldName) + return field, found + } + return reflect.StructField{}, false +} + +// findFieldOfValue finds the field specified by its name in provided message defined as reflect.Value data type. +func findFieldOfValue(reply reflect.Value, fieldName string) (reflect.Value, bool) { + if reply.Kind() == reflect.Struct { + field := reply.FieldByName(fieldName) + return field, field.IsValid() + } else if reply.Kind() == reflect.Ptr && reply.Elem().Kind() == reflect.Struct { + field := reply.Elem().FieldByName(fieldName) + return field, field.IsValid() + } + return reflect.Value{}, false +} + +// HasSwIfIdx checks whether provided message has the swIfIndex field. +func HasSwIfIdx(msg reflect.Type) bool { + _, found := findFieldOfType(msg, swIfIndexName) + return found +} + +// SetSwIfIdx sets the swIfIndex field of provided message to provided value. +func SetSwIfIdx(msg reflect.Value, swIfIndex uint32) { + if field, found := findFieldOfValue(msg, swIfIndexName); found { + field.Set(reflect.ValueOf(swIfIndex)) + } +} + +// SetRetval sets the retval field of provided message to provided value. +func SetRetval(msg reflect.Value, retVal int32) { + if field, found := findFieldOfValue(msg, retvalName); found { + field.Set(reflect.ValueOf(retVal)) + } +} + +// ReplyNameFor returns reply message name to the given request message name. +func ReplyNameFor(requestName string) (string, bool) { + return requestName + replySuffix, true +} diff --git a/adapter/mock/mock_adapter.go b/adapter/mock/mock_adapter.go index 1076ec2..8c88030 100644 --- a/adapter/mock/mock_adapter.go +++ b/adapter/mock/mock_adapter.go @@ -25,7 +25,7 @@ import ( "github.com/lunixbochs/struc" "git.fd.io/govpp.git/adapter" - "git.fd.io/govpp.git/adapter/mock/util" + "git.fd.io/govpp.git/adapter/mock/binapi" "git.fd.io/govpp.git/api" ) @@ -137,7 +137,7 @@ func (a *VppAdapter) RegisterBinAPITypes(binAPITypes map[string]reflect.Type) { // ReplyTypeFor returns reply message type for given request message name. func (a *VppAdapter) ReplyTypeFor(requestMsgName string) (reflect.Type, uint16, bool) { - replyName, foundName := util.ReplyNameFor(requestMsgName) + replyName, foundName := binapi.ReplyNameFor(requestMsgName) if foundName { if reply, found := a.binAPITypes[replyName]; found { msgID, err := a.GetMsgID(replyName, "") diff --git a/adapter/mock/util/binapi_reflect.go b/adapter/mock/util/binapi_reflect.go deleted file mode 100644 index 0ab065d..0000000 --- a/adapter/mock/util/binapi_reflect.go +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (c) 2017 Cisco and/or its affiliates. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at: -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package util is a helper package for generic handling of VPP binary -// API messages in the mock adapter and integration tests. -package util - -import ( - "reflect" -) - -const swIfIndexName = "swIfIndex" -const retvalName = "retval" -const replySuffix = "_reply" - -// findFieldOfType finds the field specified by its name in provided message defined as reflect.Type data type. -func findFieldOfType(reply reflect.Type, fieldName string) (reflect.StructField, bool) { - if reply.Kind() == reflect.Struct { - field, found := reply.FieldByName(fieldName) - return field, found - } else if reply.Kind() == reflect.Ptr && reply.Elem().Kind() == reflect.Struct { - field, found := reply.Elem().FieldByName(fieldName) - return field, found - } - return reflect.StructField{}, false -} - -// findFieldOfValue finds the field specified by its name in provided message defined as reflect.Value data type. -func findFieldOfValue(reply reflect.Value, fieldName string) (reflect.Value, bool) { - if reply.Kind() == reflect.Struct { - field := reply.FieldByName(fieldName) - return field, field.IsValid() - } else if reply.Kind() == reflect.Ptr && reply.Elem().Kind() == reflect.Struct { - field := reply.Elem().FieldByName(fieldName) - return field, field.IsValid() - } - return reflect.Value{}, false -} - -// HasSwIfIdx checks whether provided message has the swIfIndex field. -func HasSwIfIdx(msg reflect.Type) bool { - _, found := findFieldOfType(msg, swIfIndexName) - return found -} - -// SetSwIfIdx sets the swIfIndex field of provided message to provided value. -func SetSwIfIdx(msg reflect.Value, swIfIndex uint32) { - if field, found := findFieldOfValue(msg, swIfIndexName); found { - field.Set(reflect.ValueOf(swIfIndex)) - } -} - -// SetRetval sets the retval field of provided message to provided value. -func SetRetval(msg reflect.Value, retVal int32) { - if field, found := findFieldOfValue(msg, retvalName); found { - field.Set(reflect.ValueOf(retVal)) - } -} - -// ReplyNameFor returns reply message name to the given request message name. -func ReplyNameFor(requestName string) (string, bool) { - return requestName + replySuffix, true -} -- cgit 1.2.3-korg