Subscription manager v0.10.0
[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 = uint16(viper.GetInt("delete_seed_sn"))
63         if DELETESEEDSN == 0 || DELETESEEDSN > 65535 {
64                 DELETESEEDSN = SEEDSN
65         }
66
67         xapp.Logger.Info("Initial SEQUENCE NUMBER: %v", SEEDSN)
68 }
69
70 func (r *Rco) GeneratePayload(sub_id uint16) (payload []byte, err error) {
71         skeleton, err := hex.DecodeString(REQUESTRAWDATA)
72         if err != nil {
73                 return make([]byte, 0), errors.New("Unable to decode data provided in RCO_RAWDATA environment variable")
74         }
75         payload, err = r.SetSubscriptionRequestSequenceNumber(skeleton, sub_id)
76         return
77 }
78
79 func (r *Rco) GenerateDeletePayload(sub_id uint16) (payload []byte, err error) {
80         skeleton, err := hex.DecodeString(DELETERAWDATA)
81         if err != nil {
82                 return make([]byte, 0), errors.New("Unable to decode data provided in RCO_DELETE RAWDATA environment variable")
83         }
84         payload, err = r.SetSubscriptionDeleteRequestSequenceNumber(skeleton, sub_id)
85         return
86 }
87
88 func (r Rco) Consume(params *xapp.RMRParams) (err error) {
89         payload_seq_num, err := r.GetSubscriptionResponseSequenceNumber(params.Payload)
90         if err != nil {
91                 xapp.Logger.Error("Unable to get Subscription Sequence Number from Payload due to: " + err.Error())     
92         }
93         xapp.Logger.Info("Message Received: RMR SUBSCRIPTION_ID: %v | PAYLOAD SEQUENCE_NUMBER: %v", params.SubId, payload_seq_num)
94         return
95 }
96
97 func (r *Rco) SendRequests() (err error) {
98         message, err := r.GeneratePayload(SEEDSN)
99         if err != nil {
100                 xapp.Logger.Debug(err.Error())
101                 return
102         }
103         deletemessage, err := r.GenerateDeletePayload(DELETESEEDSN)
104         if err != nil {
105                 xapp.Logger.Debug(err.Error())
106                 return
107         }
108         for {
109                 time.Sleep(2 * time.Second)
110                 c <- submgr.RmrDatagram{12010, SEEDSN, message}
111                 SEEDSN++
112                 time.Sleep(2 * time.Second)
113                 c <- submgr.RmrDatagram{12020, DELETESEEDSN, deletemessage}
114                 DELETESEEDSN++
115         }
116         return
117 }
118
119 func (r *Rco) Run() {
120         for {
121                 message := <-c
122                 payload_seq_num, err := r.GetSubscriptionRequestSequenceNumber(message.Payload)
123                 if err != nil {
124                         xapp.Logger.Debug("Unable to get Subscription Sequence Number from Payload due to: " + err.Error())
125                 }
126                 params.SubId = int(message.SubscriptionId)
127                 params.Mtype = message.MessageType
128                 params.PayloadLen = len(message.Payload)
129                 params.Payload = message.Payload
130                 xapp.Logger.Info("Sending Message: TYPE: %v | RMR SUBSCRIPTION_ID: %v | PAYLOAD SEQUENCE_NUMBER: %v)", message.MessageType, message.SubscriptionId, payload_seq_num)
131                 xapp.Rmr.Send(params, false)
132         }
133 }
134
135 func (r *Rco) sendInvalidTestMessages(){
136         for {
137                 time.Sleep(7 * time.Second)
138                 c <- submgr.RmrDatagram{10000, 0, make([]byte, 1)}
139                 time.Sleep(7 * time.Second)
140                 c <- submgr.RmrDatagram{12010, 0, make([]byte, 1)}
141         }
142 }
143
144 func main() {
145         rco := Rco{}
146         go xapp.Rmr.Start(rco)
147         go rco.Run()
148         go rco.sendInvalidTestMessages()
149         err := rco.SendRequests()
150         if err != nil {
151                 os.Exit(1)
152         }
153 }