diff options
author | 2020-06-18 08:22:13 +0200 | |
---|---|---|
committer | 2020-06-22 14:37:14 +0200 | |
commit | 94620e85f0bdbb054af07ce3670fadc1f76cfdf0 (patch) | |
tree | 7784ddf381c4e08a6a1ece5b55911b47ea8395f3 /binapigen/validate.go | |
parent | 280b1c6c83b676ef4e592f4ecf60cb5b54b6a753 (diff) |
Refactored binapi generator with message encoding
Change-Id: I5a6abb68b9d058866f94818169300e5c2fc43895
Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
Diffstat (limited to 'binapigen/validate.go')
-rw-r--r-- | binapigen/validate.go | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/binapigen/validate.go b/binapigen/validate.go new file mode 100644 index 0000000..2dae903 --- /dev/null +++ b/binapigen/validate.go @@ -0,0 +1,66 @@ +// Copyright (c) 2020 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 binapigen + +import ( + "strings" + + "git.fd.io/govpp.git/binapigen/vppapi" + "github.com/sirupsen/logrus" +) + +const ( + serviceEventPrefix = "want_" + serviceDumpSuffix = "_dump" + serviceDetailsSuffix = "_details" + serviceReplySuffix = "_reply" +) + +func validateService(svc vppapi.Service) { + for _, rpc := range svc.RPCs { + validateRPC(rpc) + } +} + +func validateRPC(rpc vppapi.RPC) { + if len(rpc.Events) > 0 { + // EVENT service + if !strings.HasPrefix(rpc.RequestMsg, serviceEventPrefix) { + logrus.Warnf("unusual EVENTS service: %+v\n"+ + "- events service %q does not have %q prefix in request.", + rpc, rpc.Name, serviceEventPrefix) + } + } else if rpc.Stream { + // STREAM service + if !strings.HasSuffix(rpc.RequestMsg, serviceDumpSuffix) { + logrus.Warnf("unusual STREAM service: %+v\n"+ + "- stream service %q does not have %q suffix in request.", + rpc, rpc.Name, serviceDumpSuffix) + } + if !strings.HasSuffix(rpc.ReplyMsg, serviceDetailsSuffix) && !strings.HasSuffix(rpc.StreamMsg, serviceDetailsSuffix) { + logrus.Warnf("unusual STREAM service: %+v\n"+ + "- stream service %q does not have %q suffix in reply or stream msg.", + rpc, rpc.Name, serviceDetailsSuffix) + } + } else if rpc.ReplyMsg != "" { + // REQUEST service + // some messages might have `null` reply (for example: memclnt) + if !strings.HasSuffix(rpc.ReplyMsg, serviceReplySuffix) { + logrus.Warnf("unusual REQUEST service: %+v\n"+ + "- service %q does not have %q suffix in reply.", + rpc, rpc.Name, serviceReplySuffix) + } + } +} |