blob: f14bd1fd386b4a363390bb91e288b714f9b691ec [file] [log] [blame]
Juha Hyttinen5f8ffa02020-02-06 15:28:59 +02001/*
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*/
19package teststub
20
21import (
22 "gerrit.o-ran-sc.org/r/ric-plt/submgr/pkg/xapptweaks"
23 "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
Juha Hyttinen73486252020-04-06 15:01:52 +030024 "strconv"
Juha Hyttinen5f8ffa02020-02-06 15:28:59 +020025 "strings"
26 "testing"
27 "time"
28)
29
30//-----------------------------------------------------------------------------
31//
32//-----------------------------------------------------------------------------
33type RmrStubControl struct {
34 RmrControl
35 xapptweaks.RmrWrapper
36 RecvChan chan *xapptweaks.RMRParams
37 Active bool
38 InitMsg int
39 CheckXid bool
40}
41
42func (tc *RmrStubControl) SetActive() {
43 tc.Active = true
44}
45
46func (tc *RmrStubControl) IsActive() bool {
47 return tc.Active
48}
49
50func (tc *RmrStubControl) SetCheckXid(val bool) {
51 tc.CheckXid = val
52}
53
54func (tc *RmrStubControl) IsCheckXid() bool {
55 return tc.CheckXid
56}
57
58func (tc *RmrStubControl) IsChanEmpty() bool {
59 if len(tc.RecvChan) > 0 {
60 return false
61 }
62 return true
63}
64
65func (tc *RmrStubControl) TestMsgChanEmpty(t *testing.T) {
66 if tc.IsChanEmpty() == false {
67 tc.TestError(t, "message channel not empty")
68 }
69}
70
Juha Hyttinen73486252020-04-06 15:01:52 +030071func (tc *RmrStubControl) Init(desc string, rtfile string, port uint16, rtport uint16, stat string, initMsg int) {
Juha Hyttinen5f8ffa02020-02-06 15:28:59 +020072 tc.InitMsg = initMsg
73 tc.Active = false
74 tc.RecvChan = make(chan *xapptweaks.RMRParams)
Juha Hyttinen73486252020-04-06 15:01:52 +030075 tc.RmrControl.Init(desc, rtfile, port, rtport)
Juha Hyttinen5f8ffa02020-02-06 15:28:59 +020076 tc.RmrWrapper.Init()
77
Juha Hyttinen73486252020-04-06 15:01:52 +030078 tc.Rmr = xapp.NewRMRClientWithParams("tcp:"+strconv.FormatUint(uint64(port), 10), 65534, 1, 0, stat)
Juha Hyttinen5f8ffa02020-02-06 15:28:59 +020079 tc.Rmr.SetReadyCB(tc.ReadyCB, nil)
80 go tc.Rmr.Start(tc)
81
82 tc.WaitCB()
83 allRmrStubs = append(allRmrStubs, tc)
84}
85
86func (tc *RmrStubControl) Consume(params *xapp.RMRParams) (err error) {
87 defer tc.Rmr.Free(params.Mbuf)
88 msg := xapptweaks.NewParams(params)
89 tc.CntRecvMsg++
90
91 if msg.Mtype == tc.InitMsg {
92 tc.Logger.Info("Testing message ignore %s", msg.String())
93 tc.SetActive()
94 return
95 }
96
97 if tc.IsCheckXid() == true && strings.Contains(msg.Xid, tc.GetDesc()) == false {
98 tc.Logger.Info("Ignore %s", msg.String())
99 return
100 }
101
102 tc.Logger.Info("Consume %s", msg.String())
103 tc.PushMsg(msg)
104 return
105}
106
107func (tc *RmrStubControl) PushMsg(msg *xapptweaks.RMRParams) {
108 tc.Logger.Debug("RmrStubControl PushMsg ... msg(%d) waiting", msg.Mtype)
109 tc.RecvChan <- msg
110 tc.Logger.Debug("RmrStubControl PushMsg ... done")
111}
112
113func (tc *RmrStubControl) WaitMsg(secs time.Duration) *xapptweaks.RMRParams {
114 tc.Logger.Debug("RmrStubControl WaitMsg ... waiting")
115 if secs == 0 {
116 msg := <-tc.RecvChan
117 tc.Logger.Debug("RmrStubControl WaitMsg ... msg(%d) done", msg.Mtype)
118 return msg
119 }
120 select {
121 case msg := <-tc.RecvChan:
122 tc.Logger.Debug("RmrStubControl WaitMsg ... msg(%d) done", msg.Mtype)
123 return msg
124 case <-time.After(secs * time.Second):
125 tc.Logger.Debug("RmrStubControl WaitMsg ... timeout")
126 return nil
127 }
128 tc.Logger.Debug("RmrStubControl WaitMsg ... error")
129 return nil
130}
131
132var allRmrStubs []*RmrStubControl
133
134//-----------------------------------------------------------------------------
135//
136//-----------------------------------------------------------------------------
137
138func RmrStubControlWaitAlive(seconds int, mtype int, rmr xapptweaks.XAppWrapperIf) bool {
139
140 var dummyBuf []byte = make([]byte, 100)
141
142 params := xapptweaks.NewParams(nil)
143 params.Mtype = mtype
144 params.SubId = -1
145 params.Payload = dummyBuf
146 params.PayloadLen = 100
147 params.Meid = &xapp.RMRMeid{RanName: "TESTPING"}
148 params.Xid = "TESTPING"
149 params.Mbuf = nil
150
Juha Hyttinen826f1d92020-03-05 12:59:03 +0200151 if len(allRmrStubs) == 0 {
152 rmr.GetLogger().Info("No rmr stubs so no need to wait those to be alive")
153 return true
154 }
Juha Hyttinen5f8ffa02020-02-06 15:28:59 +0200155 status := false
156 i := 1
157 for ; i <= seconds*2 && status == false; i++ {
158
159 rmr.GetLogger().Info("SEND TESTPING: %s", params.String())
Juha Hyttinend708a432020-03-09 09:37:06 +0200160 rmr.RmrSend(params, 0)
Juha Hyttinen5f8ffa02020-02-06 15:28:59 +0200161
162 status = true
163 for _, val := range allRmrStubs {
164 if val.IsActive() == false {
165 status = false
166 break
167 }
168 }
169 if status == true {
170 break
171 }
172 rmr.GetLogger().Info("Sleep 0.5 secs and try routes again")
173 time.Sleep(500 * time.Millisecond)
174 }
175
176 if status == false {
177 rmr.GetLogger().Error("Could not initialize routes")
178 }
179 return status
180}