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{
69 ActionToBeSetupList: clientmodel.ActionsToBeSetup{
70 &clientmodel.ActionToBeSetup{
72 ActionType: &actionType,
73 ActionDefinition: &clientmodel.ActionDefinition{
76 SubsequentAction: &clientmodel.SubsequentAction{
77 SubsequentActionType: &subsequestActioType,
78 TimeToWait: &timeToWait,
86 Subscription.SetResponseCB(func(resp *clientmodel.SubscriptionResponse) {
87 assert.Equal(t, len(resp.SubscriptionInstances), 1)
88 assert.Equal(t, *resp.SubscriptionInstances[0].XappEventInstanceID, int64(11))
89 assert.Equal(t, *resp.SubscriptionInstances[0].E2EventInstanceID, int64(22))
92 _, err := Subscription.Subscribe(&subscriptionParams)
93 assert.Equal(t, err, nil)
96 func TestSubscriptionWithClientProvidedIdHandling(t *testing.T) {
97 subscriptionParams := clientmodel.SubscriptionParams{
98 SubscriptionID: "myxapp",
100 RANFunctionID: &funId,
101 ClientEndpoint: &clientEndpoint,
102 SubscriptionDetails: clientmodel.SubscriptionDetailsList{
103 &clientmodel.SubscriptionDetail{
104 XappEventInstanceID: &eventInstanceId,
105 EventTriggers: &clientmodel.EventTriggerDefinition{
108 ActionToBeSetupList: clientmodel.ActionsToBeSetup{
109 &clientmodel.ActionToBeSetup{
111 ActionType: &actionType,
112 ActionDefinition: &clientmodel.ActionDefinition{
115 SubsequentAction: &clientmodel.SubsequentAction{
116 SubsequentActionType: &subsequestActioType,
117 TimeToWait: &timeToWait,
125 Subscription.SetResponseCB(func(resp *clientmodel.SubscriptionResponse) {
126 assert.Equal(t, len(resp.SubscriptionInstances), 1)
127 assert.Equal(t, *resp.SubscriptionInstances[0].XappEventInstanceID, int64(11))
128 assert.Equal(t, *resp.SubscriptionInstances[0].E2EventInstanceID, int64(22))
131 _, err := Subscription.Subscribe(&subscriptionParams)
132 assert.Equal(t, err, nil)
135 func TestSubscriptionDeleteHandling(t *testing.T) {
136 err := Subscription.Unsubscribe(subscriptionId)
138 assert.Equal(t, err, nil)
142 func processSubscriptions(subscriptionId string) {
143 // Generate requestorId, instanceId
144 xappInstanceId := int64(11)
145 e2InstanceId := int64(22)
147 resp := &models.SubscriptionResponse{
148 SubscriptionID: &subscriptionId,
149 SubscriptionInstances: []*models.SubscriptionInstance{
151 XappEventInstanceID: &xappInstanceId,
152 E2EventInstanceID: &e2InstanceId,
157 // Notify the client: don't worry about errors ... Notify() will handle retries, etc.
158 Subscription.Notify(resp, models.SubscriptionParamsClientEndpoint{Host: "localhost", HTTPPort: &hPort, RMRPort: &rPort})
161 func subscriptionHandler(params interface{}) (*models.SubscriptionResponse, error) {
162 p := params.(*models.SubscriptionParams)
164 assert.Equal(suite, meid, *p.Meid)
165 assert.Equal(suite, funId, *p.RANFunctionID)
166 assert.Equal(suite, clientEndpoint.Host, p.ClientEndpoint.Host)
167 assert.Equal(suite, clientEndpoint.HTTPPort, p.ClientEndpoint.HTTPPort)
168 assert.Equal(suite, clientEndpoint.RMRPort, p.ClientEndpoint.RMRPort)
170 assert.Equal(suite, xappEventInstanceId, *p.SubscriptionDetails[0].XappEventInstanceID)
171 assert.Equal(suite, "1234", p.SubscriptionDetails[0].EventTriggers.OctetString)
172 assert.Equal(suite, actionId, *p.SubscriptionDetails[0].ActionToBeSetupList[0].ActionID)
173 assert.Equal(suite, actionType, *p.SubscriptionDetails[0].ActionToBeSetupList[0].ActionType)
175 assert.Equal(suite, subsequestActioType, *p.SubscriptionDetails[0].ActionToBeSetupList[0].SubsequentAction.SubsequentActionType)
176 assert.Equal(suite, timeToWait, *p.SubscriptionDetails[0].ActionToBeSetupList[0].SubsequentAction.TimeToWait)
177 assert.Equal(suite, "5678", p.SubscriptionDetails[0].ActionToBeSetupList[0].ActionDefinition.OctetString)
179 // Generate a unique subscriptionId
180 subscriptionId = fmt.Sprintf("%s-%s", meid, clientEndpoint.Host)
182 // Process subscriptions on the background
183 go processSubscriptions(subscriptionId)
185 // and send response immediately
186 return &models.SubscriptionResponse{
187 SubscriptionID: &subscriptionId,
191 func queryHandler() (models.SubscriptionList, error) {
192 resp := models.SubscriptionList{
193 &models.SubscriptionData{
196 ClientEndpoint: []string{"127.0.0.1:4056"},
202 func deleteHandler(ep string) error {
203 assert.Equal(suite, subscriptionId, ep)