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