2 ==================================================================================
3 Copyright (c) 2019 AT&T Intellectual Property.
4 Copyright (c) 2019 Nokia
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
10 http://www.apache.org/licenses/LICENSE-2.0
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 ==================================================================================
22 "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
28 //-----------------------------------------------------------------------------
30 //-----------------------------------------------------------------------------
31 type RmrStubControl struct {
34 RecvChan chan *xapp.RMRParams
40 func (tc *RmrStubControl) SetActive() {
44 func (tc *RmrStubControl) IsActive() bool {
48 func (tc *RmrStubControl) SetCheckXid(val bool) {
52 func (tc *RmrStubControl) IsCheckXid() bool {
56 func (tc *RmrStubControl) IsChanEmpty() bool {
57 if len(tc.RecvChan) > 0 {
63 func (tc *RmrStubControl) TestMsgChanEmpty(t *testing.T) {
64 if tc.IsChanEmpty() == false {
65 tc.TestError(t, "message channel not empty")
69 func (tc *RmrStubControl) Init(desc string, srcId RmrSrcId, rtgSvc RmrRtgSvc, statDesc string, initMsg int) {
72 tc.RecvChan = make(chan *xapp.RMRParams)
73 tc.RmrControl.Init(desc, srcId, rtgSvc)
75 tc.RMRClient = xapp.NewRMRClientWithParams(&xapp.RMRClientParams{
77 RmrData: xapp.PortData{
78 Name: "", // Not used currently
79 Port: int(srcId.Port),
84 //Policies: // Not used currently
89 tc.RMRClient.SetReadyCB(tc.ReadyCB, nil)
90 go tc.RMRClient.Start(tc)
93 allRmrStubs = append(allRmrStubs, tc)
96 func (tc *RmrStubControl) Consume(msg *xapp.RMRParams) (err error) {
97 defer tc.RMRClient.Free(msg.Mbuf)
99 cPay := append(msg.Payload[:0:0], msg.Payload...)
101 msg.PayloadLen = len(cPay)
103 if msg.Mtype == tc.InitMsg {
104 tc.Info("Testing message ignore %s", msg.String())
109 if tc.IsCheckXid() == true && strings.Contains(msg.Xid, tc.GetDesc()) == false {
110 tc.Info("Ignore %s", msg.String())
114 tc.Info("Consume %s", msg.String())
119 func (tc *RmrStubControl) PushMsg(msg *xapp.RMRParams) {
120 tc.Debug("RmrStubControl PushMsg ... msg(%d) waiting", msg.Mtype)
122 tc.Debug("RmrStubControl PushMsg ... done")
125 func (tc *RmrStubControl) WaitMsg(secs time.Duration) *xapp.RMRParams {
126 tc.Debug("RmrStubControl WaitMsg ... waiting")
129 tc.Debug("RmrStubControl WaitMsg ... msg(%d) done", msg.Mtype)
133 case msg := <-tc.RecvChan:
134 tc.Debug("RmrStubControl WaitMsg ... msg(%d) done", msg.Mtype)
136 case <-time.After(secs * time.Second):
137 tc.Debug("RmrStubControl WaitMsg ... timeout")
140 tc.Debug("RmrStubControl WaitMsg ... error")
144 var allRmrStubs []*RmrStubControl
146 //-----------------------------------------------------------------------------
148 //-----------------------------------------------------------------------------
150 func RmrStubControlWaitAlive(seconds int, mtype int, rmr *xapp.RMRClient, tent *TestWrapper) bool {
152 var dummyBuf []byte = make([]byte, 100)
154 params := &xapp.RMRParams{}
157 params.Payload = dummyBuf
158 params.PayloadLen = 100
159 params.Meid = &xapp.RMRMeid{RanName: "TESTPING"}
160 params.Xid = "TESTPING"
163 if len(allRmrStubs) == 0 {
164 tent.Info("No rmr stubs so no need to wait those to be alive")
169 for ; i <= seconds*2 && status == false; i++ {
171 tent.Info("SEND TESTPING: %s", params.String())
172 rmr.SendWithRetry(params, false, 0)
175 for _, val := range allRmrStubs {
176 if val.IsActive() == false {
184 tent.Info("Sleep 0.5 secs and try routes again")
185 time.Sleep(500 * time.Millisecond)
189 tent.Error("Could not initialize routes")