2 ==================================================================================
3 Copyright (c) 2019 Nokia
4 ==================================================================================
11 "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/models"
12 "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/clientmodel"
13 "github.com/stretchr/testify/assert"
27 subsequestActioType = "continue"
30 procedureCode = int64(27)
31 typeOfMessage = int64(1)
35 clientEndpoint = clientmodel.SubscriptionParamsClientEndpoint{Host: "localhost", HTTPPort: &hPort, RMRPort: &rPort}
39 func TestSetup(t *testing.T) {
42 // Start the server to simulate SubManager
43 go Subscription.Listen(subscriptionHandler, queryHandler, deleteHandler)
44 time.Sleep(time.Duration(2) * time.Second)
47 func TestSubscriptionQueryHandling(t *testing.T) {
48 resp, err := Subscription.QuerySubscriptions()
50 assert.Equal(t, err, nil)
51 assert.Equal(t, resp[0].SubscriptionID, int64(11))
52 assert.Equal(t, resp[0].Meid, "Test-Gnb")
53 assert.Equal(t, resp[0].ClientEndpoint, []string{"127.0.0.1:4056"})
56 func TestSubscriptionHandling(t *testing.T) {
57 subscriptionParams := clientmodel.SubscriptionParams{
59 RANFunctionID: &funId,
60 ClientEndpoint: &clientEndpoint,
61 SubscriptionDetails: clientmodel.SubscriptionDetailsList{
62 &clientmodel.SubscriptionDetail{
65 EventTriggers: &clientmodel.EventTriggerDefinition{
68 ActionToBeSetupList: clientmodel.ActionsToBeSetup{
69 &clientmodel.ActionToBeSetup{
71 ActionType: &actionType,
72 ActionDefinition: &clientmodel.ActionDefinition{
75 SubsequentAction: &clientmodel.SubsequentAction{
76 SubsequentActionType: &subsequestActioType,
77 TimeToWait: &timeToWait,
85 Subscription.SetResponseCB(func(resp *clientmodel.SubscriptionResponse) {
86 assert.Equal(t, len(resp.SubscriptionInstances), 1)
87 assert.Equal(t, *resp.SubscriptionInstances[0].RequestorID, int64(11))
88 assert.Equal(t, *resp.SubscriptionInstances[0].InstanceID, int64(22))
91 _, err := Subscription.Subscribe(&subscriptionParams)
92 assert.Equal(t, err, nil)
95 func TestSubscriptionDeleteHandling(t *testing.T) {
96 err := Subscription.Unsubscribe(subscriptionId)
98 assert.Equal(t, err, nil)
102 func processSubscriptions(subscriptionId string) {
103 // Generate requestorId, instanceId
105 instanceId := int64(22)
107 resp := &models.SubscriptionResponse{
108 SubscriptionID: &subscriptionId,
109 SubscriptionInstances: []*models.SubscriptionInstance{
112 InstanceID: &instanceId,
117 // Notify the client: don't worry about errors ... Notify() will handle retries, etc.
118 Subscription.Notify(resp, models.SubscriptionParamsClientEndpoint{Host: "localhost", HTTPPort: &hPort, RMRPort: &rPort})
121 func subscriptionHandler(params interface{}) (*models.SubscriptionResponse, error) {
122 p := params.(*models.SubscriptionParams)
124 assert.Equal(suite, meid, *p.Meid)
125 assert.Equal(suite, funId, *p.RANFunctionID)
126 assert.Equal(suite, clientEndpoint.Host, p.ClientEndpoint.Host)
127 assert.Equal(suite, clientEndpoint.HTTPPort, p.ClientEndpoint.HTTPPort)
128 assert.Equal(suite, clientEndpoint.RMRPort, p.ClientEndpoint.RMRPort)
130 assert.Equal(suite, reqId, *p.SubscriptionDetails[0].RequestorID)
131 assert.Equal(suite, seqId, *p.SubscriptionDetails[0].InstanceID)
132 assert.Equal(suite, "1234", p.SubscriptionDetails[0].EventTriggers.OctetString)
133 assert.Equal(suite, actionId, *p.SubscriptionDetails[0].ActionToBeSetupList[0].ActionID)
134 assert.Equal(suite, actionType, *p.SubscriptionDetails[0].ActionToBeSetupList[0].ActionType)
136 assert.Equal(suite, subsequestActioType, *p.SubscriptionDetails[0].ActionToBeSetupList[0].SubsequentAction.SubsequentActionType)
137 assert.Equal(suite, timeToWait, *p.SubscriptionDetails[0].ActionToBeSetupList[0].SubsequentAction.TimeToWait)
138 assert.Equal(suite, "5678", p.SubscriptionDetails[0].ActionToBeSetupList[0].ActionDefinition.OctetString)
140 // Generate a unique subscriptionId
141 subscriptionId = fmt.Sprintf("%s-%s", meid, clientEndpoint.Host)
143 // Process subscriptions on the background
144 go processSubscriptions(subscriptionId)
146 // and send response immediately
147 return &models.SubscriptionResponse{
148 SubscriptionID: &subscriptionId,
152 func queryHandler() (models.SubscriptionList, error) {
153 resp := models.SubscriptionList{
154 &models.SubscriptionData{
157 ClientEndpoint: []string{"127.0.0.1:4056"},
163 func deleteHandler(ep string) error {
164 assert.Equal(suite, subscriptionId, ep)