package xapp
import (
+ "bytes"
"fmt"
- "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/models"
- "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/clientmodel"
- "github.com/stretchr/testify/assert"
+ "net/http"
+ "net/http/httptest"
"testing"
"time"
+
+ "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"
)
var (
suite *testing.T
- meid = "gnb123456"
- reqId = int64(1)
- seqId = int64(1)
- funId = int64(1)
- actionId = int64(1)
- actionType = "report"
+ meid = "gnb123456"
+ xappEventInstanceId = int64(1)
+ eventInstanceId = int64(1)
+ funId = int64(1)
+ actionId = int64(1)
+ actionType = "report"
subsequestActioType = "continue"
- timeToWait = "w10ms"
- direction = int64(0)
- procedureCode = int64(27)
- typeOfMessage = int64(1)
- subscriptionId = ""
- hPort = int64(8080)
- rPort = int64(4560)
- clientEndpoint = clientmodel.SubscriptionParamsClientEndpoint{Host: "localhost", HTTPPort: &hPort, RMRPort: &rPort}
+ timeToWait = "w10ms"
+ direction = int64(0)
+ procedureCode = int64(27)
+ typeOfMessage = int64(1)
+ subscriptionId = ""
+ hPort = int64(8080)
+ rPort = int64(4560)
+ clientEndpoint = clientmodel.SubscriptionParamsClientEndpoint{Host: "localhost", HTTPPort: &hPort, RMRPort: &rPort}
)
// Test cases
func TestSubscriptionHandling(t *testing.T) {
subscriptionParams := clientmodel.SubscriptionParams{
+ SubscriptionID: "",
Meid: &meid,
RANFunctionID: &funId,
ClientEndpoint: &clientEndpoint,
SubscriptionDetails: clientmodel.SubscriptionDetailsList{
&clientmodel.SubscriptionDetail{
- RequestorID: &reqId,
- InstanceID: &seqId,
- EventTriggers: &clientmodel.EventTriggerDefinition{
- OctetString: "1234",
- },
+ XappEventInstanceID: &eventInstanceId,
+ EventTriggers: clientmodel.EventTriggerDefinition{00, 0x11, 0x12, 0x13, 0x00, 0x21, 0x22, 0x24, 0x1B, 0x80},
ActionToBeSetupList: clientmodel.ActionsToBeSetup{
&clientmodel.ActionToBeSetup{
- ActionID: &actionId,
- ActionType: &actionType,
- ActionDefinition: &clientmodel.ActionDefinition{
- OctetString: "5678",
+ ActionID: &actionId,
+ ActionType: &actionType,
+ ActionDefinition: clientmodel.ActionDefinition{5, 6, 7, 8},
+ SubsequentAction: &clientmodel.SubsequentAction{
+ SubsequentActionType: &subsequestActioType,
+ TimeToWait: &timeToWait,
},
+ },
+ },
+ },
+ },
+ }
+
+ Subscription.SetResponseCB(func(resp *clientmodel.SubscriptionResponse) {
+ assert.Equal(t, len(resp.SubscriptionInstances), 1)
+ assert.Equal(t, *resp.SubscriptionInstances[0].XappEventInstanceID, int64(11))
+ assert.Equal(t, *resp.SubscriptionInstances[0].E2EventInstanceID, int64(22))
+ })
+
+ _, err := Subscription.Subscribe(&subscriptionParams)
+ assert.Equal(t, err, nil)
+}
+
+func TestSubscriptionWithClientProvidedIdHandling(t *testing.T) {
+ subscriptionParams := clientmodel.SubscriptionParams{
+ SubscriptionID: "myxapp",
+ Meid: &meid,
+ RANFunctionID: &funId,
+ ClientEndpoint: &clientEndpoint,
+ SubscriptionDetails: clientmodel.SubscriptionDetailsList{
+ &clientmodel.SubscriptionDetail{
+ XappEventInstanceID: &eventInstanceId,
+ EventTriggers: clientmodel.EventTriggerDefinition{00, 0x11, 0x12, 0x13, 0x00, 0x21, 0x22, 0x24, 0x1B, 0x80},
+ ActionToBeSetupList: clientmodel.ActionsToBeSetup{
+ &clientmodel.ActionToBeSetup{
+ ActionID: &actionId,
+ ActionType: &actionType,
+ ActionDefinition: clientmodel.ActionDefinition{5, 6, 7, 8},
SubsequentAction: &clientmodel.SubsequentAction{
SubsequentActionType: &subsequestActioType,
- TimeToWait: &timeToWait,
+ TimeToWait: &timeToWait,
},
},
},
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))
+ assert.Equal(t, *resp.SubscriptionInstances[0].XappEventInstanceID, int64(11))
+ assert.Equal(t, *resp.SubscriptionInstances[0].E2EventInstanceID, int64(22))
})
_, err := Subscription.Subscribe(&subscriptionParams)
assert.Equal(t, err, nil)
}
+func TestResponseHandler(t *testing.T) {
+ Subscription.SetResponseCB(SubscriptionRespHandler)
+
+ payload := []byte(`{"SubscriptionInstances":[{"tXappEventInstanceID": 1}]`)
+ req, err := http.NewRequest("POST", "/ric/v1/subscriptions/response", bytes.NewBuffer(payload))
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ rr := httptest.NewRecorder()
+ handler := http.HandlerFunc(Subscription.ResponseHandler)
+ handler.ServeHTTP(rr, req)
+
+ if status := rr.Code; status != http.StatusOK {
+ t.Errorf("handler returned wrong status code: got %v want %v", status, http.StatusOK)
+ }
+ time.Sleep(time.Duration(2) * time.Second)
+}
+
// Helper functions
+func SubscriptionRespHandler(resp *clientmodel.SubscriptionResponse) {
+}
+
func processSubscriptions(subscriptionId string) {
// Generate requestorId, instanceId
- reqId := int64(11)
- instanceId := int64(22)
+ xappInstanceId := int64(11)
+ e2InstanceId := int64(22)
resp := &models.SubscriptionResponse{
SubscriptionID: &subscriptionId,
SubscriptionInstances: []*models.SubscriptionInstance{
{
- RequestorID: &reqId,
- InstanceID: &instanceId,
+ XappEventInstanceID: &xappInstanceId,
+ E2EventInstanceID: &e2InstanceId,
},
},
}
assert.Equal(suite, clientEndpoint.HTTPPort, p.ClientEndpoint.HTTPPort)
assert.Equal(suite, clientEndpoint.RMRPort, p.ClientEndpoint.RMRPort)
- assert.Equal(suite, reqId, *p.SubscriptionDetails[0].RequestorID)
- assert.Equal(suite, seqId, *p.SubscriptionDetails[0].InstanceID)
- assert.Equal(suite, "1234", p.SubscriptionDetails[0].EventTriggers.OctetString)
+ assert.Equal(suite, xappEventInstanceId, *p.SubscriptionDetails[0].XappEventInstanceID)
+ et := []int64{00, 0x11, 0x12, 0x13, 0x00, 0x21, 0x22, 0x24, 0x1B, 0x80}
+ assert.ElementsMatch(suite, et, p.SubscriptionDetails[0].EventTriggers)
assert.Equal(suite, actionId, *p.SubscriptionDetails[0].ActionToBeSetupList[0].ActionID)
assert.Equal(suite, actionType, *p.SubscriptionDetails[0].ActionToBeSetupList[0].ActionType)
assert.Equal(suite, subsequestActioType, *p.SubscriptionDetails[0].ActionToBeSetupList[0].SubsequentAction.SubsequentActionType)
assert.Equal(suite, timeToWait, *p.SubscriptionDetails[0].ActionToBeSetupList[0].SubsequentAction.TimeToWait)
- assert.Equal(suite, "5678", p.SubscriptionDetails[0].ActionToBeSetupList[0].ActionDefinition.OctetString)
+ assert.ElementsMatch(suite, []int64{5, 6, 7, 8}, p.SubscriptionDetails[0].ActionToBeSetupList[0].ActionDefinition)
// Generate a unique subscriptionId
subscriptionId = fmt.Sprintf("%s-%s", meid, clientEndpoint.Host)