import (
"encoding/json"
- "errors"
"fmt"
"gerrit.o-ran-sc.org/r/ric-plt/submgr/pkg/rtmgr_models"
"gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
type testingRmrControl struct {
testingControl
rmrClientTest *xapp.RMRClient
+ active bool
}
-func (tc *testingRmrControl) RmrSend(params *xapp.RMRParams) (err error) {
+func (tc *testingRmrControl) RmrSend(params *RMRParams) (err error) {
//
//NOTE: Do this way until xapp-frame sending is improved
//
+ xapp.Logger.Info("(%s) RmrSend %s", tc.desc, params.String())
status := false
i := 1
for ; i <= 10 && status == false; i++ {
- status = tc.rmrClientTest.SendMsg(params)
+ status = tc.rmrClientTest.SendMsg(params.RMRParams)
if status == false {
- xapp.Logger.Info("rmr.Send() failed. Retry count %v, Mtype: %v, SubId: %v, Xid %s", i, params.Mtype, params.SubId, params.Xid)
+ xapp.Logger.Info("(%s) RmrSend failed. Retry count %v, %s", tc.desc, i, params.String())
time.Sleep(500 * time.Millisecond)
}
}
if status == false {
- err = errors.New("rmr.Send() failed")
- tc.rmrClientTest.Free(params.Mbuf)
+ err = fmt.Errorf("(%s) RmrSend failed. Retry count %v, %s", tc.desc, i, params.String())
+ xapp.Rmr.Free(params.Mbuf)
}
return
}
func initTestingRmrControl(desc string, rtfile string, port string, stat string, consumer xapp.MessageConsumer) testingRmrControl {
tc := testingRmrControl{}
+ tc.active = false
tc.testingControl = initTestingControl(desc, rtfile, port)
tc.rmrClientTest = xapp.NewRMRClientWithParams("tcp:"+port, 4096, 1, stat)
tc.rmrClientTest.SetReadyCB(tc.ReadyCB, nil)
//
//-----------------------------------------------------------------------------
type testingMessageChannel struct {
- rmrConChan chan *xapp.RMRParams
+ rmrConChan chan *RMRParams
}
func initTestingMessageChannel() testingMessageChannel {
mc := testingMessageChannel{}
- mc.rmrConChan = make(chan *xapp.RMRParams)
+ mc.rmrConChan = make(chan *RMRParams)
return mc
}
-//-----------------------------------------------------------------------------
-//
-//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
return trans
}
-func (tc *testingXappControl) Consume(msg *xapp.RMRParams) (err error) {
+func (tc *testingXappControl) Consume(params *xapp.RMRParams) (err error) {
+ xapp.Rmr.Free(params.Mbuf)
+ params.Mbuf = nil
+ msg := &RMRParams{params}
+
+ if params.Mtype == 55555 {
+ xapp.Logger.Info("(%s) Testing message ignore %s", tc.desc, msg.String())
+ tc.active = true
+ return
+ }
if strings.Contains(msg.Xid, tc.desc) {
- xapp.Logger.Info("(%s) Consume mtype=%s subid=%d xid=%s", tc.desc, xapp.RicMessageTypeToName[msg.Mtype], msg.SubId, msg.Xid)
+ xapp.Logger.Info("(%s) Consume %s", tc.desc, msg.String())
tc.rmrConChan <- msg
} else {
- xapp.Logger.Info("(%s) Ignore mtype=%s subid=%d xid=%s, Expected xid to contain %s", tc.desc, xapp.RicMessageTypeToName[msg.Mtype], msg.SubId, msg.Xid, tc.desc)
+ xapp.Logger.Info("(%s) Ignore %s", tc.desc, msg.String())
}
return
}
testingMessageChannel
}
-func (tc *testingE2termControl) Consume(msg *xapp.RMRParams) (err error) {
- xapp.Logger.Info("(%s) Consume mtype=%s subid=%d xid=%s", tc.desc, xapp.RicMessageTypeToName[msg.Mtype], msg.SubId, msg.Xid)
+func (tc *testingE2termControl) Consume(params *xapp.RMRParams) (err error) {
+ xapp.Rmr.Free(params.Mbuf)
+ params.Mbuf = nil
+ msg := &RMRParams{params}
+
+ if params.Mtype == 55555 {
+ xapp.Logger.Info("(%s) Testing message ignore %s", tc.desc, msg.String())
+ tc.active = true
+ return
+ }
+
+ xapp.Logger.Info("(%s) Consume %s", tc.desc, msg.String())
tc.rmrConChan <- msg
return
}
func TestMain(m *testing.M) {
xapp.Logger.Info("TestMain start")
+ //---------------------------------
+ //
+ //---------------------------------
+ http_handler := func(w http.ResponseWriter, r *http.Request) {
+ var req rtmgr_models.XappSubscriptionData
+ err := json.NewDecoder(r.Body).Decode(&req)
+ if err != nil {
+ xapp.Logger.Error("%s", err.Error())
+ }
+ xapp.Logger.Info("(http handler) handling Address=%s Port=%d SubscriptionID=%d", *req.Address, *req.Port, *req.SubscriptionID)
+
+ w.WriteHeader(200)
+ }
+
+ go func() {
+ http.HandleFunc("/", http_handler)
+ http.ListenAndServe("localhost:8989", nil)
+ }()
+
+ //---------------------------------
+ //
+ //---------------------------------
+
//
//Cfg creation won't work like this as xapp-frame reads it during init.
//
xapp.Logger.Info("Using cfg file %s", os.Getenv("CFG_FILE"))
//---------------------------------
+ // Static routetable for rmr
+ //
// NOTE: Routing table is configured so, that responses
// are duplicated to xapp1 and xapp2 instances.
// If XID is not matching xapp stub will just
// drop message. (Messages 12011, 12012, 12021, 12022)
+ //
+ // 14560 submgr
+ // 15560 e2term stub
+ // 13560 xapp1 stub
+ // 13660 xapp2 stub
+ //
//---------------------------------
- xapp.Logger.Info("### submgr main run ###")
- subsrt := `newrt|start
+ allrt := `newrt|start
mse|12010|-1|localhost:14560
mse|12010,localhost:14560|-1|localhost:15560
mse|12011,localhost:15560|-1|localhost:14560
-mse|12011|-1|localhost:13560;localhost:13660
mse|12012,localhost:15560|-1|localhost:14560
-mse|12012|-1|localhost:13560;localhost:13660
+mse|12011,localhost:14560|-1|localhost:13660;localhost:13560
+mse|12012,localhost:14560|-1|localhost:13660;localhost:13560
mse|12020|-1|localhost:14560
mse|12020,localhost:14560|-1|localhost:15560
mse|12021,localhost:15560|-1|localhost:14560
-mse|12021|-1|localhost:13560;localhost:13660
mse|12022,localhost:15560|-1|localhost:14560
-mse|12022|-1|localhost:13560;localhost:13660
+mse|12021,localhost:14560|-1|localhost:13660;localhost:13560
+mse|12022,localhost:14560|-1|localhost:13660;localhost:13560
+mse|55555|-1|localhost:13660;localhost:13560,localhost:15560
newrt|end
`
+
+ //---------------------------------
+ //
+ //---------------------------------
+ xapp.Logger.Info("### submgr main run ###")
+
+ subsrt := allrt
+ /*
+ subsrt := `newrt|start
+ mse|12010|-1|localhost:14560
+ mse|12010,localhost:14560|-1|localhost:15560
+ mse|12011,localhost:15560|-1|localhost:14560
+ mse|12011|-1|localhost:13560;localhost:13660
+ mse|12012,localhost:15560|-1|localhost:14560
+ mse|12012|-1|localhost:13560;localhost:13660
+ mse|12020|-1|localhost:14560
+ mse|12020,localhost:14560|-1|localhost:15560
+ mse|12021,localhost:15560|-1|localhost:14560
+ mse|12021|-1|localhost:13560;localhost:13660
+ mse|12022,localhost:15560|-1|localhost:14560
+ mse|12022|-1|localhost:13560;localhost:13660
+ newrt|end
+ `
+ */
+
subrtfilename, _ := testCreateTmpFile(subsrt)
defer os.Remove(subrtfilename)
mainCtrl = createNewMainControl("main", subrtfilename, "14560")
//---------------------------------
xapp.Logger.Info("### xapp1 rmr run ###")
- xapprt1 := `newrt|start
-mse|12010|-1|localhost:14560
-mse|12011|-1|localhost:13560
-mse|12012|-1|localhost:13560
-mse|12020|-1|localhost:14560
-mse|12021|-1|localhost:13560
-mse|12022|-1|localhost:13560
-newrt|end
-`
+ xapprt1 := allrt
+ /*
+ xapprt1 := `newrt|start
+ mse|12010|-1|localhost:14560
+ mse|12011|-1|localhost:13560
+ mse|12012|-1|localhost:13560
+ mse|12020|-1|localhost:14560
+ mse|12021|-1|localhost:13560
+ mse|12022|-1|localhost:13560
+ newrt|end
+ `
+ */
xapprtfilename1, _ := testCreateTmpFile(xapprt1)
defer os.Remove(xapprtfilename1)
xapp.Logger.Info("### xapp2 rmr run ###")
- xapprt2 := `newrt|start
-mse|12010|-1|localhost:14560
-mse|12011|-1|localhost:13660
-mse|12012|-1|localhost:13660
-mse|12020|-1|localhost:14560
-mse|12021|-1|localhost:13660
-mse|12022|-1|localhost:13660
-newrt|end
-`
+ xapprt2 := allrt
+ /*
+ xapprt2 := `newrt|start
+ mse|12010|-1|localhost:14560
+ mse|12011|-1|localhost:13660
+ mse|12012|-1|localhost:13660
+ mse|12020|-1|localhost:14560
+ mse|12021|-1|localhost:13660
+ mse|12022|-1|localhost:13660
+ newrt|end
+ `
+ */
xapprtfilename2, _ := testCreateTmpFile(xapprt2)
defer os.Remove(xapprtfilename2)
//---------------------------------
xapp.Logger.Info("### e2term rmr run ###")
- e2termrt := `newrt|start
-mse|12010|-1|localhost:15560
-mse|12011|-1|localhost:14560
-mse|12012|-1|localhost:14560
-mse|12020|-1|localhost:15560
-mse|12021|-1|localhost:14560
-mse|12022|-1|localhost:14560
-newrt|end
-`
+ e2termrt := allrt
+ /*
+ e2termrt := `newrt|start
+ mse|12010|-1|localhost:15560
+ mse|12011|-1|localhost:14560
+ mse|12012|-1|localhost:14560
+ mse|12020|-1|localhost:15560
+ mse|12021|-1|localhost:14560
+ mse|12022|-1|localhost:14560
+ newrt|end
+ `
+ */
e2termrtfilename, _ := testCreateTmpFile(e2termrt)
defer os.Remove(e2termrtfilename)
e2termConn = createNewE2termControl("e2termstub", e2termrtfilename, "15560", "RMRE2TERMSTUB")
//---------------------------------
- //
+ // Testing message sending
//---------------------------------
- http_handler := func(w http.ResponseWriter, r *http.Request) {
- var req rtmgr_models.XappSubscriptionData
- err := json.NewDecoder(r.Body).Decode(&req)
- if err != nil {
- xapp.Logger.Error("%s", err.Error())
- }
- xapp.Logger.Info("(http handler) handling Address=%s Port=%d SubscriptionID=%d", *req.Address, *req.Port, *req.SubscriptionID)
+ var dummyBuf []byte = make([]byte, 100)
- w.WriteHeader(200)
+ params := &RMRParams{&xapp.RMRParams{}}
+ params.Mtype = 55555
+ params.SubId = -1
+ params.Payload = dummyBuf
+ params.PayloadLen = 100
+ params.Meid = &xapp.RMRMeid{RanName: "NONEXISTINGRAN"}
+ params.Xid = "THISISTESTFORSTUBS"
+ params.Mbuf = nil
+
+ status := false
+ i := 1
+ for ; i <= 10 && status == false; i++ {
+ xapp.Rmr.Send(params.RMRParams, false)
+ if e2termConn.active == true && xappConn1.active == true && xappConn2.active == true {
+ status = true
+ break
+ } else {
+ xapp.Logger.Info("Sleep 0.5 secs and try routes again")
+ time.Sleep(500 * time.Millisecond)
+ }
}
- go func() {
- http.HandleFunc("/", http_handler)
- http.ListenAndServe("localhost:8989", nil)
- }()
+ if status == false {
+ xapp.Logger.Error("Could not initialize routes")
+ os.Exit(1)
+ }
//---------------------------------
//