/* ================================================================================== Copyright (c) 2019 Nokia ================================================================================== */ package xapp import ( "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/clientmodel" "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/models" "github.com/stretchr/testify/assert" "testing" "time" "fmt" ) var suite *testing.T var meid = "gnb123456" var funId = int64(1) var clientEndpoint = "localhost" var direction = int64(0) var procedureCode = int64(27) var typeOfMessage = int64(1) var reportParams = clientmodel.ReportParams{ Meid: meid, RANFunctionID: &funId, ClientEndpoint: &clientEndpoint, EventTriggers: clientmodel.EventTriggerList{ &clientmodel.EventTrigger{ InterfaceDirection: direction, ProcedureCode: procedureCode, TypeOfMessage: typeOfMessage, }, }, } var policyParams = clientmodel.PolicyParams{ Meid: &meid, RANFunctionID: &funId, ClientEndpoint: &clientEndpoint, EventTriggers: clientmodel.EventTriggerList{ &clientmodel.EventTrigger{ InterfaceDirection: direction, ProcedureCode: procedureCode, TypeOfMessage: typeOfMessage, }, }, PolicyActionDefinitions: &clientmodel.PolicyActionDefinition{}, } func processSubscriptions(subscriptionId string) { // Generate requestorId, instanceId reqId := int64(11) instanceId := int64(22) resp := &models.SubscriptionResponse{ SubscriptionID: &subscriptionId, SubscriptionInstances: []*models.SubscriptionInstance{ &models.SubscriptionInstance{RequestorID: &reqId, InstanceID: &instanceId}, }, } // Notify the client: don't worry about errors ... Notify() will handle retries, etc. Subscription.Notify(resp, clientEndpoint) } func subscriptionHandler(stype models.SubscriptionType, params interface{}) (*models.SubscriptionResponse, error) { switch stype { case models.SubscriptionTypeReport: p := params.(*models.ReportParams) assert.Equal(suite, meid, p.Meid) assert.Equal(suite, funId, *p.RANFunctionID) assert.Equal(suite, clientEndpoint, *p.ClientEndpoint) assert.Equal(suite, direction, p.EventTriggers[0].InterfaceDirection) assert.Equal(suite, procedureCode, p.EventTriggers[0].ProcedureCode) assert.Equal(suite, typeOfMessage, p.EventTriggers[0].TypeOfMessage) case models.SubscriptionTypePolicy: p := params.(*models.PolicyParams) assert.Equal(suite, clientEndpoint, *p.ClientEndpoint) } // Generate a unique subscriptionId subscriptionId := fmt.Sprintf("%s-%s", meid, clientEndpoint) // Process subscriptions on the background go processSubscriptions(subscriptionId) // and send response immediately return &models.SubscriptionResponse{ SubscriptionID: &subscriptionId, }, nil } func queryHandler() (models.SubscriptionList, error) { resp := models.SubscriptionList{ &models.SubscriptionData{ SubscriptionID: 11, Meid: "Test-Gnb", Endpoint: []string{"127.0.0.1:4056"}, }, } return resp, nil } func deleteHandler(ep string) error { assert.Equal(suite, clientEndpoint, ep) return nil } func TestSetup(t *testing.T) { suite = t // Start the server to simulate SubManager go Subscription.Listen(subscriptionHandler, queryHandler, deleteHandler) time.Sleep(time.Duration(2) * time.Second) } func TestSubscriptionQueryHandling(t *testing.T) { resp, err := Subscription.QuerySubscriptions() assert.Equal(t, err, nil) assert.Equal(t, resp[0].SubscriptionID, int64(11)) assert.Equal(t, resp[0].Meid, "Test-Gnb") assert.Equal(t, resp[0].Endpoint, []string{"127.0.0.1:4056"}) } func TestSubscriptionReportHandling(t *testing.T) { Subscription.SetResponseCB(func(resp *clientmodel.SubscriptionResponse) { assert.Equal(t, len(resp.SubscriptionInstances), 1) assert.Equal(t, *resp.SubscriptionInstances[0].RequestorID, int64(11)) assert.Equal(t, *resp.SubscriptionInstances[0].InstanceID, int64(22)) }) _, err := Subscription.SubscribeReport(&reportParams) assert.Equal(t, err, nil) } func TestSubscriptionPolicytHandling(t *testing.T) { Subscription.SetResponseCB(func(resp *clientmodel.SubscriptionResponse) { assert.Equal(t, len(resp.SubscriptionInstances), 1) assert.Equal(t, *resp.SubscriptionInstances[0].RequestorID, int64(11)) assert.Equal(t, *resp.SubscriptionInstances[0].InstanceID, int64(22)) }) _, err := Subscription.SubscribePolicy(&policyParams) assert.Equal(t, err, nil) } func TestSubscriptionDeleteHandling(t *testing.T) { err := Subscription.UnSubscribe(clientEndpoint) assert.Equal(t, err, nil) }