RICPLT-2910
[ric-plt/submgr.git] / test / rco / rco.go
index 5f740f2..646bb42 100644 (file)
@@ -25,84 +25,133 @@ import (
        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"
-       "time"
        "os"
+       "strconv"
+       "time"
 )
 
 type Rco struct {
        submgr.E2ap
 }
 
-var c chan submgr.RmrDatagram = make(chan submgr.RmrDatagram, 1)
+var c = make(chan submgr.RmrDatagram, 1)
+var params xapp.RMRParams
 
-var RAWDATA string
-var SEEDSN uint16
+var requestRawData string
+var deleteRawData string
+var seedSN uint16
+var deleteSeedSN uint16
 
 func init() {
        viper.AutomaticEnv()
        viper.SetEnvPrefix("rco")
        viper.AllowEmptyEnv(true)
-       RAWDATA = viper.GetString("rawdata")
-       if RAWDATA == "" {
-               RAWDATA = "000003ea7e000500aaaaccccea6300020000ea81000e00045465737400ea6b0003000100"
+       requestRawData = viper.GetString("rawdata")
+       if requestRawData == "" {
+               requestRawData = "00c90020000003ea7e00050000010002ea6300020003ea81000a000000ea6b4003000440"
+       }
+       deleteRawData = viper.GetString("deleterawdata")
+       if deleteRawData == "" {
+               deleteRawData = "00ca0012000002ea7e00050000010002ea6300020003"
        }
-       xapp.Logger.Info("Initial RAW DATA: %v", RAWDATA)
-       SEEDSN = uint16(viper.GetInt("seed_sn"))
-       if SEEDSN == 0 || SEEDSN > 65535 {
-               SEEDSN = 12345
+       xapp.Logger.Info("Initial RAW DATA: %v", requestRawData)
+       xapp.Logger.Info("Initial DELETE RAW DATA: %v", deleteRawData)
+       seedSN = uint16(viper.GetInt("seed_sn"))
+       if seedSN == 0 || seedSN > 65535 {
+               seedSN = 12345
        }
-       xapp.Logger.Info("Initial SEQUENCE NUMBER: %v", SEEDSN)
+       deleteSeedSN = uint16(viper.GetInt("delete_seed_sn"))
+       if deleteSeedSN == 0 || deleteSeedSN > 65535 {
+               deleteSeedSN = seedSN
+       }
+
+       xapp.Logger.Info("Initial SEQUENCE NUMBER: %v", seedSN)
 }
 
-func (r *Rco) GeneratePayload(sub_id uint16) (payload []byte, err error) {
-       skeleton, err := hex.DecodeString(RAWDATA)
+func (r *Rco) GeneratePayload(subId uint16) (payload []byte, err error) {
+       skeleton, err := hex.DecodeString(requestRawData)
        if err != nil {
-               return make([]byte, 0), errors.New("Unable to decode data provided in RCO_RAWDATA environment variable")
+               return make([]byte, 0), errors.New("nable to decode data provided in \"RCO_RAWDATA\" environment variable")
        }
-       payload, err = r.SetSubscriptionRequestSequenceNumber(skeleton, sub_id)
+       payload, err = r.SetSubscriptionRequestSequenceNumber(skeleton, subId)
        return
 }
 
-func (r Rco) Consume(mtype, sub_id int, len int, payload []byte) (err error) {
-       payload_seq_num, err := r.GetSubscriptionResponseSequenceNumber(payload)
+func (r *Rco) GenerateDeletePayload(subId uint16) (payload []byte, err error) {
+       skeleton, err := hex.DecodeString(deleteRawData)
        if err != nil {
-               xapp.Logger.Error("Unable to get Subscription Sequence Number from Payload due to: " + err.Error())     
+               return make([]byte, 0), errors.New("unable to decode data provided in \"RCO_DELETERAWDATA\" environment variable")
        }
-       xapp.Logger.Info("Message Received: RMR SUBSCRIPTION_ID: %v | PAYLOAD SEQUENCE_NUMBER: %v", sub_id, payload_seq_num)
+       payload, err = r.SetSubscriptionDeleteRequestSequenceNumber(skeleton, subId)
        return
 }
 
-func (r *Rco) SendSubscriptionRequests() (err error) {
-       message, err := r.GeneratePayload(SEEDSN)
+func (r Rco) Consume(params *xapp.RMRParams) (err error) {
+       switch params.Mtype {
+       case xapp.RICMessageTypes["RIC_SUB_RESP"]:
+               payloadSeqNum, err := r.GetSubscriptionResponseSequenceNumber(params.Payload)
+               if err != nil {
+                       xapp.Logger.Error("SUBRESP: Unable to get Subscription Sequence Number from Payload due to: " + err.Error())
+               }
+               xapp.Logger.Info("Subscription Response Message Received: RMR SUBSCRIPTION_ID: %v | PAYLOAD SEQUENCE_NUMBER: %v", params.SubId, payloadSeqNum)
+               return err
+       case xapp.RICMessageTypes["RIC_SUB_DEL_RESP"]:
+               payloadSeqNum, err := r.GetSubscriptionDeleteResponseSequenceNumber(params.Payload)
+               if err != nil {
+                       xapp.Logger.Error("DELRESP: Unable to get Subscription Sequence Number from Payload due to: " + err.Error())
+               }
+               xapp.Logger.Info("Subscription Delete Response Message Received: RMR SUBSCRIPTION_ID: %v | PAYLOAD SEQUENCE_NUMBER: %v", params.SubId, payloadSeqNum)
+               return err
+       default:
+               err = errors.New("Message Type " + strconv.Itoa(params.Mtype) + " is discarded")
+               xapp.Logger.Error("Unknown message type: %v", err)
+               return
+       }
+}
+
+func (r *Rco) SendRequests() (err error) {
+       message, err := r.GeneratePayload(seedSN)
+       if err != nil {
+               xapp.Logger.Debug(err.Error())
+               return
+       }
+       deletemessage, err := r.GenerateDeletePayload(deleteSeedSN)
        if err != nil {
                xapp.Logger.Debug(err.Error())
                return
        }
        for {
-               time.Sleep(2 * time.Second)
-               c <- submgr.RmrDatagram{12010, SEEDSN, message}
+               time.Sleep(5 * time.Second)
+               c <- submgr.RmrDatagram{MessageType: 12010, SubscriptionId: seedSN, Payload: message}
+               seedSN++
+               time.Sleep(5 * time.Second)
+               c <- submgr.RmrDatagram{MessageType: 12020, SubscriptionId: deleteSeedSN, Payload: deletemessage}
+               deleteSeedSN++
        }
-       return
 }
 
 func (r *Rco) Run() {
        for {
                message := <-c
-               payload_seq_num, err := r.GetSubscriptionRequestSequenceNumber(message.Payload)
+               payloadSeqNum, err := r.GetSubscriptionRequestSequenceNumber(message.Payload)
                if err != nil {
-                       xapp.Logger.Debug("Unable to get Subscription Sequence Number from Payload due to: " + err.Error())     
+                       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.MessageType, message.SubscriptionId, payload_seq_num)
-               xapp.Rmr.Send(message.MessageType, int(message.SubscriptionId), len(message.Payload), message.Payload)
+               params.SubId = int(message.SubscriptionId)
+               params.Mtype = message.MessageType
+               params.PayloadLen = len(message.Payload)
+               params.Payload = message.Payload
+               xapp.Logger.Info("Sending Message: TYPE: %v | RMR SUBSCRIPTION_ID: %v | PAYLOAD SEQUENCE_NUMBER: %v)", message.MessageType, message.SubscriptionId, payloadSeqNum)
+               xapp.Rmr.Send(&params, false)
        }
 }
 
-func (r *Rco) sendInvalidTestMessages(){
+func (r *Rco) sendInvalidTestMessages() {
        for {
                time.Sleep(7 * time.Second)
-               c <- submgr.RmrDatagram{10000, 0, make([]byte, 1)}
+               c <- submgr.RmrDatagram{MessageType: 10000, SubscriptionId: 0, Payload: make([]byte, 1)}
                time.Sleep(7 * time.Second)
-               c <- submgr.RmrDatagram{12010, 0, make([]byte, 1)}
+               c <- submgr.RmrDatagram{MessageType: 12010, SubscriptionId: 0, Payload: make([]byte, 1)}
        }
 }
 
@@ -111,8 +160,9 @@ func main() {
        go xapp.Rmr.Start(rco)
        go rco.Run()
        go rco.sendInvalidTestMessages()
-       err := rco.SendSubscriptionRequests()
+       err := rco.SendRequests()
        if err != nil {
+               xapp.Logger.Info("Error: %v", err)
                os.Exit(1)
        }
 }