aboutsummaryrefslogtreecommitdiffstats
path: root/binapigen/validate.go
diff options
context:
space:
mode:
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)
+ }
+ }
+}