From: zkoczka Date: Wed, 2 Oct 2019 15:16:06 +0000 (+0200) Subject: Add new packages to the container X-Git-Tag: 0.3.9~9 X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=aaf8d396257a455247b24716a32b05fc3fd145c2;p=ric-plt%2Frtmgr.git Add new packages to the container Change-Id: I70b0d0dbb4a5f946f2a3ff723e7f86132a25d245 Signed-off-by: zkoczka --- diff --git a/.gitignore b/.gitignore index 13ea118..4cc41b0 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ vendor bin pkg/sdl/ut.rt .idea/* - +.gitreview diff --git a/.gitreview b/.gitreview index fbe7867..f49839e 100644 --- a/.gitreview +++ b/.gitreview @@ -3,4 +3,5 @@ host=gerrit.o-ran-sc.org port=29418 project=ric-plt/rtmgr defaultbranch=master -defaultremote=origin +defaultremote=LinuxFoundation + diff --git a/RELNOTES b/RELNOTES index 39d7e16..524e4ad 100644 --- a/RELNOTES +++ b/RELNOTES @@ -1,3 +1,6 @@ +### v0.3.4 +* The following tools made available in the final docker image: iputils-ping, net-tools, curl and tcpdump + ### v0.3.3 * Introduced delete API over REST interface for subscriptions. diff --git a/cmd/rtmgr.go b/cmd/rtmgr.go index 248226b..24b917c 100644 --- a/cmd/rtmgr.go +++ b/cmd/rtmgr.go @@ -54,26 +54,21 @@ func parseArgs() { args["nbi"] = flag.String("nbi", "httpRESTful", "Northbound interface module to be used. Valid values are: 'httpGetter | httpRESTful'") args["sbi"] = flag.String("sbi", "nngpush", "Southbound interface module to be used. Valid values are: 'nngpush") args["rpe"] = flag.String("rpe", "rmrpush", "Route Policy Engine to be used. Valid values are: 'rmrpush'") - args["sdl"] = flag.String("sdl", "file", "Datastore enginge to be used. Valid values are: 'file'") + args["sdl"] = flag.String("sdl", "file", "Data store engine to be used. Valid values are: 'file'") args["xm-url"] = flag.String("xm-url", "http://localhost:3000/xapps", "HTTP URL where xApp Manager exposes the entire xApp List") args["nbi-if"] = flag.String("nbi-if", "http://localhost:8888", "Base HTTP URL where routing manager will be listening on") args["sbi-if"] = flag.String("sbi-if", "0.0.0.0", "IPv4 address of interface where Southbound socket to be opened") args["filename"] = flag.String("filename", "/db/rt.json", "Absolute path of file where the route information to be stored") - args["loglevel"] = flag.String("loglevel", "INFO", "INFO | WARN | ERROR | DEBUG") + args["loglevel"] = flag.String("loglevel", "INFO", "INFO | WARN | ERROR | DEBUG | TRACE") flag.Parse() } -func initRtmgr() (nbi.NbiEngine, sbi.SbiEngine, sdl.SdlEngine, rpe.RpeEngine, error) { - var err error - var nbii nbi.NbiEngine - var sbii sbi.SbiEngine - var sdli sdl.SdlEngine - var rpei rpe.RpeEngine - if nbii, err = nbi.GetNbi(*args["nbi"]); err == nil && nbii != nil { - if sbii, err = sbi.GetSbi(*args["sbi"]); err == nil && sbii != nil { - if sdli, err = sdl.GetSdl(*args["sdl"]); err == nil && sdli != nil { - if rpei, err = rpe.GetRpe(*args["rpe"]); err == nil && rpei != nil { - return nbii, sbii, sdli, rpei, nil +func initRtmgr() (nbiEngine nbi.Engine, sbiEngine sbi.Engine, sdlEngine sdl.Engine, rpeEngine rpe.Engine, err error) { + if nbiEngine, err = nbi.GetNbi(*args["nbi"]); err == nil && nbiEngine != nil { + if sbiEngine, err = sbi.GetSbi(*args["sbi"]); err == nil && sbiEngine != nil { + if sdlEngine, err = sdl.GetSdl(*args["sdl"]); err == nil && sdlEngine != nil { + if rpeEngine, err = rpe.GetRpe(*args["rpe"]); err == nil && rpeEngine != nil { + return nbiEngine, sbiEngine, sdlEngine, rpeEngine, nil } } } @@ -81,7 +76,7 @@ func initRtmgr() (nbi.NbiEngine, sbi.SbiEngine, sdl.SdlEngine, rpe.RpeEngine, er return nil, nil, nil, nil, err } -func serveSBI(triggerSBI <-chan bool, sbiEngine sbi.SbiEngine, sdlEngine sdl.SdlEngine, rpeEngine rpe.RpeEngine) { +func serveSBI(triggerSBI <-chan bool, sbiEngine sbi.Engine, sdlEngine sdl.Engine, rpeEngine rpe.Engine) { for { if <-triggerSBI { data, err := sdlEngine.ReadAll(*args["filename"]) @@ -99,7 +94,7 @@ func serveSBI(triggerSBI <-chan bool, sbiEngine sbi.SbiEngine, sdlEngine sdl.Sdl } } -func serve(nbiEngine nbi.NbiEngine, sbiEngine sbi.SbiEngine, sdlEngine sdl.SdlEngine, rpeEngine rpe.RpeEngine) { +func serve(nbiEngine nbi.Engine, sbiEngine sbi.Engine, sdlEngine sdl.Engine, rpeEngine rpe.Engine) { triggerSBI := make(chan bool) @@ -124,11 +119,11 @@ func serve(nbiEngine nbi.NbiEngine, sbiEngine sbi.SbiEngine, sdlEngine sdl.SdlEn for { time.Sleep(INTERVAL * time.Second) if *args["nbi"] == "httpGetter" { - data, err := nbiEngine.(*nbi.HttpGetter).FetchAllXapps(*args["xm-url"]) + data, err := nbiEngine.(*nbi.HttpGetter).FetchAllXApps(*args["xm-url"]) if err != nil { rtmgr.Logger.Error("Cannot fetch xapp data due to: " + err.Error()) } else if data != nil { - sdlEngine.WriteXapps(*args["filename"], data) + sdlEngine.WriteXApps(*args["filename"], data) } } diff --git a/container-tag.yaml b/container-tag.yaml index 884ddaa..d2bab01 100644 --- a/container-tag.yaml +++ b/container-tag.yaml @@ -2,4 +2,4 @@ # By default this file is in the docker build directory, # but the location can configured in the JJB template. --- -tag: 0.3.3 +tag: 0.3.4 diff --git a/pkg/nbi/httpgetter.go b/pkg/nbi/httpgetter.go index 93ef532..bdcc435 100644 --- a/pkg/nbi/httpgetter.go +++ b/pkg/nbi/httpgetter.go @@ -35,20 +35,20 @@ import ( ) type HttpGetter struct { - NbiEngine - FetchAllXapps FetchAllXappsHandler + Engine + FetchAllXApps FetchAllXAppsHandler } func NewHttpGetter() *HttpGetter { instance := new(HttpGetter) - instance.FetchAllXapps = fetchAllXapps + instance.FetchAllXApps = fetchAllXApps return instance } var myClient = &http.Client{Timeout: 5 * time.Second} -func fetchAllXapps(xmurl string) (*[]rtmgr.XApp, error) { - rtmgr.Logger.Info("Invoked httpgetter.fetchXappList: " + xmurl) +func fetchAllXApps(xmurl string) (*[]rtmgr.XApp, error) { + rtmgr.Logger.Info("Invoked httpGetter.fetchXappList: " + xmurl) r, err := myClient.Get(xmurl) if err != nil { return nil, err @@ -57,21 +57,21 @@ func fetchAllXapps(xmurl string) (*[]rtmgr.XApp, error) { if r.StatusCode == 200 { rtmgr.Logger.Debug("http client raw response: %v", r) - var xapps []rtmgr.XApp - err = json.NewDecoder(r.Body).Decode(&xapps) + var xApps []rtmgr.XApp + err = json.NewDecoder(r.Body).Decode(&xApps) if err != nil { rtmgr.Logger.Warn("Json decode failed: " + err.Error()) } rtmgr.Logger.Info("HTTP GET: OK") - rtmgr.Logger.Debug("httpgetter.fetchXappList returns: %v", xapps) - return &xapps, err + rtmgr.Logger.Debug("httpGetter.fetchXappList returns: %v", xApps) + return &xApps, err } - rtmgr.Logger.Warn("httpgetter got an unexpected http status code: %v", r.StatusCode) + rtmgr.Logger.Warn("httpGetter got an unexpected http status code: %v", r.StatusCode) return nil, nil } func (g *HttpGetter) Initialize(xmurl string, nbiif string, fileName string, configfile string, - sdlEngine sdl.SdlEngine, rpeEngine rpe.RpeEngine, triggerSBI chan<- bool) error { + sdlEngine sdl.Engine, rpeEngine rpe.Engine, triggerSBI chan<- bool) error { return nil } diff --git a/pkg/nbi/httpgetter_test.go b/pkg/nbi/httpgetter_test.go index c1c597a..5c7082a 100644 --- a/pkg/nbi/httpgetter_test.go +++ b/pkg/nbi/httpgetter_test.go @@ -33,19 +33,19 @@ import ( ) var ( - XMURL string = "http://127.0.0.1:3000/ric/v1/xapps" + XMURL = "http://127.0.0.1:3000/ric/v1/xapps" ) func TestFetchXappListInvalidData(t *testing.T) { var httpGetter = NewHttpGetter() - _, err := httpGetter.FetchAllXapps(XMURL) + _, err := httpGetter.FetchAllXApps(XMURL) if err == nil { t.Error("No XApp data received: " + err.Error()) } } func TestFetchXappListWithInvalidData(t *testing.T) { - var expected int = 0 + var expected = 0 rtmgr.SetLogLevel("debug") b := []byte(`{"ID":"deadbeef1234567890", "Version":0, "EventType":"all"}`) l, err := net.Listen("tcp", "127.0.0.1:3000") @@ -68,7 +68,7 @@ func TestFetchXappListWithInvalidData(t *testing.T) { ts.Start() defer ts.Close() var httpGetter = NewHttpGetter() - xapplist, err := httpGetter.FetchAllXapps(XMURL) + xapplist, err := httpGetter.FetchAllXApps(XMURL) if err == nil { t.Error("Error occured: " + err.Error()) } else { @@ -79,8 +79,8 @@ func TestFetchXappListWithInvalidData(t *testing.T) { } } -func TestFetchAllXappsWithValidData(t *testing.T) { - var expected int = 1 +func TestFetchAllXAppsWithValidData(t *testing.T) { + var expected = 1 b := []byte(`[ { "name":"xapp-01","status":"unknown","version":"1.2.3", @@ -116,7 +116,7 @@ func TestFetchAllXappsWithValidData(t *testing.T) { ts.Start() defer ts.Close() var httpGetter = NewHttpGetter() - xapplist, err := httpGetter.FetchAllXapps(XMURL) + xapplist, err := httpGetter.FetchAllXApps(XMURL) if err != nil { t.Error("Error occured: " + err.Error()) } else { diff --git a/pkg/nbi/httprestful.go b/pkg/nbi/httprestful.go index 4124c02..a9aeaa2 100644 --- a/pkg/nbi/httprestful.go +++ b/pkg/nbi/httprestful.go @@ -25,6 +25,7 @@ package nbi +//noinspection GoUnresolvedReference,GoUnresolvedReference,GoUnresolvedReference,GoUnresolvedReference,GoUnresolvedReference,GoUnresolvedReference import ( "encoding/json" "errors" @@ -47,7 +48,7 @@ import ( //var myClient = &http.Client{Timeout: 1 * time.Second} type HttpRestful struct { - NbiEngine + Engine LaunchRest LaunchRestHandler RecvXappCallbackData RecvXappCallbackDataHandler ProvideXappHandleHandlerImpl ProvideXappHandleHandlerImpl @@ -89,12 +90,12 @@ func recvXappCallbackData(dataChannel <-chan *models.XappCallbackData) (*[]rtmgr func validateXappCallbackData(callbackData *models.XappCallbackData) error { if len(callbackData.XApps) == 0 { - return fmt.Errorf("Invalid Data field: \"%s\"", callbackData.XApps) + return fmt.Errorf("invalid Data field: \"%s\"", callbackData.XApps) } var xapps []rtmgr.XApp err := json.Unmarshal([]byte(callbackData.XApps), &xapps) if err != nil { - return fmt.Errorf("Unmarshal failed: \"%s\"", err.Error()) + return fmt.Errorf("unmarshal failed: \"%s\"", err.Error()) } return nil } @@ -160,8 +161,8 @@ func deleteXappSubscriptionHandleImpl(subdelchan chan<- *models.XappSubscription } if !subscriptionExists(data) { - rtmgr.Logger.Warn("Subscription not found: %d", *data.SubscriptionID) - err := fmt.Errorf("Subscription not found: %d", *data.SubscriptionID) + rtmgr.Logger.Warn("subscription not found: %d", *data.SubscriptionID) + err := fmt.Errorf("subscription not found: %d", *data.SubscriptionID) return err } @@ -229,7 +230,7 @@ func launchRest(nbiif *string, datach chan<- *models.XappCallbackData, subchan c } } -func httpGetXapps(xmurl string) (*[]rtmgr.XApp, error) { +func httpGetXApps(xmurl string) (*[]rtmgr.XApp, error) { rtmgr.Logger.Info("Invoked httpgetter.fetchXappList: " + xmurl) r, err := myClient.Get(xmurl) if err != nil { @@ -252,12 +253,12 @@ func httpGetXapps(xmurl string) (*[]rtmgr.XApp, error) { return nil, nil } -func retrieveStartupData(xmurl string, nbiif string, fileName string, configfile string, sdlEngine sdl.SdlEngine) error { +func retrieveStartupData(xmurl string, nbiif string, fileName string, configfile string, sdlEngine sdl.Engine) error { var readErr error var maxRetries = 10 for i := 1; i <= maxRetries; i++ { time.Sleep(2 * time.Second) - xappData, err := httpGetXapps(xmurl) + xappData, err := httpGetXApps(xmurl) if xappData != nil && err == nil { pcData, confErr := rtmgr.GetPlatformComponents(configfile) if confErr != nil { @@ -266,7 +267,7 @@ func retrieveStartupData(xmurl string, nbiif string, fileName string, configfile } rtmgr.Logger.Info("Recieved intial xapp data and platform data, writing into SDL.") // Combine the xapps data and platform data before writing to the SDL - ricData := &rtmgr.RicComponents{Xapps: *xappData, Pcs: *pcData} + ricData := &rtmgr.RicComponents{XApps: *xappData, Pcs: *pcData} writeErr := sdlEngine.WriteAll(fileName, ricData) if writeErr != nil { rtmgr.Logger.Error(writeErr.Error()) @@ -277,7 +278,7 @@ func retrieveStartupData(xmurl string, nbiif string, fileName string, configfile return nil } } else if err == nil { - readErr = errors.New("Unexpected HTTP status code") + readErr = errors.New("unexpected HTTP status code") } else { rtmgr.Logger.Warn("cannot get xapp data due to: " + err.Error()) readErr = err @@ -287,10 +288,10 @@ func retrieveStartupData(xmurl string, nbiif string, fileName string, configfile } func (r *HttpRestful) Initialize(xmurl string, nbiif string, fileName string, configfile string, - sdlEngine sdl.SdlEngine, rpeEngine rpe.RpeEngine, triggerSBI chan<- bool) error { + sdlEngine sdl.Engine, rpeEngine rpe.Engine, triggerSBI chan<- bool) error { err := r.RetrieveStartupData(xmurl, nbiif, fileName, configfile, sdlEngine) if err != nil { - rtmgr.Logger.Error("Exiting as nbi failed to get the intial startup data from the xapp manager: " + err.Error()) + rtmgr.Logger.Error("Exiting as nbi failed to get the initial startup data from the xapp manager: " + err.Error()) return err } @@ -308,7 +309,7 @@ func (r *HttpRestful) Initialize(xmurl string, nbiif string, fileName string, co if err != nil { rtmgr.Logger.Error("cannot get data from rest api dute to: " + err.Error()) } else if data != nil { - sdlEngine.WriteXapps(fileName, data) + sdlEngine.WriteXApps(fileName, data) triggerSBI <- true } } @@ -340,7 +341,7 @@ func (r *HttpRestful) Terminate() error { } func addSubscription(subs *rtmgr.SubscriptionList, xappSubData *models.XappSubscriptionData) bool { - var b bool = false + var b = false sub := rtmgr.Subscription{SubID: *xappSubData.SubscriptionID, Fqdn: *xappSubData.Address, Port: *xappSubData.Port} for _, elem := range *subs { if elem == sub { @@ -356,7 +357,7 @@ func addSubscription(subs *rtmgr.SubscriptionList, xappSubData *models.XappSubsc func delSubscription(subs *rtmgr.SubscriptionList, xappSubData *models.XappSubscriptionData) bool { rtmgr.Logger.Debug("Deleteing the subscription from the subscriptions list") - var present bool = false + var present = false sub := rtmgr.Subscription{SubID: *xappSubData.SubscriptionID, Fqdn: *xappSubData.Address, Port: *xappSubData.Port} for i, elem := range *subs { if elem == sub { diff --git a/pkg/nbi/httprestful_test.go b/pkg/nbi/httprestful_test.go index a844425..99dbe74 100644 --- a/pkg/nbi/httprestful_test.go +++ b/pkg/nbi/httprestful_test.go @@ -40,7 +40,7 @@ import ( "time" ) -var BASIC_XAPPLIST = []byte(`[ +var BasicXAppLists = []byte(`[ { "name":"xapp-01","status":"unknown","version":"1.2.3", "instances":[ @@ -56,9 +56,9 @@ var BASIC_XAPPLIST = []byte(`[ } ]`) -var SUBSCRIPTION_RESP = []byte(`{"ID":"deadbeef1234567890", "Version":0, "EventType":"all"}`) +var SubscriptionResp = []byte(`{"ID":"deadbeef1234567890", "Version":0, "EventType":"all"}`) -var INVALID_SUB_RESP = []byte(`{"Version":0, "EventType":all}`) +var InvalidSubResp = []byte(`{"Version":0, "EventType":all}`) func createMockAppmgrWithData(url string, g []byte, p []byte) *httptest.Server { l, err := net.Listen("tcp", url) @@ -84,7 +84,7 @@ func createMockAppmgrWithData(url string, g []byte, p []byte) *httptest.Server { } func createMockPlatformComponents() { - var filename = string("config.json") + var filename = "config.json" file, _ := json.MarshalIndent(stub.ValidPlatformComponents, "", "") filestr := string(file) filestr = "{\"PlatformComponents\":" + filestr + "}" @@ -168,20 +168,20 @@ func TestValidateXappCallbackDataWithInvalidData(t *testing.T) { } } -func TestHttpGetXappsInvalidData(t *testing.T) { - _, err := httpGetXapps(XMURL) +func TestHttpGetXAppsInvalidData(t *testing.T) { + _, err := httpGetXApps(XMURL) if err == nil { t.Error("No XApp data received: " + err.Error()) } } -func TestHttpGetXappsWithValidData(t *testing.T) { - var expected int = 1 - ts := createMockAppmgrWithData("127.0.0.1:3000", BASIC_XAPPLIST, nil) +func TestHttpGetXAppsWithValidData(t *testing.T) { + var expected = 1 + ts := createMockAppmgrWithData("127.0.0.1:3000", BasicXAppLists, nil) ts.Start() defer ts.Close() - xapplist, err := httpGetXapps(XMURL) + xapplist, err := httpGetXApps(XMURL) if err != nil { t.Error("Error occured: " + err.Error()) } else { @@ -203,7 +203,7 @@ func TestRetrieveStartupDataTimeout(t *testing.T) { } func TestRetrieveStartupData(t *testing.T) { - ts := createMockAppmgrWithData("127.0.0.1:3000", BASIC_XAPPLIST, SUBSCRIPTION_RESP) + ts := createMockAppmgrWithData("127.0.0.1:3000", BasicXAppLists, SubscriptionResp) ts.Start() defer ts.Close() sdlEngine, _ := sdl.GetSdl("file") @@ -219,7 +219,7 @@ func TestRetrieveStartupData(t *testing.T) { } func TestRetrieveStartupDataWithInvalidSubResp(t *testing.T) { - ts := createMockAppmgrWithData("127.0.0.1:3000", BASIC_XAPPLIST, INVALID_SUB_RESP) + ts := createMockAppmgrWithData("127.0.0.1:3000", BasicXAppLists, InvalidSubResp) ts.Start() defer ts.Close() sdlEngine, _ := sdl.GetSdl("file") diff --git a/pkg/nbi/nbi.go b/pkg/nbi/nbi.go index cee3374..2b9fa99 100644 --- a/pkg/nbi/nbi.go +++ b/pkg/nbi/nbi.go @@ -38,15 +38,15 @@ import ( ) var ( - SupportedNbis = []*NbiEngineConfig{ - &NbiEngineConfig{ + SupportedNbis = []*EngineConfig{ + { Name: "httpGetter", Version: "v1", Protocol: "http", Instance: NewHttpGetter(), IsAvailable: true, }, - &NbiEngineConfig{ + { Name: "httpRESTful", Version: "v1", Protocol: "http", @@ -59,7 +59,7 @@ var ( type Nbi struct { } -func GetNbi(nbiName string) (NbiEngine, error) { +func GetNbi(nbiName string) (Engine, error) { for _, nbi := range SupportedNbis { if nbi.Name == nbiName && nbi.IsAvailable { return nbi.Instance, nil @@ -69,7 +69,7 @@ func GetNbi(nbiName string) (NbiEngine, error) { } func CreateSubReq(restUrl string, restPort string) *appmgr_model.SubscriptionRequest { - // TODO: parametize function + // TODO: parameterize function subReq := appmgr_model.SubscriptionRequest{ TargetURL: swag.String(restUrl + ":" + restPort + "/ric/v1/handles/xapp-handle/"), EventType: swag.String("all"), @@ -96,7 +96,7 @@ func PostSubReq(xmUrl string, nbiif string) error { client := apiclient.New(transport, strfmt.Default) addSubParams := operations.NewAddSubscriptionParamsWithTimeout(10 * time.Second) // create sub req with rest url and port - subReq := CreateSubReq(string(nbiifUrl.Scheme+"://"+nbiifUrl.Hostname()), nbiifUrl.Port()) + subReq := CreateSubReq(nbiifUrl.Scheme+"://"+nbiifUrl.Hostname(), nbiifUrl.Port()) resp, postErr := client.Operations.AddSubscription(addSubParams.WithSubscriptionRequest(subReq)) if postErr != nil { rtmgr.Logger.Error("POST unsuccessful:" + postErr.Error()) diff --git a/pkg/nbi/types.go b/pkg/nbi/types.go index 0f7fee6..049fe45 100644 --- a/pkg/nbi/types.go +++ b/pkg/nbi/types.go @@ -18,7 +18,7 @@ */ /* Mnemonic: nbi.go - Abstract: Containes NBI (NorthBound Interface) specific types + Abstract: Contains NBI (NorthBound Interface) specific types Date: 12 March 2019 */ @@ -31,21 +31,21 @@ import ( "routing-manager/pkg/sdl" ) -type FetchAllXappsHandler func(string) (*[]rtmgr.XApp, error) +type FetchAllXAppsHandler func(string) (*[]rtmgr.XApp, error) type RecvXappCallbackDataHandler func(<-chan *models.XappCallbackData) (*[]rtmgr.XApp, error) type LaunchRestHandler func(*string, chan<- *models.XappCallbackData, chan<- *models.XappSubscriptionData, chan<- *models.XappSubscriptionData) type ProvideXappHandleHandlerImpl func(chan<- *models.XappCallbackData, *models.XappCallbackData) error -type RetrieveStartupDataHandler func(string, string, string, string, sdl.SdlEngine) error +type RetrieveStartupDataHandler func(string, string, string, string, sdl.Engine) error -type NbiEngineConfig struct { +type EngineConfig struct { Name string Version string Protocol string - Instance NbiEngine + Instance Engine IsAvailable bool } -type NbiEngine interface { - Initialize(string, string, string, string, sdl.SdlEngine, rpe.RpeEngine, chan<- bool) error +type Engine interface { + Initialize(string, string, string, string, sdl.Engine, rpe.Engine, chan<- bool) error Terminate() error } diff --git a/pkg/rpe/rmr_test.go b/pkg/rpe/rmr_test.go index 016aef2..7ba59a6 100644 --- a/pkg/rpe/rmr_test.go +++ b/pkg/rpe/rmr_test.go @@ -31,7 +31,7 @@ import ( func resetTestDataset(testdata []rtmgr.Endpoint) { rtmgr.Eps = make(map[string]*rtmgr.Endpoint) - for _, endpoint := range stub.ValidEndpoints { + for _, endpoint := range testdata { ep := endpoint rtmgr.Eps[ep.Uuid] = &ep } diff --git a/pkg/rpe/rpe.go b/pkg/rpe/rpe.go index e8daf61..cfdf52c 100644 --- a/pkg/rpe/rpe.go +++ b/pkg/rpe/rpe.go @@ -32,8 +32,8 @@ import ( ) var ( - SupportedRpes = []*RpeEngineConfig{ - &RpeEngineConfig{ + SupportedRpes = []*EngineConfig{ + { Name: "rmrpush", Version: "pubsush", Protocol: "rmruta", @@ -43,7 +43,7 @@ var ( } ) -func GetRpe(rpeName string) (RpeEngine, error) { +func GetRpe(rpeName string) (Engine, error) { for _, rpe := range SupportedRpes { if rpe.Name == rpeName && rpe.IsAvailable { return rpe.Instance, nil @@ -78,65 +78,49 @@ func getEndpointByUuid(uuid string) *rtmgr.Endpoint { return nil } -func (r *Rpe) addRoute(messageType string, tx *rtmgr.Endpoint, rx *rtmgr.Endpoint, routeTable *rtmgr.RouteTable) { +func (r *Rpe) addRoute(messageType string, tx *rtmgr.Endpoint, rx *rtmgr.Endpoint, routeTable *rtmgr.RouteTable, subId int32) { txList := rtmgr.EndpointList{*tx} rxList := []rtmgr.EndpointList{[]rtmgr.Endpoint{*rx}} - messageId := rtmgr.MESSAGETYPES[messageType] + messageId := rtmgr.MessageTypes[messageType] route := rtmgr.RouteTableEntry{ - messageId, - txList, - rxList, - -1} + MessageType: messageId, + TxList: txList, + RxGroups: rxList, + SubID: subId} *routeTable = append(*routeTable, route) - rtmgr.Logger.Debug("Route added: MessageTyp: %v, Tx: %v, Rx: %v, SubId: -1", messageId, txList, rxList) + rtmgr.Logger.Debug("Route added: MessageTyp: %v, Tx: %v, Rx: %v, SubId: %v", messageId, tx.Uuid, rx.Uuid, subId) + rtmgr.Logger.Trace("Route added: MessageTyp: %v, Tx: %v, Rx: %v, SubId: %v", messageId, tx, rx, subId) } -func (r *Rpe) addSubscriptionRoute(messageType string, tx *rtmgr.Endpoint, rx *rtmgr.Endpoint, routeTable *rtmgr.RouteTable, subId int32) { - txList := rtmgr.EndpointList{*tx} - rxList := []rtmgr.EndpointList{[]rtmgr.Endpoint{*rx}} - messageId := rtmgr.MESSAGETYPES[messageType] - route := rtmgr.RouteTableEntry{ - messageId, - txList, - rxList, - subId, - } - *routeTable = append(*routeTable, route) - rtmgr.Logger.Debug("Route added: MessageTyp: %v, Tx: %v, Rx: %v, SubId: %v", messageId, txList, rxList, subId) -} - -func (r *Rpe) generateXappRoutes(e2TermEp *rtmgr.Endpoint, subManEp *rtmgr.Endpoint, routeTable *rtmgr.RouteTable) { +func (r *Rpe) generateXappRoutes(xAppEp *rtmgr.Endpoint, e2TermEp *rtmgr.Endpoint, subManEp *rtmgr.Endpoint, routeTable *rtmgr.RouteTable) { rtmgr.Logger.Debug("rpe.generateXappRoutes invoked") - endPointList := rtmgr.Eps - for _, endPoint := range endPointList { - rtmgr.Logger.Debug("Endpoint: %v, xAppType: %v", endPoint.Name, endPoint.XAppType) - if endPoint.XAppType != sbi.PLATFORMTYPE && len(endPoint.TxMessages) > 0 && len(endPoint.RxMessages) > 0 { - //xApp -> Subscription Manager - r.addRoute("RIC_SUB_REQ", endPoint, subManEp, routeTable) - r.addRoute("RIC_SUB_DEL_REQ", endPoint, subManEp, routeTable) - //xApp -> E2 Termination - r.addRoute("RIC_CONTROL_REQ", endPoint, e2TermEp, routeTable) - } + rtmgr.Logger.Debug("Endpoint: %v, xAppType: %v", xAppEp.Name, xAppEp.XAppType) + if xAppEp.XAppType != sbi.PlatformType && len(xAppEp.TxMessages) > 0 && len(xAppEp.RxMessages) > 0 { + //xApp -> Subscription Manager + r.addRoute("RIC_SUB_REQ", xAppEp, subManEp, routeTable, -1) + r.addRoute("RIC_SUB_DEL_REQ", xAppEp, subManEp, routeTable, -1) + //xApp -> E2 Termination + r.addRoute("RIC_CONTROL_REQ", xAppEp, e2TermEp, routeTable, -1) } } func (r *Rpe) generateSubscriptionRoutes(e2TermEp *rtmgr.Endpoint, subManEp *rtmgr.Endpoint, routeTable *rtmgr.RouteTable) { rtmgr.Logger.Debug("rpe.addSubscriptionRoutes invoked") - subscriptionList := rtmgr.Subs - for _, subscription := range subscriptionList { + subscriptionList := &rtmgr.Subs + for _, subscription := range *subscriptionList { rtmgr.Logger.Debug("Subscription: %v", subscription) xAppUuid := subscription.Fqdn + ":" + strconv.Itoa(int(subscription.Port)) rtmgr.Logger.Debug("xApp UUID: %v", xAppUuid) xAppEp := getEndpointByUuid(xAppUuid) //Subscription Manager -> xApp - r.addSubscriptionRoute("RIC_SUB_RESP", subManEp, xAppEp, routeTable, subscription.SubID) - r.addSubscriptionRoute("RIC_SUB_FAILURE", subManEp, xAppEp, routeTable, subscription.SubID) - r.addSubscriptionRoute("RIC_SUB_DEL_RESP", subManEp, xAppEp, routeTable, subscription.SubID) - r.addSubscriptionRoute("RIC_SUB_DEL_FAILURE", subManEp, xAppEp, routeTable, subscription.SubID) + r.addRoute("RIC_SUB_RESP", subManEp, xAppEp, routeTable, subscription.SubID) + r.addRoute("RIC_SUB_FAILURE", subManEp, xAppEp, routeTable, subscription.SubID) + r.addRoute("RIC_SUB_DEL_RESP", subManEp, xAppEp, routeTable, subscription.SubID) + r.addRoute("RIC_SUB_DEL_FAILURE", subManEp, xAppEp, routeTable, subscription.SubID) //E2 Termination -> xApp - r.addSubscriptionRoute("RIC_INDICATION", e2TermEp, xAppEp, routeTable, subscription.SubID) - r.addSubscriptionRoute("RIC_CONTROL_ACK", e2TermEp, xAppEp, routeTable, subscription.SubID) - r.addSubscriptionRoute("RIC_CONTROL_FAILURE", e2TermEp, xAppEp, routeTable, subscription.SubID) + r.addRoute("RIC_INDICATION", e2TermEp, xAppEp, routeTable, subscription.SubID) + r.addRoute("RIC_CONTROL_ACK", e2TermEp, xAppEp, routeTable, subscription.SubID) + r.addRoute("RIC_CONTROL_FAILURE", e2TermEp, xAppEp, routeTable, subscription.SubID) } } @@ -144,13 +128,13 @@ func (r *Rpe) generatePlatformRoutes(e2TermEp *rtmgr.Endpoint, subManEp *rtmgr.E rtmgr.Logger.Debug("rpe.generatePlatformRoutes invoked") //Platform Routes --- Subscription Routes //Subscription Manager -> E2 Termination - r.addRoute("RIC_SUB_REQ", subManEp, e2TermEp, routeTable) - r.addRoute("RIC_SUB_DEL_REQ", subManEp, e2TermEp, routeTable) + r.addRoute("RIC_SUB_REQ", subManEp, e2TermEp, routeTable, -1) + r.addRoute("RIC_SUB_DEL_REQ", subManEp, e2TermEp, routeTable, -1) //E2 Termination -> Subscription Manager - r.addRoute("RIC_SUB_RESP", e2TermEp, subManEp, routeTable) - r.addRoute("RIC_SUB_DEL_RESP", e2TermEp, subManEp, routeTable) - r.addRoute("RIC_SUB_FAILURE", e2TermEp, subManEp, routeTable) - r.addRoute("RIC_SUB_DEL_FAILURE", e2TermEp, subManEp, routeTable) + r.addRoute("RIC_SUB_RESP", e2TermEp, subManEp, routeTable, -1) + r.addRoute("RIC_SUB_DEL_RESP", e2TermEp, subManEp, routeTable, -1) + r.addRoute("RIC_SUB_FAILURE", e2TermEp, subManEp, routeTable, -1) + r.addRoute("RIC_SUB_DEL_FAILURE", e2TermEp, subManEp, routeTable, -1) //TODO: UE Man Routes removed (since it is not existing) //UE Manager -> Subscription Manager //r.addRoute("RIC_SUB_REQ", ueManEp, subManEp, routeTable) @@ -160,22 +144,22 @@ func (r *Rpe) generatePlatformRoutes(e2TermEp *rtmgr.Endpoint, subManEp *rtmgr.E //Platform Routes --- X2 Routes //E2 Manager -> E2 Termination - r.addRoute("RIC_X2_SETUP_REQ", e2ManEp, e2TermEp, routeTable) - r.addRoute("RIC_X2_SETUP_RESP", e2ManEp, e2TermEp, routeTable) - r.addRoute("RIC_X2_SETUP_FAILURE", e2ManEp, e2TermEp, routeTable) - r.addRoute("RIC_X2_RESET_RESP", e2ManEp, e2TermEp, routeTable) - r.addRoute("RIC_ENDC_X2_SETUP_REQ", e2ManEp, e2TermEp, routeTable) - r.addRoute("RIC_ENDC_X2_SETUP_RESP", e2ManEp, e2TermEp, routeTable) - r.addRoute("RIC_ENDC_X2_SETUP_FAILURE", e2ManEp, e2TermEp, routeTable) + r.addRoute("RIC_X2_SETUP_REQ", e2ManEp, e2TermEp, routeTable, -1) + r.addRoute("RIC_X2_SETUP_RESP", e2ManEp, e2TermEp, routeTable, -1) + r.addRoute("RIC_X2_SETUP_FAILURE", e2ManEp, e2TermEp, routeTable, -1) + r.addRoute("RIC_X2_RESET_RESP", e2ManEp, e2TermEp, routeTable, -1) + r.addRoute("RIC_ENDC_X2_SETUP_REQ", e2ManEp, e2TermEp, routeTable, -1) + r.addRoute("RIC_ENDC_X2_SETUP_RESP", e2ManEp, e2TermEp, routeTable, -1) + r.addRoute("RIC_ENDC_X2_SETUP_FAILURE", e2ManEp, e2TermEp, routeTable, -1) //E2 Termination -> E2 Manager - r.addRoute("RIC_X2_SETUP_REQ", e2TermEp, e2ManEp, routeTable) - r.addRoute("RIC_X2_SETUP_RESP", e2TermEp, e2ManEp, routeTable) - r.addRoute("RIC_X2_RESET", e2TermEp, e2ManEp, routeTable) - r.addRoute("RIC_X2_RESOURCE_STATUS_RESPONSE", e2TermEp, e2ManEp, routeTable) - r.addRoute("RIC_X2_RESET_RESP", e2TermEp, e2ManEp, routeTable) - r.addRoute("RIC_ENDC_X2_SETUP_REQ", e2ManEp, e2TermEp, routeTable) - r.addRoute("RIC_ENDC_X2_SETUP_RESP", e2ManEp, e2TermEp, routeTable) - r.addRoute("RIC_ENDC_X2_SETUP_FAILURE", e2ManEp, e2TermEp, routeTable) + r.addRoute("RIC_X2_SETUP_REQ", e2TermEp, e2ManEp, routeTable, -1) + r.addRoute("RIC_X2_SETUP_RESP", e2TermEp, e2ManEp, routeTable, -1) + r.addRoute("RIC_X2_RESET", e2TermEp, e2ManEp, routeTable, -1) + r.addRoute("RIC_X2_RESOURCE_STATUS_RESPONSE", e2TermEp, e2ManEp, routeTable, -1) + r.addRoute("RIC_X2_RESET_RESP", e2TermEp, e2ManEp, routeTable, -1) + r.addRoute("RIC_ENDC_X2_SETUP_REQ", e2ManEp, e2TermEp, routeTable, -1) + r.addRoute("RIC_ENDC_X2_SETUP_RESP", e2ManEp, e2TermEp, routeTable, -1) + r.addRoute("RIC_ENDC_X2_SETUP_FAILURE", e2ManEp, e2TermEp, routeTable, -1) } func (r *Rpe) generateRouteTable(endPointList rtmgr.Endpoints) *rtmgr.RouteTable { @@ -206,8 +190,8 @@ func (r *Rpe) generateRouteTable(endPointList rtmgr.Endpoints) *rtmgr.RouteTable for _, endPoint := range endPointList { rtmgr.Logger.Debug("Endpoint: %v, xAppType: %v", endPoint.Name, endPoint.XAppType) - if endPoint.XAppType != sbi.PLATFORMTYPE && len(endPoint.TxMessages) > 0 && len(endPoint.RxMessages) > 0 { - r.generateXappRoutes(e2TermEp, subManEp, routeTable) + if endPoint.XAppType != sbi.PlatformType && len(endPoint.TxMessages) > 0 && len(endPoint.RxMessages) > 0 { + r.generateXappRoutes(endPoint, e2TermEp, subManEp, routeTable) r.generateSubscriptionRoutes(e2TermEp, subManEp, routeTable) } } diff --git a/pkg/rpe/types.go b/pkg/rpe/types.go index f55b08e..491d152 100644 --- a/pkg/rpe/types.go +++ b/pkg/rpe/types.go @@ -26,18 +26,18 @@ package rpe import "routing-manager/pkg/rtmgr" -type generatePolicies func(rtmgr.Endpoints) *[]string -type generateRouteTable func(rtmgr.Endpoints) *rtmgr.RouteTable +//type generatePolicies func(rtmgr.Endpoints) *[]string +//type generateRouteTable func(rtmgr.Endpoints) *rtmgr.RouteTable -type RpeEngineConfig struct { +type EngineConfig struct { Name string Version string Protocol string - Instance RpeEngine + Instance Engine IsAvailable bool } -type RpeEngine interface { +type Engine interface { GeneratePolicies(rtmgr.Endpoints) *[]string GenerateRouteTable(rtmgr.Endpoints) *rtmgr.RouteTable } diff --git a/pkg/rtmgr/rtmgr.go b/pkg/rtmgr/rtmgr.go index 9118685..03e7c48 100644 --- a/pkg/rtmgr/rtmgr.go +++ b/pkg/rtmgr/rtmgr.go @@ -18,7 +18,7 @@ */ /* Mnemonic: rtmgr/rtmgr.go - Abstract: Containes RTMGR (Routing Manager) module's generic variables and functions + Abstract: Contains RTMGR (Routing Manager) module's generic variables and functions Date: 26 March 2019 */ @@ -35,9 +35,9 @@ import ( var ( //TODO: temporary solution - // CamelCase Message Types are for being able to test with old fashioned admin controll xApps - // TODO: Add a seperate message definition file (Not using the one from RMR to not create dependency on that library). - MESSAGETYPES = map[string]string{ + // CamelCase Message Types are for being able to test with old fashioned admin control xApps + // TODO: Add a separate message definition file (Not using the one from RMR to not create dependency on that library). + MessageTypes = map[string]string{ "HandoverPreparation": "0", "HandoverCancel": "1", "LoadIndication": "2", @@ -122,19 +122,23 @@ func SetLogLevel(loglevel string) error { Logger.Level(lumber.ERROR) return nil case "DEBUG": - Logger.Info("debugmode") + Logger.Info("Debug mode") Logger.Level(lumber.DEBUG) return nil + case "TRACE": + Logger.Info("Trace mode") + Logger.Level(lumber.TRACE) + return nil default: - Logger.Error("Invalid log mode, setting info") + Logger.Error("invalid log mode, setting info") Logger.Level(lumber.INFO) - return errors.New("Invalid log level, setting info") + return errors.New("invalid log level, setting info") } } func GetPlatformComponents(configfile string) (*PlatformComponents, error) { Logger.Debug("Invoked rtmgr.GetPlatformComponents(" + configfile + ")") - var rcfg RtmgrConfig + var rcfg ConfigRtmgr jsonFile, err := os.Open(configfile) if err != nil { return nil, errors.New("cannot open the file due to: " + err.Error()) diff --git a/pkg/rtmgr/rtmgr_test.go b/pkg/rtmgr/rtmgr_test.go index 3c089fc..da7d7b8 100644 --- a/pkg/rtmgr/rtmgr_test.go +++ b/pkg/rtmgr/rtmgr_test.go @@ -29,15 +29,15 @@ import ( ) func TestSetLogLevel(t *testing.T) { - modes_ok := []string{"info", "warn", "debug", "error"} - modes_nok := []string{"inValId", "LogLEVEL", "PRoviDeD"} - for _, value := range modes_ok { + modeIsOk := []string{"info", "warn", "debug", "error"} + modeOsNok := []string{"inValId", "LogLEVEL", "Provided"} + for _, value := range modeIsOk { if SetLogLevel(value) != nil { t.Error("Invalid log level: " + value) } } - for _, value := range modes_nok { + for _, value := range modeOsNok { if SetLogLevel(value) == nil { t.Error("Invalid log level: " + value) } diff --git a/pkg/rtmgr/types.go b/pkg/rtmgr/types.go index dc46e24..26429ce 100644 --- a/pkg/rtmgr/types.go +++ b/pkg/rtmgr/types.go @@ -25,7 +25,7 @@ package rtmgr type XApps struct { - XApplist []XApp + XAppList []XApp } type RouteTable []RouteTableEntry @@ -79,12 +79,12 @@ type PlatformComponents []struct { Port uint16 `json:"port"` } -type RtmgrConfig struct { +type ConfigRtmgr struct { Pcs PlatformComponents `json:"PlatformComponents"` } type RicComponents struct { - Xapps []XApp + XApps []XApp Pcs PlatformComponents } diff --git a/pkg/sbi/nngpush.go b/pkg/sbi/nngpush.go index bb39be4..1f062d3 100644 --- a/pkg/sbi/nngpush.go +++ b/pkg/sbi/nngpush.go @@ -57,7 +57,7 @@ func createNewPushSocket() (NngSocket, error) { func pipeEventHandler(event mangos.PipeEvent, pipe mangos.Pipe) { rtmgr.Logger.Debug("Invoked: pipeEventHandler()") for _, ep := range rtmgr.Eps { - uri := DEFAULT_NNG_PIPELINE_SOCKET_PREFIX + ep.Ip + ":" + strconv.Itoa(DEFAULT_NNG_PIPELINE_SOCKET_NUMBER) + uri := DefaultNngPipelineSocketPrefix + ep.Ip + ":" + strconv.Itoa(DefaultNngPipelineSocketNumber) if uri == pipe.Address() { switch event { case 1: @@ -83,7 +83,7 @@ func (c *NngPush) AddEndpoint(ep *rtmgr.Endpoint) error { var err error var socket NngSocket rtmgr.Logger.Debug("Invoked sbi.AddEndpoint") - rtmgr.Logger.Debug("args: %v", (*ep)) + rtmgr.Logger.Debug("args: %v", *ep) socket, err = c.NewSocket() if err != nil { return errors.New("can't add new socket to endpoint:" + ep.Uuid + " due to: " + err.Error()) @@ -98,7 +98,7 @@ func (c *NngPush) AddEndpoint(ep *rtmgr.Endpoint) error { func (c *NngPush) DeleteEndpoint(ep *rtmgr.Endpoint) error { rtmgr.Logger.Debug("Invoked sbi. DeleteEndpoint") - rtmgr.Logger.Debug("args: %v", (*ep)) + rtmgr.Logger.Debug("args: %v", *ep) if err := ep.Socket.(NngSocket).Close(); err != nil { return errors.New("can't close push socket of endpoint:" + ep.Uuid + " due to: " + err.Error()) } @@ -114,7 +114,7 @@ NOTE: Asynchronous dial starts a goroutine which keep maintains the connection t */ func (c *NngPush) dial(ep *rtmgr.Endpoint) error { rtmgr.Logger.Debug("Dialing to endpoint: " + ep.Uuid) - uri := DEFAULT_NNG_PIPELINE_SOCKET_PREFIX + ep.Ip + ":" + strconv.Itoa(DEFAULT_NNG_PIPELINE_SOCKET_NUMBER) + uri := DefaultNngPipelineSocketPrefix + ep.Ip + ":" + strconv.Itoa(DefaultNngPipelineSocketNumber) options := make(map[string]interface{}) options[mangos.OptionDialAsynch] = true if err := ep.Socket.(NngSocket).DialOptions(uri, options); err != nil { @@ -125,7 +125,7 @@ func (c *NngPush) dial(ep *rtmgr.Endpoint) error { func (c *NngPush) DistributeAll(policies *[]string) error { rtmgr.Logger.Debug("Invoked: sbi.DistributeAll") - rtmgr.Logger.Debug("args: %v", (*policies)) + rtmgr.Logger.Debug("args: %v", *policies) for _, ep := range rtmgr.Eps { if ep.IsReady { go c.send(ep, policies) @@ -143,5 +143,5 @@ func (c *NngPush) send(ep *rtmgr.Endpoint, policies *[]string) { rtmgr.Logger.Error("Unable to send policy entry due to: " + err.Error()) } } - rtmgr.Logger.Info("NNG PUSH to endpoint " + ep.Uuid + ": OK (# of Entries:" + strconv.Itoa(len((*policies))) + ")") + rtmgr.Logger.Info("NNG PUSH to endpoint " + ep.Uuid + ": OK (# of Entries:" + strconv.Itoa(len(*policies)) + ")") } diff --git a/pkg/sbi/nngpush_test.go b/pkg/sbi/nngpush_test.go index 5e93169..422a036 100644 --- a/pkg/sbi/nngpush_test.go +++ b/pkg/sbi/nngpush_test.go @@ -105,7 +105,7 @@ func TestNngPushTerminate(t *testing.T) { } /* -nngpush.UpdateEndpoints() is testd against stub.ValidXapps dataset +nngpush.UpdateEndpoints() is testd against stub.ValidXApps dataset */ func TestNngPushUpdateEndpoints(t *testing.T) { var nngpush = NngPush{} diff --git a/pkg/sbi/sbi.go b/pkg/sbi/sbi.go index 5b94cbd..0d13bb9 100644 --- a/pkg/sbi/sbi.go +++ b/pkg/sbi/sbi.go @@ -31,13 +31,13 @@ import ( "strconv" ) -const DEFAULT_NNG_PIPELINE_SOCKET_PREFIX = "tcp://" -const DEFAULT_NNG_PIPELINE_SOCKET_NUMBER = 4561 -const PLATFORMTYPE = "platform" +const DefaultNngPipelineSocketPrefix = "tcp://" +const DefaultNngPipelineSocketNumber = 4561 +const PlatformType = "platform" var ( - SupportedSbis = []*SbiEngineConfig{ - &SbiEngineConfig{ + SupportedSbis = []*EngineConfig{ + { Name: "nngpush", Version: "v1", Protocol: "nngpipeline", @@ -47,7 +47,7 @@ var ( } ) -func GetSbi(sbiName string) (SbiEngine, error) { +func GetSbi(sbiName string) (Engine, error) { for _, sbi := range SupportedSbis { if sbi.Name == sbiName && sbi.IsAvailable { return sbi.Instance, nil @@ -59,7 +59,7 @@ func GetSbi(sbiName string) (SbiEngine, error) { type Sbi struct { } -func (s *Sbi) pruneEndpointList(sbi SbiEngine) { +func (s *Sbi) pruneEndpointList(sbi Engine) { for _, ep := range rtmgr.Eps { if !ep.Keepalive { rtmgr.Logger.Debug("deleting %v", ep) @@ -71,26 +71,26 @@ func (s *Sbi) pruneEndpointList(sbi SbiEngine) { } } -func (s *Sbi) updateEndpoints(rcs *rtmgr.RicComponents, sbii SbiEngine) { - for _, xapp := range (*rcs).Xapps { +func (s *Sbi) updateEndpoints(rcs *rtmgr.RicComponents, sbi Engine) { + for _, xapp := range (*rcs).XApps { for _, instance := range xapp.Instances { uuid := instance.Ip + ":" + strconv.Itoa(int(instance.Port)) if _, ok := rtmgr.Eps[uuid]; ok { rtmgr.Eps[uuid].Keepalive = true } else { ep := &rtmgr.Endpoint{ - uuid, - instance.Name, - xapp.Name, - instance.Ip, - instance.Port, - instance.TxMessages, - instance.RxMessages, - nil, - false, - true, + Uuid: uuid, + Name: instance.Name, + XAppType: xapp.Name, + Ip: instance.Ip, + Port: instance.Port, + TxMessages: instance.TxMessages, + RxMessages: instance.RxMessages, + Socket: nil, + IsReady: false, + Keepalive: true, } - if err := sbii.AddEndpoint(ep); err != nil { + if err := sbi.AddEndpoint(ep); err != nil { rtmgr.Logger.Error("can't create socket for endpoint: " + ep.Name + " due to:" + err.Error()) continue } @@ -98,11 +98,11 @@ func (s *Sbi) updateEndpoints(rcs *rtmgr.RicComponents, sbii SbiEngine) { } } } - s.updatePlatformEndpoints(&((*rcs).Pcs), sbii) - s.pruneEndpointList(sbii) + s.updatePlatformEndpoints(&((*rcs).Pcs), sbi) + s.pruneEndpointList(sbi) } -func (s *Sbi) updatePlatformEndpoints(pcs *rtmgr.PlatformComponents, sbii SbiEngine) { +func (s *Sbi) updatePlatformEndpoints(pcs *rtmgr.PlatformComponents, sbi Engine) { rtmgr.Logger.Debug("updatePlatformEndpoints invoked. PCS: %v", *pcs) for _, pc := range *pcs { uuid := pc.Fqdn + ":" + strconv.Itoa(int(pc.Port)) @@ -110,19 +110,19 @@ func (s *Sbi) updatePlatformEndpoints(pcs *rtmgr.PlatformComponents, sbii SbiEng rtmgr.Eps[uuid].Keepalive = true } else { ep := &rtmgr.Endpoint{ - uuid, - pc.Name, - PLATFORMTYPE, - pc.Fqdn, - pc.Port, - rtmgr.PLATFORMMESSAGETYPES[pc.Name]["tx"], - rtmgr.PLATFORMMESSAGETYPES[pc.Name]["rx"], - nil, - false, - true, + Uuid: uuid, + Name: pc.Name, + XAppType: PlatformType, + Ip: pc.Fqdn, + Port: pc.Port, + TxMessages: rtmgr.PLATFORMMESSAGETYPES[pc.Name]["tx"], + RxMessages: rtmgr.PLATFORMMESSAGETYPES[pc.Name]["rx"], + Socket: nil, + IsReady: false, + Keepalive: true, } rtmgr.Logger.Debug("ep created: %v", ep) - if err := sbii.AddEndpoint(ep); err != nil { + if err := sbi.AddEndpoint(ep); err != nil { rtmgr.Logger.Error("can't create socket for endpoint: " + ep.Name + " due to:" + err.Error()) continue } diff --git a/pkg/sbi/types.go b/pkg/sbi/types.go index b6dfcd5..d0a98ab 100644 --- a/pkg/sbi/types.go +++ b/pkg/sbi/types.go @@ -26,15 +26,15 @@ package sbi import "routing-manager/pkg/rtmgr" -type SbiEngineConfig struct { +type EngineConfig struct { Name string Version string Protocol string - Instance SbiEngine + Instance Engine IsAvailable bool } -type SbiEngine interface { +type Engine interface { Initialize(string) error Terminate() error DistributeAll(*[]string) error diff --git a/pkg/sdl/file.go b/pkg/sdl/file.go index b85b2d5..2d49be7 100644 --- a/pkg/sdl/file.go +++ b/pkg/sdl/file.go @@ -55,6 +55,7 @@ func (f *File) ReadAll(file string) (*rtmgr.RicComponents, error) { return nil, errors.New("cannot open the file due to: " + err.Error()) } defer jsonFile.Close() + byteValue, err := ioutil.ReadAll(jsonFile) if err != nil { return nil, errors.New("cannot read the file due to: " + err.Error()) @@ -70,7 +71,7 @@ func (f *File) ReadAll(file string) (*rtmgr.RicComponents, error) { func (f *File) WriteAll(file string, rcs *rtmgr.RicComponents) error { rtmgr.Logger.Debug("Invoked sdl.WriteAll") rtmgr.Logger.Debug("file.fileWriteAll writes into file: " + file) - rtmgr.Logger.Debug("file.fileWriteAll writes data: %v", (*rcs)) + rtmgr.Logger.Debug("file.fileWriteAll writes data: %v", *rcs) byteValue, err := json.Marshal(rcs) if err != nil { return errors.New("cannot convert data due to: " + err.Error()) @@ -82,18 +83,17 @@ func (f *File) WriteAll(file string, rcs *rtmgr.RicComponents) error { return nil } -func (f *File) WriteXapps(file string, xapps *[]rtmgr.XApp) error { - rtmgr.Logger.Debug("Invoked sdl.WriteXapps") - rtmgr.Logger.Debug("file.fileWriteXapps writes into file: " + file) - rtmgr.Logger.Debug("file.fileWriteXapps writes data: %v", (*xapps)) +func (f *File) WriteXApps(file string, xApps *[]rtmgr.XApp) error { + rtmgr.Logger.Debug("Invoked sdl.WriteXApps") + rtmgr.Logger.Debug("file.fileWriteXApps writes into file: " + file) + rtmgr.Logger.Debug("file.fileWriteXApps writes data: %v", *xApps) ricData, err := NewFile().ReadAll(file) - if err != nil || ricData == nil { + if err != nil { rtmgr.Logger.Error("cannot get data from sdl interface due to: " + err.Error()) - return errors.New("cannot read full ric data to modify xapps data, due to: " + err.Error()) + return errors.New("cannot read full ric data to modify xApps data, due to: " + err.Error()) } - - ricData.Xapps = *xapps + ricData.XApps = *xApps byteValue, err := json.Marshal(ricData) if err != nil { diff --git a/pkg/sdl/sdl.go b/pkg/sdl/sdl.go index 4d3d8d1..f7d1bc4 100644 --- a/pkg/sdl/sdl.go +++ b/pkg/sdl/sdl.go @@ -29,15 +29,15 @@ import ( ) var ( - SupportedSdls = []*SdlEngineConfig{ - &SdlEngineConfig{ + SupportedSdls = []*EngineConfig{ + { Name: "file", Version: "v1", Protocol: "rawfile", Instance: NewFile(), IsAvailable: true, }, - &SdlEngineConfig{ + { Name: "redis", Version: "v1", Protocol: "ndsl", @@ -47,7 +47,7 @@ var ( } ) -func GetSdl(sdlName string) (SdlEngine, error) { +func GetSdl(sdlName string) (Engine, error) { for _, sdl := range SupportedSdls { if sdl.Name == sdlName && sdl.IsAvailable { return sdl.Instance, nil diff --git a/pkg/sdl/sdl_test.go b/pkg/sdl/sdl_test.go index 8dcf7c0..83708d2 100644 --- a/pkg/sdl/sdl_test.go +++ b/pkg/sdl/sdl_test.go @@ -17,7 +17,7 @@ ================================================================================== */ /* - Mnemonic: nngpub_test.go + Mnemonic: sbi_test.go Abstract: Date: 25 April 2019 */ diff --git a/pkg/sdl/types.go b/pkg/sdl/types.go index 89fc89f..3551699 100644 --- a/pkg/sdl/types.go +++ b/pkg/sdl/types.go @@ -18,26 +18,26 @@ */ /* Mnemonic: sdl/types.go - Abstract: Containes SDL (Shared Data Layer) specific types + Abstract: Contains SDL (Shared Data Layer) specific types Date: 16 March 2019 */ package sdl import "routing-manager/pkg/rtmgr" -type readAll func(string) (*rtmgr.RicComponents, error) -type writeAll func(string, *rtmgr.RicComponents) error +//type readAll func(string) (*rtmgr.RicComponents, error) +//type writeAll func(string, *rtmgr.RicComponents) error -type SdlEngineConfig struct { +type EngineConfig struct { Name string Version string Protocol string - Instance SdlEngine + Instance Engine IsAvailable bool } -type SdlEngine interface { +type Engine interface { ReadAll(string) (*rtmgr.RicComponents, error) WriteAll(string, *rtmgr.RicComponents) error - WriteXapps(string, *[]rtmgr.XApp) error + WriteXApps(string, *[]rtmgr.XApp) error } diff --git a/pkg/stub/stub.go b/pkg/stub/stub.go index 06f2e30..3c10859 100644 --- a/pkg/stub/stub.go +++ b/pkg/stub/stub.go @@ -26,7 +26,7 @@ package stub import "routing-manager/pkg/rtmgr" -var ValidXapps = &[]rtmgr.XApp{ +var ValidXApps = &[]rtmgr.XApp{ {Name: "app1", Status: "", Version: "", Instances: []rtmgr.XAppInstance{{Name: "E2TERM", Status: "unknown", Ip: "10.0.0.1", Port: 0, TxMessages: []string{"HandoverPreparation", "HandoverCancel"}, RxMessages: []string{"HandoverPreparation", "HandoverCancel"}}}}, {Name: "app2", Status: "", Version: "", Instances: []rtmgr.XAppInstance{{Name: "SUBMAN", Status: "unknown", Ip: "192.168.0.1", Port: 0, TxMessages: []string{"HandoverCancel", "HandoverPreparation"}, RxMessages: []string{"HandoverPreparation", "HandoverCancel"}}}}, {Name: "app3", Status: "", Version: "", Instances: []rtmgr.XAppInstance{{Name: "E2MAN", Status: "unknown", Ip: "10.1.1.1", Port: 0, TxMessages: []string{"X2Setup"}, RxMessages: []string{"Reset", "UEContextRelease"}}}}, @@ -48,7 +48,7 @@ var ValidEndpoints = []rtmgr.Endpoint{ } var ValidRicComponents = rtmgr.RicComponents{ - *ValidXapps, *ValidPlatformComponents, + XApps: *ValidXApps, Pcs: *ValidPlatformComponents, } var ValidPolicies = &[]string{"", ""}