aboutsummaryrefslogtreecommitdiffstats
path: root/binapigen/validate.go
diff options
context:
space:
mode:
authorOndrej Fabry <ofabry@cisco.com>2020-06-18 08:22:13 +0200
committerOndrej Fabry <ofabry@cisco.com>2020-06-22 14:37:14 +0200
commit94620e85f0bdbb054af07ce3670fadc1f76cfdf0 (patch)
tree7784ddf381c4e08a6a1ece5b55911b47ea8395f3 /binapigen/validate.go
parent280b1c6c83b676ef4e592f4ecf60cb5b54b6a753 (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.go66
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)
+ }
+ }
+}