X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=test%2Fe2t%2Fe2t.go;h=88bc2503ce5cc5e8be2fc54007ce5f6558da0918;hb=ff8dccd02d76eebfccc0b509ce0b42a2c1760e12;hp=119e59e5efe86fb0b2a60e64fb4db9cd989adcb9;hpb=4511475f03107eb53c88545649898e3cfbcc2765;p=ric-plt%2Fsubmgr.git diff --git a/test/e2t/e2t.go b/test/e2t/e2t.go index 119e59e..88bc250 100644 --- a/test/e2t/e2t.go +++ b/test/e2t/e2t.go @@ -19,40 +19,136 @@ package main +/* +#include +#include + +#cgo CFLAGS: -I../ +#cgo LDFLAGS: -lrmr_nng -lnng +*/ +import "C" + import ( - "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp" - submgr "gerrit.o-ran-sc.org/r/ric-plt/submgr/pkg/control" + "encoding/hex" "errors" + submgr "gerrit.o-ran-sc.org/r/ric-plt/submgr/pkg/control" + "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp" + "github.com/spf13/viper" + "strconv" ) type E2t struct { + submgr.E2ap +} + +var c chan xapp.RMRParams = make(chan xapp.RMRParams, 1) + +var requestRawData string +var deleteRawData string + +func init() { + viper.AutomaticEnv() + viper.SetEnvPrefix("e2t") + viper.AllowEmptyEnv(true) + requestRawData = viper.GetString("rawdata") + if requestRawData == "" { + requestRawData = "20c9001d000003ea7e00050000010002ea6300020003ea6c000700ea6d40020004" + } + xapp.Logger.Info("Initial RAW Data: %v", requestRawData) + deleteRawData = viper.GetString("rawdata") + if deleteRawData == "" { + deleteRawData = "20ca0012000002ea7e00050000010002ea6300020003" + } + xapp.Logger.Info("Initial RAW Data: %v", deleteRawData) } -func (e E2t ) Consume(mtype, sub_id int, len int, payload []byte) (err error) { - asn1 := submgr.Asn1{} - message, err := asn1.Decode(payload) +func (e *E2t) GenerateRequestPayload(subId uint16) (payload []byte, err error) { + skeleton, err := hex.DecodeString(requestRawData) if err != nil { - xapp.Logger.Debug("E2T asn1Decoding failure due to "+ err.Error()) - return + return make([]byte, 0), errors.New("unable to decode data provided in \"RCO_RAWDATA\" environment variable") + } + payload, err = e.SetSubscriptionResponseSequenceNumber(skeleton, subId) + return +} + +func (e *E2t) GenerateDeletePayload(subId uint16) (payload []byte, err error) { + skeleton, err := hex.DecodeString(deleteRawData) + if err != nil { + return make([]byte, 0), errors.New("unable to decode data provided in \"RCO_RAWDATA\" environment variable") } - xapp.Logger.Info("E2T Received Message content: %v", message) - err = e.subscriptionResponse(sub_id) + payload, err = e.SetSubscriptionDeleteResponseSequenceNumber(skeleton, subId) return } -func (e E2t ) subscriptionResponse(sub_id int) (err error) { - asn1 := submgr.Asn1{} - payload, err := asn1.Encode(submgr.RmrPayload{8, sub_id, "E2T: RCO Subscribed"}) +func (e E2t) Consume(rp *xapp.RMRParams) (err error) { + switch rp.Mtype { + case C.RIC_SUB_REQ: + err = e.handleSubscriptionRequest(rp) + case C.RIC_SUB_DEL_REQ: + err = e.handleSubscriptionDeleteRequest(rp) + default: + err = errors.New("Message Type " + strconv.Itoa(rp.Mtype) + " is discarded") + xapp.Logger.Error("Unknown message type: %v", err) + } + return +} + +func (e E2t) handleSubscriptionRequest(request *xapp.RMRParams) (err error) { + payloadSeqNum, err := e.GetSubscriptionRequestSequenceNumber(request.Payload) + if err != nil { + xapp.Logger.Error("Unable to get Subscription Sequence Number from Payload due to: " + err.Error()) + } + xapp.Logger.Info("Subscription Request Received: RMR SUBSCRIPTION_ID: %v | PAYLOAD SEQUENCE_NUMBER: %v", payloadSeqNum, payloadSeqNum) + payload, err := e.GenerateRequestPayload(payloadSeqNum) if err != nil { + xapp.Logger.Debug(err.Error()) return } - if !xapp.Rmr.Send(12011, sub_id, len(payload), payload) { - err = errors.New("rmr.Send() failed") + request.Payload = payload + request.Mtype = 12011 + c <- *request + return +} + +func (e E2t) handleSubscriptionDeleteRequest(request *xapp.RMRParams) (err error) { + payloadSeqNum, err := e.GetSubscriptionDeleteRequestSequenceNumber(request.Payload) + if err != nil { + xapp.Logger.Error("Unable to get Subscription Sequence Number from Payload due to: " + err.Error()) + } + xapp.Logger.Info("Subscription Delete Request Received: RMR SUBSCRIPTION_ID: %v | PAYLOAD SEQUENCE_NUMBER: %v", payloadSeqNum, payloadSeqNum) + payload, err := e.GenerateDeletePayload(payloadSeqNum) + if err != nil { + xapp.Logger.Debug(err.Error()) + return } + request.Payload = payload + request.Mtype = 12021 + c <- *request return } +func (e *E2t) Run() { + for { + message := <-c + var payloadSeqNum uint16 + var err error + if message.Mtype == 12011 { + payloadSeqNum, err = e.GetSubscriptionResponseSequenceNumber(message.Payload) + } else if message.Mtype == 12021 { + payloadSeqNum, err = e.GetSubscriptionDeleteResponseSequenceNumber(message.Payload) + } else { + err = errors.New("OH MY GOD") + } + if err != nil { + xapp.Logger.Debug("Unable to get Subscription Sequence Number from Payload due to: " + err.Error()) + } + xapp.Logger.Info("Sending Message: TYPE: %v | RMR SUBSCRIPTION_ID: %v | PAYLOAD SEQUENCE_NUMBER: %v)", message.Mtype, message.SubId, payloadSeqNum) + xapp.Rmr.Send(&message, true) + } +} + func main() { e2t := E2t{} + go e2t.Run() xapp.Run(e2t) }