2 ==================================================================================
3 Copyright (c) 2019 Nokia
4 ==================================================================================
14 "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/clientmodel"
15 "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/models"
16 "github.com/stretchr/testify/assert"
23 xappEventInstanceId = int64(1)
24 eventInstanceId = int64(1)
28 subsequestActioType = "continue"
31 procedureCode = int64(27)
32 typeOfMessage = int64(1)
36 clientEndpoint = clientmodel.SubscriptionParamsClientEndpoint{Host: "localhost", HTTPPort: &hPort, RMRPort: &rPort}
40 func TestSetup(t *testing.T) {
43 // Start the server to simulate SubManager
44 go Subscription.Listen(subscriptionHandler, queryHandler, deleteHandler)
45 time.Sleep(time.Duration(2) * time.Second)
48 func TestSubscriptionQueryHandling(t *testing.T) {
49 resp, err := Subscription.QuerySubscriptions()
51 assert.Equal(t, err, nil)
52 assert.Equal(t, resp[0].SubscriptionID, int64(11))
53 assert.Equal(t, resp[0].Meid, "Test-Gnb")
54 assert.Equal(t, resp[0].ClientEndpoint, []string{"127.0.0.1:4056"})
57 func TestSubscriptionHandling(t *testing.T) {
58 subscriptionParams := clientmodel.SubscriptionParams{
61 RANFunctionID: &funId,
62 ClientEndpoint: &clientEndpoint,
63 SubscriptionDetails: clientmodel.SubscriptionDetailsList{
64 &clientmodel.SubscriptionDetail{
65 XappEventInstanceID: &eventInstanceId,
66 EventTriggers: clientmodel.EventTriggerDefinition{00, 0x11, 0x12, 0x13, 0x00, 0x21, 0x22, 0x24, 0x1B, 0x80},
67 ActionToBeSetupList: clientmodel.ActionsToBeSetup{
68 &clientmodel.ActionToBeSetup{
70 ActionType: &actionType,
71 ActionDefinition: clientmodel.ActionDefinition{5, 6, 7, 8},
72 SubsequentAction: &clientmodel.SubsequentAction{
73 SubsequentActionType: &subsequestActioType,
74 TimeToWait: &timeToWait,
82 Subscription.SetResponseCB(func(resp *clientmodel.SubscriptionResponse) {
83 assert.Equal(t, len(resp.SubscriptionInstances), 1)
84 assert.Equal(t, *resp.SubscriptionInstances[0].XappEventInstanceID, int64(11))
85 assert.Equal(t, *resp.SubscriptionInstances[0].E2EventInstanceID, int64(22))
88 _, err := Subscription.Subscribe(&subscriptionParams)
89 assert.Equal(t, err, nil)
92 func TestSubscriptionWithClientProvidedIdHandling(t *testing.T) {
93 subscriptionParams := clientmodel.SubscriptionParams{
94 SubscriptionID: "myxapp",
96 RANFunctionID: &funId,
97 ClientEndpoint: &clientEndpoint,
98 SubscriptionDetails: clientmodel.SubscriptionDetailsList{
99 &clientmodel.SubscriptionDetail{
100 XappEventInstanceID: &eventInstanceId,
101 EventTriggers: clientmodel.EventTriggerDefinition{00, 0x11, 0x12, 0x13, 0x00, 0x21, 0x22, 0x24, 0x1B, 0x80},
102 ActionToBeSetupList: clientmodel.ActionsToBeSetup{
103 &clientmodel.ActionToBeSetup{
105 ActionType: &actionType,
106 ActionDefinition: clientmodel.ActionDefinition{5, 6, 7, 8},
107 SubsequentAction: &clientmodel.SubsequentAction{
108 SubsequentActionType: &subsequestActioType,
109 TimeToWait: &timeToWait,
117 Subscription.SetResponseCB(func(resp *clientmodel.SubscriptionResponse) {
118 assert.Equal(t, len(resp.SubscriptionInstances), 1)
119 assert.Equal(t, *resp.SubscriptionInstances[0].XappEventInstanceID, int64(11))
120 assert.Equal(t, *resp.SubscriptionInstances[0].E2EventInstanceID, int64(22))
123 _, err := Subscription.Subscribe(&subscriptionParams)
124 assert.Equal(t, err, nil)
127 func TestSubscriptionDeleteHandling(t *testing.T) {
128 err := Subscription.Unsubscribe(subscriptionId)
130 assert.Equal(t, err, nil)
134 func processSubscriptions(subscriptionId string) {
135 // Generate requestorId, instanceId
136 xappInstanceId := int64(11)
137 e2InstanceId := int64(22)
139 resp := &models.SubscriptionResponse{
140 SubscriptionID: &subscriptionId,
141 SubscriptionInstances: []*models.SubscriptionInstance{
143 XappEventInstanceID: &xappInstanceId,
144 E2EventInstanceID: &e2InstanceId,
149 // Notify the client: don't worry about errors ... Notify() will handle retries, etc.
150 Subscription.Notify(resp, models.SubscriptionParamsClientEndpoint{Host: "localhost", HTTPPort: &hPort, RMRPort: &rPort})
153 func subscriptionHandler(params interface{}) (*models.SubscriptionResponse, error) {
154 p := params.(*models.SubscriptionParams)
156 assert.Equal(suite, meid, *p.Meid)
157 assert.Equal(suite, funId, *p.RANFunctionID)
158 assert.Equal(suite, clientEndpoint.Host, p.ClientEndpoint.Host)
159 assert.Equal(suite, clientEndpoint.HTTPPort, p.ClientEndpoint.HTTPPort)
160 assert.Equal(suite, clientEndpoint.RMRPort, p.ClientEndpoint.RMRPort)
162 assert.Equal(suite, xappEventInstanceId, *p.SubscriptionDetails[0].XappEventInstanceID)
163 et := []int64{00, 0x11, 0x12, 0x13, 0x00, 0x21, 0x22, 0x24, 0x1B, 0x80}
164 assert.ElementsMatch(suite, et, p.SubscriptionDetails[0].EventTriggers)
165 assert.Equal(suite, actionId, *p.SubscriptionDetails[0].ActionToBeSetupList[0].ActionID)
166 assert.Equal(suite, actionType, *p.SubscriptionDetails[0].ActionToBeSetupList[0].ActionType)
168 assert.Equal(suite, subsequestActioType, *p.SubscriptionDetails[0].ActionToBeSetupList[0].SubsequentAction.SubsequentActionType)
169 assert.Equal(suite, timeToWait, *p.SubscriptionDetails[0].ActionToBeSetupList[0].SubsequentAction.TimeToWait)
170 assert.ElementsMatch(suite, []int64{5, 6, 7, 8}, p.SubscriptionDetails[0].ActionToBeSetupList[0].ActionDefinition)
172 // Generate a unique subscriptionId
173 subscriptionId = fmt.Sprintf("%s-%s", meid, clientEndpoint.Host)
175 // Process subscriptions on the background
176 go processSubscriptions(subscriptionId)
178 // and send response immediately
179 return &models.SubscriptionResponse{
180 SubscriptionID: &subscriptionId,
184 func queryHandler() (models.SubscriptionList, error) {
185 resp := models.SubscriptionList{
186 &models.SubscriptionData{
189 ClientEndpoint: []string{"127.0.0.1:4056"},
195 func deleteHandler(ep string) error {
196 assert.Equal(suite, subscriptionId, ep)