diff options
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) + } + } +} |