summaryrefslogtreecommitdiffstats
path: root/adapter/mock/mock_adapter.go
diff options
context:
space:
mode:
Diffstat (limited to 'adapter/mock/mock_adapter.go')
-rw-r--r--adapter/mock/mock_adapter.go56
1 files changed, 24 insertions, 32 deletions
diff --git a/adapter/mock/mock_adapter.go b/adapter/mock/mock_adapter.go
index e6b4bc4..d8a80d6 100644
--- a/adapter/mock/mock_adapter.go
+++ b/adapter/mock/mock_adapter.go
@@ -22,6 +22,7 @@ import (
"reflect"
"sync"
+ "git.fd.io/govpp.git/core"
"github.com/lunixbochs/struc"
"git.fd.io/govpp.git/adapter"
@@ -33,31 +34,13 @@ import (
type VppAdapter struct {
callback func(context uint32, msgId uint16, data []byte)
- msgNameToIds *map[string]uint16
- msgIDsToName *map[uint16]string
+ msgNameToIds map[string]uint16
+ msgIDsToName map[uint16]string
msgIDSeq uint16
binAPITypes map[string]reflect.Type
access sync.RWMutex
}
-// replyHeader represents a common header of each VPP request message.
-type requestHeader struct {
- VlMsgID uint16
- ClientIndex uint32
- Context uint32
-}
-
-// replyHeader represents a common header of each VPP reply message.
-type replyHeader struct {
- VlMsgID uint16
- Context uint32
-}
-
-// otherHeader represents a common header of each VPP reply message.
-type otherHeader struct {
- VlMsgID uint16
-}
-
// defaultReply is a default reply message that mock adapter returns for a request.
type defaultReply struct {
Retval int32
@@ -118,7 +101,7 @@ func (a *VppAdapter) GetMsgNameByID(msgID uint16) (string, bool) {
a.access.Lock()
defer a.access.Unlock()
a.initMaps()
- msgName, found := (*a.msgIDsToName)[msgID]
+ msgName, found := a.msgIDsToName[msgID]
return msgName, found
}
@@ -175,7 +158,7 @@ func (a *VppAdapter) ReplyBytes(request MessageDTO, reply api.Message) ([]byte,
log.Println("ReplyBytes ", replyMsgID, " ", reply.GetMessageName(), " clientId: ", request.ClientID)
buf := new(bytes.Buffer)
- struc.Pack(buf, &replyHeader{VlMsgID: replyMsgID, Context: request.ClientID})
+ struc.Pack(buf, &core.VppReplyHeader{VlMsgID: replyMsgID, Context: request.ClientID})
struc.Pack(buf, reply)
return buf.Bytes(), nil
@@ -198,15 +181,15 @@ func (a *VppAdapter) GetMsgID(msgName string, msgCrc string) (uint16, error) {
defer a.access.Unlock()
a.initMaps()
- msgID, found := (*a.msgNameToIds)[msgName]
+ msgID, found := a.msgNameToIds[msgName]
if found {
return msgID, nil
}
a.msgIDSeq++
msgID = a.msgIDSeq
- (*a.msgNameToIds)[msgName] = msgID
- (*a.msgIDsToName)[msgID] = msgName
+ a.msgNameToIds[msgName] = msgID
+ a.msgIDsToName[msgID] = msgName
log.Println("VPP GetMessageId ", msgID, " name:", msgName, " crc:", msgCrc)
@@ -216,8 +199,8 @@ func (a *VppAdapter) GetMsgID(msgName string, msgCrc string) (uint16, error) {
// initMaps initializes internal maps (if not already initialized).
func (a *VppAdapter) initMaps() {
if a.msgIDsToName == nil {
- a.msgIDsToName = &map[uint16]string{}
- a.msgNameToIds = &map[string]uint16{}
+ a.msgIDsToName = map[uint16]string{}
+ a.msgNameToIds = map[string]uint16{}
a.msgIDSeq = 1000
}
@@ -235,11 +218,11 @@ func (a *VppAdapter) SendMsg(clientID uint32, data []byte) error {
replyHandler := replyHandlers[i]
buf := bytes.NewReader(data)
- reqHeader := requestHeader{}
+ reqHeader := core.VppRequestHeader{}
struc.Unpack(buf, &reqHeader)
a.access.Lock()
- reqMsgName, _ := (*a.msgIDsToName)[reqHeader.VlMsgID]
+ reqMsgName, _ := a.msgIDsToName[reqHeader.VlMsgID]
a.access.Unlock()
reply, msgID, finished := replyHandler(MessageDTO{reqHeader.VlMsgID, reqMsgName,
@@ -265,9 +248,13 @@ func (a *VppAdapter) SendMsg(clientID uint32, data []byte) error {
msgID, _ := a.GetMsgID(reply.GetMessageName(), reply.GetCrcString())
buf := new(bytes.Buffer)
if reply.GetMessageType() == api.ReplyMessage {
- struc.Pack(buf, &replyHeader{VlMsgID: msgID, Context: clientID})
+ struc.Pack(buf, &core.VppReplyHeader{VlMsgID: msgID, Context: clientID})
+ } else if reply.GetMessageType() == api.EventMessage {
+ struc.Pack(buf, &core.VppEventHeader{VlMsgID: msgID, Context: clientID})
+ } else if reply.GetMessageType() == api.RequestMessage {
+ struc.Pack(buf, &core.VppRequestHeader{VlMsgID: msgID, Context: clientID})
} else {
- struc.Pack(buf, &requestHeader{VlMsgID: msgID, Context: clientID})
+ struc.Pack(buf, &core.VppOtherHeader{VlMsgID: msgID})
}
struc.Pack(buf, reply)
a.callback(clientID, msgID, buf.Bytes())
@@ -287,7 +274,7 @@ func (a *VppAdapter) SendMsg(clientID uint32, data []byte) error {
// return default reply
buf := new(bytes.Buffer)
msgID := uint16(defaultReplyMsgID)
- struc.Pack(buf, &replyHeader{VlMsgID: msgID, Context: clientID})
+ struc.Pack(buf, &core.VppReplyHeader{VlMsgID: msgID, Context: clientID})
struc.Pack(buf, &defaultReply{})
a.callback(clientID, msgID, buf.Bytes())
}
@@ -299,6 +286,11 @@ func (a *VppAdapter) SetMsgCallback(cb func(context uint32, msgID uint16, data [
a.callback = cb
}
+// WaitReady mocks waiting for VPP
+func (a *VppAdapter) WaitReady() error {
+ return nil
+}
+
// MockReply stores a message to be returned when the next request comes. It is a FIFO queue - multiple replies
// can be pushed into it, the first one will be popped when some request comes.
// Using of this method automatically switches the mock into th useRepliesQueue mode.