2 ==================================================================================
3 Copyright (c) 2019 Nokia
4 ==================================================================================
11 "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/clientmodel"
12 "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/models"
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 TestSubscriptionWithClientProvidedIdHandling(t *testing.T) {
96 subscriptionParams := clientmodel.SubscriptionParams{
98 RANFunctionID: &funId,
99 ClientEndpoint: &clientEndpoint,
100 SubscriptionID: "myxapp",
101 SubscriptionDetails: clientmodel.SubscriptionDetailsList{
102 &clientmodel.SubscriptionDetail{
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].RequestorID, int64(11))
128 assert.Equal(t, *resp.SubscriptionInstances[0].InstanceID, 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
145 instanceId := int64(22)
147 resp := &models.SubscriptionResponse{
148 SubscriptionID: &subscriptionId,
149 SubscriptionInstances: []*models.SubscriptionInstance{
152 InstanceID: &instanceId,
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, reqId, *p.SubscriptionDetails[0].RequestorID)
171 assert.Equal(suite, seqId, *p.SubscriptionDetails[0].InstanceID)
172 assert.Equal(suite, "1234", p.SubscriptionDetails[0].EventTriggers.OctetString)
173 assert.Equal(suite, actionId, *p.SubscriptionDetails[0].ActionToBeSetupList[0].ActionID)
174 assert.Equal(suite, actionType, *p.SubscriptionDetails[0].ActionToBeSetupList[0].ActionType)
176 assert.Equal(suite, subsequestActioType, *p.SubscriptionDetails[0].ActionToBeSetupList[0].SubsequentAction.SubsequentActionType)
177 assert.Equal(suite, timeToWait, *p.SubscriptionDetails[0].ActionToBeSetupList[0].SubsequentAction.TimeToWait)
178 assert.Equal(suite, "5678", p.SubscriptionDetails[0].ActionToBeSetupList[0].ActionDefinition.OctetString)
180 // Generate a unique subscriptionId
181 subscriptionId = fmt.Sprintf("%s-%s", meid, clientEndpoint.Host)
183 // Process subscriptions on the background
184 go processSubscriptions(subscriptionId)
186 // and send response immediately
187 return &models.SubscriptionResponse{
188 SubscriptionID: &subscriptionId,
192 func queryHandler() (models.SubscriptionList, error) {
193 resp := models.SubscriptionList{
194 &models.SubscriptionData{
197 ClientEndpoint: []string{"127.0.0.1:4056"},
203 func deleteHandler(ep string) error {
204 assert.Equal(suite, subscriptionId, ep)