From c60a4ee4e6114ff0dc3cbc9fd9a58321ca2a8abc Mon Sep 17 00:00:00 2001 From: Rastislav Szabo Date: Mon, 22 May 2017 11:24:42 +0200 Subject: fixed golint issues Change-Id: I325fa618d8db7a9f1783ec7d208fd7b6e853d9a3 Signed-off-by: Rastislav Szabo --- adapter/mock/util/binapi_reflect.go | 74 +++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 adapter/mock/util/binapi_reflect.go (limited to 'adapter/mock/util/binapi_reflect.go') diff --git a/adapter/mock/util/binapi_reflect.go b/adapter/mock/util/binapi_reflect.go new file mode 100644 index 0000000..0ab065d --- /dev/null +++ b/adapter/mock/util/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 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