0.7.1 Version of submgr
[ric-plt/submgr.git] / test / rco / rco.go
1 /*
2 ==================================================================================
3   Copyright (c) 2019 AT&T Intellectual Property.
4   Copyright (c) 2019 Nokia
5
6    Licensed under the Apache License, Version 2.0 (the "License");
7    you may not use this file except in compliance with the License.
8    You may obtain a copy of the License at
9
10        http://www.apache.org/licenses/LICENSE-2.0
11
12    Unless required by applicable law or agreed to in writing, software
13    distributed under the License is distributed on an "AS IS" BASIS,
14    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15    See the License for the specific language governing permissions and
16    limitations under the License.
17 ==================================================================================
18 */
19
20 package main
21
22 import (
23         "encoding/hex"
24         "errors"
25         submgr "gerrit.o-ran-sc.org/r/ric-plt/submgr/pkg/control"
26         "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
27         "github.com/spf13/viper"
28         "time"
29         "os"
30 )
31
32 type Rco struct {
33         submgr.E2ap
34 }
35
36 var c chan submgr.RmrDatagram = make(chan submgr.RmrDatagram, 1)
37 var params *xapp.RMRParams
38
39 var REQUESTRAWDATA string
40 var DELETERAWDATA string
41 var SEEDSN uint16
42 var DELETESEEDSN uint16
43
44 func init() {
45         viper.AutomaticEnv()
46         viper.SetEnvPrefix("rco")
47         viper.AllowEmptyEnv(true)
48         REQUESTRAWDATA = viper.GetString("rawdata")
49         if REQUESTRAWDATA == "" {
50                 REQUESTRAWDATA = "000003ea7e000500aaaaccccea6300020000ea81000e00045465737400ea6b0003000100"
51         }
52         DELETERAWDATA = viper.GetString("deleterawdata")
53         if DELETERAWDATA == "" {
54                 DELETERAWDATA = "000002ea7e000500aaaabbbbea6300020000"
55         }
56         xapp.Logger.Info("Initial RAW DATA: %v", REQUESTRAWDATA)
57         xapp.Logger.Info("Initial DELETE RAW DATA: %v", DELETERAWDATA)
58         SEEDSN = uint16(viper.GetInt("seed_sn"))
59         if SEEDSN == 0 || SEEDSN > 65535 {
60                 SEEDSN = 12345
61         }
62         DELETESEEDSN = SEEDSN
63         xapp.Logger.Info("Initial SEQUENCE NUMBER: %v", SEEDSN)
64 }
65
66 func (r *Rco) GeneratePayload(sub_id uint16) (payload []byte, err error) {
67         skeleton, err := hex.DecodeString(REQUESTRAWDATA)
68         if err != nil {
69                 return make([]byte, 0), errors.New("Unable to decode data provided in RCO_RAWDATA environment variable")
70         }
71         payload, err = r.SetSubscriptionRequestSequenceNumber(skeleton, sub_id)
72         return
73 }
74
75 func (r *Rco) GenerateDeletePayload(sub_id uint16) (payload []byte, err error) {
76         skeleton, err := hex.DecodeString(DELETERAWDATA)
77         if err != nil {
78                 return make([]byte, 0), errors.New("Unable to decode data provided in RCO_DELETE RAWDATA environment variable")
79         }
80         xapp.Logger.Info("SetSubscriptionDeleteRequestSequenceNumber1")
81         payload, err = r.SetSubscriptionDeleteRequestSequenceNumber(skeleton, sub_id)
82         xapp.Logger.Info("SetSubscriptionDeleteRequestSequenceNumber2")
83         return
84 }
85
86 func (r Rco) Consume(params *xapp.RMRParams) (err error) {
87         payload_seq_num, err := r.GetSubscriptionResponseSequenceNumber(params.Payload)
88         if err != nil {
89                 xapp.Logger.Error("Unable to get Subscription Sequence Number from Payload due to: " + err.Error())     
90         }
91         xapp.Logger.Info("Message Received: RMR SUBSCRIPTION_ID: %v | PAYLOAD SEQUENCE_NUMBER: %v", params.SubId, payload_seq_num)
92         return
93 }
94
95 func (r *Rco) SendRequests() (err error) {
96         message, err := r.GeneratePayload(SEEDSN)
97         if err != nil {
98                 xapp.Logger.Debug(err.Error())
99                 return
100         }
101         deletemessage, err := r.GenerateDeletePayload(DELETESEEDSN)
102         if err != nil {
103                 xapp.Logger.Debug(err.Error())
104                 return
105         }
106         for {
107                 time.Sleep(2 * time.Second)
108                 c <- submgr.RmrDatagram{12010, SEEDSN, message}
109                 time.Sleep(2 * time.Second)
110                 c <- submgr.RmrDatagram{12020, DELETESEEDSN, deletemessage}
111                 DELETESEEDSN++
112         }
113         return
114 }
115
116 func (r *Rco) Run() {
117         for {
118                 message := <-c
119                 payload_seq_num, err := r.GetSubscriptionRequestSequenceNumber(message.Payload)
120                 if err != nil {
121                         xapp.Logger.Debug("Unable to get Subscription Sequence Number from Payload due to: " + err.Error())     
122                 }
123                 params.SubId = int(message.SubscriptionId)
124                 params.Mtype = message.MessageType
125                 params.PayloadLen = len(message.Payload)
126                 params.Payload = message.Payload
127                 xapp.Logger.Info("Sending Message: TYPE: %v | RMR SUBSCRIPTION_ID: %v | PAYLOAD SEQUENCE_NUMBER: %v)", message.MessageType, message.SubscriptionId, payload_seq_num)
128                 xapp.Rmr.Send(params, false)
129         }
130 }
131
132 func (r *Rco) sendInvalidTestMessages(){
133         for {
134                 time.Sleep(7 * time.Second)
135                 c <- submgr.RmrDatagram{10000, 0, make([]byte, 1)}
136                 time.Sleep(7 * time.Second)
137                 c <- submgr.RmrDatagram{12010, 0, make([]byte, 1)}
138         }
139 }
140
141 func main() {
142         rco := Rco{}
143         go xapp.Rmr.Start(rco)
144         go rco.Run()
145         go rco.sendInvalidTestMessages()
146         err := rco.SendRequests()
147         if err != nil {
148                 os.Exit(1)
149         }
150 }