From e45d8802fd8de3602db630d75b370ff804000da9 Mon Sep 17 00:00:00 2001 From: Ondrej Fabry Date: Fri, 15 Nov 2019 12:33:28 +0100 Subject: Improve compatibility checking - added CompatibilityError to api package to represent error with list of incompatible messages - added UnknownMsgError to adapter package to represent error for unknown message - added list of registered message types Change-Id: I2623b45135521d52612ba91e4605fc064a7fc76e Signed-off-by: Ondrej Fabry --- core/channel.go | 14 ++++++++++++-- core/channel_test.go | 12 ++++++------ 2 files changed, 18 insertions(+), 8 deletions(-) (limited to 'core') diff --git a/core/channel.go b/core/channel.go index 5b513e3..363a267 100644 --- a/core/channel.go +++ b/core/channel.go @@ -23,6 +23,7 @@ import ( "github.com/sirupsen/logrus" + "git.fd.io/govpp.git/adapter" "git.fd.io/govpp.git/api" ) @@ -144,14 +145,23 @@ func (ch *Channel) SendMultiRequest(msg api.Message) api.MultiRequestCtx { } func (ch *Channel) CheckCompatiblity(msgs ...api.Message) error { + var comperr api.CompatibilityError for _, msg := range msgs { - // TODO: collect all incompatible messages and return summarized error _, err := ch.msgIdentifier.GetMessageID(msg) if err != nil { + if uerr, ok := err.(*adapter.UnknownMsgError); ok { + m := fmt.Sprintf("%s_%s", uerr.MsgName, uerr.MsgCrc) + comperr.IncompatibleMessages = append(comperr.IncompatibleMessages, m) + continue + } + // other errors return immediatelly return err } } - return nil + if len(comperr.IncompatibleMessages) == 0 { + return nil + } + return &comperr } func (ch *Channel) SubscribeNotification(notifChan chan api.Message, event api.Message) (api.SubscriptionCtx, error) { diff --git a/core/channel_test.go b/core/channel_test.go index 7e721cd..849255a 100644 --- a/core/channel_test.go +++ b/core/channel_test.go @@ -213,15 +213,15 @@ func TestSetReplyTimeoutMultiRequest(t *testing.T) { ctx.mockVpp.MockReply( &interfaces.SwInterfaceDetails{ SwIfIndex: 1, - InterfaceName: []byte("if-name-test"), + InterfaceName: "if-name-test", }, &interfaces.SwInterfaceDetails{ SwIfIndex: 2, - InterfaceName: []byte("if-name-test"), + InterfaceName: "if-name-test", }, &interfaces.SwInterfaceDetails{ SwIfIndex: 3, - InterfaceName: []byte("if-name-test"), + InterfaceName: "if-name-test", }, ) ctx.mockVpp.MockReply(&ControlPingReply{}) @@ -288,7 +288,7 @@ func TestMultiRequestDouble(t *testing.T) { msgs = append(msgs, mock.MsgWithContext{ Msg: &interfaces.SwInterfaceDetails{ SwIfIndex: uint32(i), - InterfaceName: []byte("if-name-test"), + InterfaceName: "if-name-test", }, Multipart: true, SeqNum: 1, @@ -301,7 +301,7 @@ func TestMultiRequestDouble(t *testing.T) { mock.MsgWithContext{ Msg: &interfaces.SwInterfaceDetails{ SwIfIndex: uint32(i), - InterfaceName: []byte("if-name-test"), + InterfaceName: "if-name-test", }, Multipart: true, SeqNum: 2, @@ -427,7 +427,7 @@ func TestReceiveReplyAfterTimeoutMultiRequest(t *testing.T) { msgs = append(msgs, mock.MsgWithContext{ Msg: &interfaces.SwInterfaceDetails{ SwIfIndex: uint32(i), - InterfaceName: []byte("if-name-test"), + InterfaceName: "if-name-test", }, Multipart: true, SeqNum: 2, -- cgit 1.2.3-korg