From: Markku Virtanen Date: Thu, 20 May 2021 08:22:04 +0000 (+0000) Subject: UT changes and fixes X-Git-Tag: 0.7.1~26 X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=da34eecb23220659f8d519973c03d29444797998;p=ric-plt%2Fsubmgr.git UT changes and fixes Change-Id: I31bb8fcfb562bf32519f0f3bd2bbcfdae7aff728 Signed-off-by: Markku Virtanen --- diff --git a/Dockerfile b/Dockerfile index 5276ea5..0a2b217 100644 --- a/Dockerfile +++ b/Dockerfile @@ -182,7 +182,7 @@ ENV RMR_SEED_RT=/opt/submgr/test/uta_rtg.rt RUN sed -r "s/^(::1.*)/#\1/" /etc/hosts > /etc/hosts.new \ && cat /etc/hosts.new > /etc/hosts \ && cat /etc/hosts \ - && go test -test.coverprofile /tmp/submgr_cover.out -count=1 -v ./pkg/control \ + && go test -failfast -test.coverprofile /tmp/submgr_cover.out -count=1 -v ./pkg/control \ && go tool cover -html=/tmp/submgr_cover.out -o /tmp/submgr_cover.html # test formating (not important) diff --git a/pkg/control/registry.go b/pkg/control/registry.go index d7f8011..93a287a 100644 --- a/pkg/control/registry.go +++ b/pkg/control/registry.go @@ -101,7 +101,7 @@ func (r *Registry) GetRESTSubscription(restSubId string) (*RESTSubscription, err r.restSubscriptions[restSubId] = restSubscription return restSubscription, nil } else { - return restSubscription, fmt.Errorf("Registry: REST delete request is still ongoing for the endpoint=%v, restSubId=%v, SubDelReqOngoing=%v, SubReqOngoing=%v", restSubscription, restSubId, restSubscription.SubDelReqOngoing, restSubscription.SubReqOngoing) + return restSubscription, fmt.Errorf("Registry: REST request is still ongoing for the endpoint=%v, restSubId=%v, SubDelReqOngoing=%v, SubReqOngoing=%v", restSubscription, restSubId, restSubscription.SubDelReqOngoing, restSubscription.SubReqOngoing) } return restSubscription, nil } diff --git a/pkg/control/restendpoint.go b/pkg/control/restendpoint.go index b872c47..96df505 100644 --- a/pkg/control/restendpoint.go +++ b/pkg/control/restendpoint.go @@ -22,6 +22,7 @@ package control import ( "fmt" "strconv" + "strings" "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/models" "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp" @@ -38,12 +39,6 @@ func ConstructEndpointAddresses(clientEndpoint models.SubscriptionParamsClientEn var xAppHTTPEndPoint string var xAppRMREndPoint string - if *clientEndpoint.HTTPPort > 0 { - xAppHTTPEndPoint = host + ":" + strconv.FormatInt(*clientEndpoint.HTTPPort, 10) - } - if *clientEndpoint.RMRPort > 0 { - xAppRMREndPoint = host + ":" + strconv.FormatInt(*clientEndpoint.RMRPort, 10) - } if host == "" || (HTTP_port == 0 && RMR_port == 0) { err := fmt.Errorf("ClientEndpoint aprovided no PORT numbers") return "INVALID_HTTP_ADDRESS:" + host + (string)(*clientEndpoint.HTTPPort), @@ -51,6 +46,16 @@ func ConstructEndpointAddresses(clientEndpoint models.SubscriptionParamsClientEn err } + if *clientEndpoint.HTTPPort > 0 { + xAppHTTPEndPoint = host + ":" + strconv.FormatInt(*clientEndpoint.HTTPPort, 10) + } + if *clientEndpoint.RMRPort > 0 { + if i := strings.Index(host, "http"); i != -1 { + host = strings.Replace(host, "http", "rmr", -1) + } + xAppRMREndPoint = host + ":" + strconv.FormatInt(*clientEndpoint.RMRPort, 10) + } + xapp.Logger.Info("xAppHttpEndPoint=%v, xAppRrmEndPoint=%v", xAppHTTPEndPoint, xAppRMREndPoint) return xAppHTTPEndPoint, xAppRMREndPoint, nil diff --git a/pkg/control/ut_ctrl_submgr_test.go b/pkg/control/ut_ctrl_submgr_test.go index 3a0e0e4..9ffda38 100644 --- a/pkg/control/ut_ctrl_submgr_test.go +++ b/pkg/control/ut_ctrl_submgr_test.go @@ -170,6 +170,35 @@ func (mc *testingSubmgrControl) wait_subs_clean(t *testing.T, e2SubsId uint32, s return false } +func (mc *testingSubmgrControl) wait_multi_subs_clean(t *testing.T, e2SubsIds []uint32, secs int) bool { + var subs *Subscription + var purgedSubscriptions int + i := 1 + k := 0 + for ; i <= secs*2; i++ { + purgedSubscriptions = 0 + for k = 0; k <= len(e2SubsIds); i++ { + subs = mc.c.registry.GetSubscription(e2SubsIds[k]) + if subs == nil { + mc.TestLog(t, "(submgr) subscriber purged for esSubsId %v", e2SubsIds[k]) + purgedSubscriptions += 1 + if purgedSubscriptions == len(e2SubsIds) { + return true + } else { + continue + } + } else { + mc.TestLog(t, "(submgr) subscriber %s no clean within %d secs: subs(N/A) - purged subscriptions %v", subs.String(), secs, purgedSubscriptions) + time.Sleep(500 * time.Millisecond) + } + } + } + + mc.TestError(t, "(submgr) no clean within %d secs: subs(N/A) - %v/%v subscriptions found still", secs, purgedSubscriptions, len(e2SubsIds)) + + return false +} + func (mc *testingSubmgrControl) wait_subs_trans_clean(t *testing.T, e2SubsId uint32, secs int) bool { var trans TransactionIf i := 1 diff --git a/pkg/control/ut_messaging_test.go b/pkg/control/ut_messaging_test.go index 415c438..b91b4b8 100644 --- a/pkg/control/ut_messaging_test.go +++ b/pkg/control/ut_messaging_test.go @@ -2245,16 +2245,16 @@ func TestRESTSubReqAndRouteNok(t *testing.T) { const parameterSet = 1 const actionDefinitionPresent bool = true const actionParamCount int = 1 - waiter := rtmgrHttp.AllocNextEvent(false) + // Add delay for rtmgt HTTP handling so that HTTP response is received before notify on XAPP side + waiter := rtmgrHttp.AllocNextSleep(50, false) newSubsId := mainCtrl.get_registry_next_subid(t) // Req params := xappConn1.GetRESTSubsReqReportParams(subReqCount, parameterSet, actionDefinitionPresent, actionParamCount) restSubId := xappConn1.SendRESTSubsReq(t, params) - + xappConn1.ExpectRESTNotification(t, restSubId) waiter.WaitResult(t) - xappConn1.ExpectRESTNotification(t, restSubId) e2SubsId := xappConn1.WaitRESTNotification(t, restSubId) xapp.Logger.Info("TEST: REST notification received e2SubsId=%v", e2SubsId) @@ -2424,7 +2424,7 @@ func TestRESTSubMergeDelAndRouteUpdateNok(t *testing.T) { // | | | // //----------------------------------------------------------------------------- -/* + func TestRESTSubReqRetransmission(t *testing.T) { CaseBegin("TestRESTSubReqRetransmission") @@ -2476,19 +2476,18 @@ func TestRESTSubReqRetransmission(t *testing.T) { delreq1, delmsg1 := e2termConn1.RecvSubsDelReq(t) e2termConn1.SendSubsDelResp(t, delreq1, delmsg1) - // Wait that subs is cleaned - mainCtrl.wait_subs_clean(t, e2SubsIdA.E2SubsId, 10) - // Del2 xappConn2.SendRESTSubsDelReq(t, &restSubId2) delreq2, delmsg2 := e2termConn1.RecvSubsDelReq(t) e2termConn1.SendSubsDelResp(t, delreq2, delmsg2) + mainCtrl.wait_multi_subs_clean(t, []uint32{e2SubsIdA.E2SubsId, e2SubsIdB.E2SubsId}, 10) + waitSubsCleanup(t, e2SubsIdB.E2SubsId, 10) mainCtrl.VerifyCounterValues(t) } -*/ + func TestRESTSubDelReqRetransmission(t *testing.T) { CaseBegin("TestRESTSubDelReqRetransmission") @@ -3448,15 +3447,14 @@ func TestRESTSubReqAndSubDelNoAnswerSameActionParallel(t *testing.T) { e2termConn1.RecvSubsReq(t) delreq1, delmsg1 := e2termConn1.RecvSubsDelReq(t) - xappConn1.ExpectRESTNotification(t, restSubId1) // or restSubId2? - // xappConn2.WaitRESTNotification(t) - e2termConn1.SendSubsDelResp(t, delreq1, delmsg1) - e2SubsId1 := xappConn1.WaitRESTNotification(t, restSubId1) - xapp.Logger.Info("TEST: REST notification received e2SubsId=%v", e2SubsId1) + xappConn1.WaitListedRestNotifications(t, []string{restSubId1, restSubId2}) + e2termConn1.SendSubsDelResp(t, delreq1, delmsg1) - // e2SubsId2 := <-xappConn2.RESTNotification - // xapp.Logger.Info("TEST: REST notification received e2SubsId=%v", e2SubsId2) + e2SubsIdA := <-xappConn1.ListedRESTNotifications + xapp.Logger.Info("TEST: 1.st XAPP notification received e2SubsId=%v", e2SubsIdA) + e2SubsIdB := <-xappConn1.ListedRESTNotifications + xapp.Logger.Info("TEST: 2.nd XAPP notification received e2SubsId=%v", e2SubsIdB) // Del1 xappConn1.SendRESTSubsDelReq(t, &restSubId1) @@ -3464,8 +3462,10 @@ func TestRESTSubReqAndSubDelNoAnswerSameActionParallel(t *testing.T) { // Del2 xappConn2.SendRESTSubsDelReq(t, &restSubId2) + mainCtrl.wait_multi_subs_clean(t, []uint32{e2SubsIdA.E2SubsId, e2SubsIdB.E2SubsId}, 10) + //Wait that subs is cleaned - waitSubsCleanup(t, e2SubsId1, 10) + waitSubsCleanup(t, e2SubsIdA.E2SubsId, 10) mainCtrl.VerifyCounterValues(t) } @@ -4336,7 +4336,6 @@ func RESTPolicySubReqAndSubDelOk(t *testing.T, subReqCount int, actionDefinition mainCtrl.wait_registry_empty(t, 10) } -/* func TestRESTTwoPolicySubReqAndSubDelOk(t *testing.T) { subReqCount := 2 @@ -4369,8 +4368,6 @@ func TestRESTTwoPolicySubReqAndSubDelOk(t *testing.T) { mainCtrl.VerifyCounterValues(t) } -*/ -/* func TestRESTPolicySubReqAndSubDelOkFullAmount(t *testing.T) { subReqCount := 19 @@ -4402,8 +4399,6 @@ func TestRESTPolicySubReqAndSubDelOkFullAmount(t *testing.T) { mainCtrl.VerifyCounterValues(t) } -*/ -/* func TestRESTTwoReportSubReqAndSubDelOk(t *testing.T) { subReqCount := 2 @@ -4439,7 +4434,7 @@ func TestRESTTwoReportSubReqAndSubDelOk(t *testing.T) { mainCtrl.VerifyCounterValues(t) } -*/ + /* func TestRESTTwoReportSubReqAndSubDelOkNoActParams(t *testing.T) { diff --git a/pkg/control/ut_restendpoint_test.go b/pkg/control/ut_restendpoint_test.go new file mode 100644 index 0000000..cabae3c --- /dev/null +++ b/pkg/control/ut_restendpoint_test.go @@ -0,0 +1,144 @@ +/* +================================================================================== + Copyright (c) 2021 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 ( + "testing" + + "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/models" +) + +func TestRestEndpointOk(t *testing.T) { + + var clientEndpoint models.SubscriptionParamsClientEndpoint + var httpPort int64 + var rmrPort int64 + var host string + + httpPort = 8080 + rmrPort = 4560 + host = "service-ricxapp-xappname-http.ricxapp" + + clientEndpoint.HTTPPort = &httpPort + clientEndpoint.RMRPort = &rmrPort + clientEndpoint.Host = host + + expectedHttpEndpoint := "service-ricxapp-xappname-http.ricxapp:8080" + expectedRmrEndpoint := "service-ricxapp-xappname-rmr.ricxapp:4560" + + httpEndPoint, rmrEndPoint, err := ConstructEndpointAddresses(clientEndpoint) + + if err != nil { + t.Errorf("Mismatching return value: %s - ecpected NIL", err) + } + if httpEndPoint != expectedHttpEndpoint { + t.Errorf("Mismatching httpEndpoint: %s - ecpected %s", httpEndPoint, expectedHttpEndpoint) + } + if rmrEndPoint != expectedRmrEndpoint { + t.Errorf("Mismatching httpEndpoint: %s - ecpected %s", httpEndPoint, expectedHttpEndpoint) + } +} + +func TestRestEndpointNoHttpPort(t *testing.T) { + + var clientEndpoint models.SubscriptionParamsClientEndpoint + var httpPort int64 + var rmrPort int64 + var host string + + httpPort = 0 + rmrPort = 4561 + host = "service-ricxapp-xappname-http.ricxapp" + + clientEndpoint.HTTPPort = &httpPort + clientEndpoint.RMRPort = &rmrPort + clientEndpoint.Host = host + + expectedHttpEndpoint := "" + expectedRmrEndpoint := "service-ricxapp-xappname-rmr.ricxapp:4561" + + httpEndPoint, rmrEndPoint, err := ConstructEndpointAddresses(clientEndpoint) + + if err != nil { + t.Errorf("Mismatching return value: %s - ecpected NIL", err) + } + if httpEndPoint != expectedHttpEndpoint { + t.Errorf("Mismatching httpEndpoint: %s - ecpected %s", httpEndPoint, expectedHttpEndpoint) + } + if rmrEndPoint != expectedRmrEndpoint { + t.Errorf("Mismatching httpEndpoint: %s - ecpected %s", httpEndPoint, expectedHttpEndpoint) + } +} + +func TestRestEndpointNok(t *testing.T) { + + var clientEndpoint models.SubscriptionParamsClientEndpoint + var httpPort int64 + var rmrPort int64 + var host string + + httpPort = 0 + rmrPort = 0 + host = "service-ricxapp-xappname-http.ricxapp" + + clientEndpoint.HTTPPort = &httpPort + clientEndpoint.RMRPort = &rmrPort + clientEndpoint.Host = host + + _, _, err := ConstructEndpointAddresses(clientEndpoint) + + if err == nil { + t.Errorf("Mismatching return value: - expected ERR but got NIL") + } +} + +func TestRestEndpointNoHttpInHost(t *testing.T) { + + var clientEndpoint models.SubscriptionParamsClientEndpoint + var httpPort int64 + var rmrPort int64 + var host string + + httpPort = 8080 + rmrPort = 4562 + host = "service-ricxapp-xappname.ricxapp" + + clientEndpoint.HTTPPort = &httpPort + clientEndpoint.RMRPort = &rmrPort + clientEndpoint.Host = host + + expectedHttpEndpoint := "service-ricxapp-xappname.ricxapp:8080" + expectedRmrEndpoint := "service-ricxapp-xappname.ricxapp:4562" + + httpEndPoint, rmrEndPoint, err := ConstructEndpointAddresses(clientEndpoint) + + if err != nil { + t.Errorf("Mismatching return value: %s - ecpected NIL", err) + } + if httpEndPoint != expectedHttpEndpoint { + t.Errorf("Mismatching httpEndpoint: %s - ecpected %s", httpEndPoint, expectedHttpEndpoint) + } + if rmrEndPoint != expectedRmrEndpoint { + t.Errorf("Mismatching httpEndpoint: %s - ecpected %s", httpEndPoint, expectedHttpEndpoint) + } +} + +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- diff --git a/pkg/teststube2ap/stubE2.go b/pkg/teststube2ap/stubE2.go index b8d2350..4c8c08d 100644 --- a/pkg/teststube2ap/stubE2.go +++ b/pkg/teststube2ap/stubE2.go @@ -764,7 +764,7 @@ func (tc *E2Stub) WaitListedRestNotifications(t *testing.T, restSubsIds []string // //----------------------------------------------------------------------------- func (tc *E2Stub) SendRESTSubsReq(t *testing.T, params *RESTSubsReqParams) string { // This need to be edited according to new specification - tc.Info("Posting REST Report subscriptions to Submgr") + tc.Info("======== Posting REST Report subscriptions to Submgr ======") if params == nil { tc.Info("SendRESTReportSubsReq: params == nil") @@ -775,10 +775,11 @@ func (tc *E2Stub) SendRESTSubsReq(t *testing.T, params *RESTSubsReqParams) strin if err != nil { // Swagger generated code makes checks for the values that are inserted the subscription function // If error cause is unknown and POST is not done, the problem is in the inserted values - tc.Error("REST report subscriptions failed %s", err.Error()) + tc.Error("======== REST report subscriptions failed %s ========", err.Error()) + return "" } tc.subscriptionId = *resp.SubscriptionID - tc.Info("REST report subscriptions pushed successfully. SubscriptionID = %s, RequestCount = %v", *resp.SubscriptionID, tc.requestCount) + tc.Info("======== REST report subscriptions posted successfully. SubscriptionID = %s, RequestCount = %v ========", *resp.SubscriptionID, tc.requestCount) return *resp.SubscriptionID }