RICPLT-2910
libe2ap library updated and moved to 3rdparty directory
e2ap_wrapper library to be used from go:
- message wrappers (used now only in tests)
- function wrappers that manipulates message
Go wrappers for messages
Initial unittest implementation.
Change-Id: Ie77cc2ae90b83b12e5c738e6f570fe4661961da6
Signed-off-by: Juha Hyttinen <juha.hyttinen@nokia.com>
diff --git a/pkg/control/main_test.go b/pkg/control/main_test.go
new file mode 100644
index 0000000..3f1284c
--- /dev/null
+++ b/pkg/control/main_test.go
@@ -0,0 +1,237 @@
+/*
+==================================================================================
+ Copyright (c) 2019 AT&T Intellectual Property.
+ Copyright (c) 2019 Nokia
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+==================================================================================
+*/
+
+package control
+
+import (
+ "errors"
+ "fmt"
+ "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
+ "io/ioutil"
+ "os"
+ "testing"
+ "time"
+)
+
+//-----------------------------------------------------------------------------
+//
+//-----------------------------------------------------------------------------
+type testingControl struct {
+ desc string
+ syncChan chan struct{}
+}
+
+func (tc *testingControl) ReadyCB(data interface{}) {
+ xapp.Logger.Info("testingControl(%s) ReadyCB", tc.desc)
+ tc.syncChan <- struct{}{}
+ return
+}
+
+//-----------------------------------------------------------------------------
+//
+//-----------------------------------------------------------------------------
+type testingRmrControl struct {
+ testingControl
+ rmrClientTest *xapp.RMRClient
+ rmrConChan chan *xapp.RMRParams
+}
+
+func (tc *testingRmrControl) Consume(msg *xapp.RMRParams) (err error) {
+ xapp.Logger.Info("testingRmrControl(%s) Consume", tc.desc)
+ tc.rmrConChan <- msg
+ return
+}
+
+func (tc *testingRmrControl) RmrSend(params *xapp.RMRParams) (err error) {
+ //
+ //NOTE: Do this way until xapp-frame sending is improved
+ //
+ status := false
+ i := 1
+ for ; i <= 10 && status == false; i++ {
+ status = tc.rmrClientTest.SendMsg(params)
+ 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)
+ time.Sleep(500 * time.Millisecond)
+ }
+ }
+ if status == false {
+ err = errors.New("rmr.Send() failed")
+ tc.rmrClientTest.Free(params.Mbuf)
+ }
+ return
+}
+
+func createNewRmrControl(desc string, rtfile string, port string, stat string) *testingRmrControl {
+ os.Setenv("RMR_SEED_RT", rtfile)
+ os.Setenv("RMR_SRC_ID", "localhost:"+port)
+ xapp.Logger.Info("Using rt file %s", os.Getenv("RMR_SEED_RT"))
+ xapp.Logger.Info("Using src id %s", os.Getenv("RMR_SRC_ID"))
+ newConn := &testingRmrControl{}
+ newConn.desc = desc
+ newConn.syncChan = make(chan struct{})
+ newConn.rmrClientTest = xapp.NewRMRClientWithParams("tcp:"+port, 4096, 1, stat)
+ newConn.rmrConChan = make(chan *xapp.RMRParams)
+ newConn.rmrClientTest.SetReadyCB(newConn.ReadyCB, nil)
+ go newConn.rmrClientTest.Start(newConn)
+ <-newConn.syncChan
+ return newConn
+}
+
+//-----------------------------------------------------------------------------
+//
+//-----------------------------------------------------------------------------
+
+func testError(t *testing.T, pattern string, args ...interface{}) {
+ xapp.Logger.Error(fmt.Sprintf(pattern, args...))
+ t.Errorf(fmt.Sprintf(pattern, args...))
+}
+
+func testCreateTmpFile(str string) (string, error) {
+ file, err := ioutil.TempFile("/tmp", "*.rt")
+ if err != nil {
+ return "", err
+ }
+ _, err = file.WriteString(str)
+ if err != nil {
+ file.Close()
+ return "", err
+ }
+ return file.Name(), nil
+}
+
+//-----------------------------------------------------------------------------
+//
+//-----------------------------------------------------------------------------
+
+var xappConn *testingRmrControl
+var e2termConn *testingRmrControl
+
+func TestMain(m *testing.M) {
+ xapp.Logger.Info("TestMain start")
+
+ //
+ //Cfg creation won't work like this as xapp-frame reads it during init.
+ //
+ /*
+ cfgstr:=`{
+ "local": {
+ "host": ":8080"
+ },
+ "logger": {
+ "level": 4
+ },
+ "rmr": {
+ "protPort": "tcp:14560",
+ "maxSize": 4096,
+ "numWorkers": 1,
+ "txMessages": ["RIC_SUB_REQ", "RIC_SUB_DEL_REQ"],
+ "rxMessages": ["RIC_SUB_RESP", "RIC_SUB_FAILURE", "RIC_SUB_DEL_RESP", "RIC_SUB_DEL_FAILURE", "RIC_INDICATION"]
+ },
+ "db": {
+ "host": "localhost",
+ "port": 6379,
+ "namespaces": ["sdl", "rnib"]
+ }
+ }`
+
+ cfgfilename,_ := testCreateTmpFile(cfgstr)
+ defer os.Remove(cfgfilename)
+ os.Setenv("CFG_FILE", cfgfilename)
+ */
+ xapp.Logger.Info("Using cfg file %s", os.Getenv("CFG_FILE"))
+
+ //---------------------------------
+ //
+ //---------------------------------
+ xapp.Logger.Info("### submgr main run ###")
+
+ 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
+mse|12012,localhost:15560|-1|localhost:14560
+mse|12012|-1|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
+mse|12022,localhost:15560|-1|localhost:14560
+mse|12022|-1|localhost:13560
+newrt|end
+`
+
+ subrtfilename, _ := testCreateTmpFile(subsrt)
+ defer os.Remove(subrtfilename)
+ os.Setenv("RMR_SEED_RT", subrtfilename)
+ xapp.Logger.Info("Using rt file %s", os.Getenv("RMR_SEED_RT"))
+
+ mainCtrl := &testingControl{}
+ mainCtrl.desc = "main"
+ mainCtrl.syncChan = make(chan struct{})
+
+ os.Setenv("RMR_SRC_ID", "localhost:14560")
+ c := NewControl()
+ c.skipRouteUpdate = true
+ xapp.SetReadyCB(mainCtrl.ReadyCB, nil)
+ go xapp.RunWithParams(c, false)
+ <-mainCtrl.syncChan
+
+ //---------------------------------
+ //
+ //---------------------------------
+ xapp.Logger.Info("### xapp rmr run ###")
+
+ xapprt := `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
+`
+
+ xapprtfilename, _ := testCreateTmpFile(xapprt)
+ defer os.Remove(xapprtfilename)
+ xappConn = createNewRmrControl("xappConn", xapprtfilename, "13560", "RMRXAPPSTUB")
+
+ //---------------------------------
+ //
+ //---------------------------------
+ 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
+`
+
+ e2termrtfilename, _ := testCreateTmpFile(e2termrt)
+ defer os.Remove(e2termrtfilename)
+ e2termConn = createNewRmrControl("e2termConn", e2termrtfilename, "15560", "RMRE2TERMSTUB")
+
+ code := m.Run()
+ os.Exit(code)
+}