Further enhancements 65/5865/4 v0.8.1
authorMohamed Abukar <abukar.mohamed@nokia.com>
Wed, 7 Apr 2021 18:18:55 +0000 (21:18 +0300)
committerMohamed Abukar <abukar.mohamed@nokia.com>
Thu, 8 Apr 2021 04:06:45 +0000 (07:06 +0300)
Change-Id: I6584ca5e8c33b105ef0e99fe737d6da3b3e08073
Signed-off-by: Mohamed Abukar <abukar.mohamed@nokia.com>
14 files changed:
api/xapp_rest_api.yaml
config/config-file.json
pkg/clientmodel/subscription_data.go
pkg/clientmodel/subscription_detail.go [new file with mode: 0644]
pkg/clientmodel/subscription_details_list.go
pkg/clientmodel/subscription_params.go
pkg/models/subscription_data.go
pkg/models/subscription_detail.go [new file with mode: 0644]
pkg/models/subscription_details_list.go
pkg/models/subscription_params.go
pkg/restapi/embedded_spec.go
pkg/xapp/subscription.go
pkg/xapp/subscription_test.go
pkg/xapp/xapp.go

index 74db6b9..8554ca2 100755 (executable)
@@ -191,27 +191,35 @@ definitions:
     properties:
       OctetString:
         type: string
-  SubscriptionDetails:
+  SubscriptionDetail:
     type: object
     required:
-      - EventTriggerList
+      - RequestorId
+      - InstanceId
+      - EventTriggers
       - ActionToBeSetupList
     properties:
-      EventTriggerList:
+      RequestorId:
+        type: integer
+        minimum: 0
+        maximum: 65535
+      InstanceId:
+        type: integer
+        minimum: 0
+        maximum: 65535
+      EventTriggers:
         $ref: '#/definitions/EventTriggerDefinition'
       ActionToBeSetupList:
         $ref: '#/definitions/ActionsToBeSetup'
   SubscriptionDetailsList:
     type: array
     items:
-      $ref: '#/definitions/SubscriptionDetails'
+      $ref: '#/definitions/SubscriptionDetail'
   SubscriptionParams:
     type: object
     required:
       - ClientEndpoint
       - Meid
-      - RequestorId
-      - InstanceId
       - RANFunctionID
       - SubscriptionDetails
     properties:
@@ -219,26 +227,22 @@ definitions:
         type: object
         description: xApp service address and port
         properties:
-          ServiceName:
+          Host:
             description: >-
-              xApp service address name like
-              'service-ricxapp-xappname-http.ricxapp'
+              xApp service address name like 'service-ricxapp-xappname-http.ricxapp'
             type: string
-          Port:
-            description: xApp service address port
+          HTTPPort:
+            description: xApp HTTP service address port
+            type: integer
+            minimum: 0
+            maximum: 65535
+          RMRPort:
+            description: xApp RMR service address port
             type: integer
             minimum: 0
             maximum: 65535
       Meid:
         type: string
-      RequestorId:
-        type: integer
-        minimum: 0
-        maximum: 65535
-      InstanceId:
-        type: integer
-        minimum: 0
-        maximum: 65535
       RANFunctionID:
         type: integer
         minimum: 0
@@ -275,7 +279,6 @@ definitions:
       ErrorCause:
         description: Empty string when no error.
         type: string
-
   SubscriptionData:
     type: object
     properties:
@@ -283,10 +286,14 @@ definitions:
         type: integer
       Meid:
         type: string
-      Endpoint:
+      ClientEndpoint:
         type: array
         items:
           type: string
+      SubscriptionInstances:
+        type: array
+        items:
+          $ref: '#/definitions/SubscriptionInstance'
   SubscriptionList:
     type: array
     description: A list of subscriptions
index 08a204e..70fd3ae 100755 (executable)
             "noFormat": true
         },
         "subscription": {
-            "subscriptionActive": true,
-            "functionId": 1,
-            "plmnId": "310150",
-            "eNBId": "202251",
-            "timeout": 5,
-            "host": "service-ricplt-submgr-http.ricplt:8088",
-            "clientEndpoint": "service-ricxapp-ueec-http.ricxapp:8080"
+            "host": "localhost:8088",
+            "timeout": 2,
+            "retryCount": 10,
+            "retryDelay": 5
         },
         "waitForSdl": false
     },
         "url": "/ric/v1/metrics",
         "namespace": "ricxapp"
     },
-    "subscription": {
-        "host": "localhost:8088",
-        "timeout": 2,
-        "retryCount": 10,
-        "retryDelay": 5
-    },
     "faults": {},
     "measurements": []
 }
index 8d22352..deeddca 100644 (file)
@@ -6,8 +6,11 @@ package clientmodel
 // Editing this file might prove futile when you re-run the swagger generate command
 
 import (
+       "strconv"
+
        strfmt "github.com/go-openapi/strfmt"
 
+       "github.com/go-openapi/errors"
        "github.com/go-openapi/swag"
 )
 
@@ -15,18 +18,55 @@ import (
 // swagger:model SubscriptionData
 type SubscriptionData struct {
 
-       // endpoint
-       Endpoint []string `json:"Endpoint"`
+       // client endpoint
+       ClientEndpoint []string `json:"ClientEndpoint"`
 
        // meid
        Meid string `json:"Meid,omitempty"`
 
        // subscription Id
        SubscriptionID int64 `json:"SubscriptionId,omitempty"`
+
+       // subscription instances
+       SubscriptionInstances []*SubscriptionInstance `json:"SubscriptionInstances"`
 }
 
 // Validate validates this subscription data
 func (m *SubscriptionData) Validate(formats strfmt.Registry) error {
+       var res []error
+
+       if err := m.validateSubscriptionInstances(formats); err != nil {
+               res = append(res, err)
+       }
+
+       if len(res) > 0 {
+               return errors.CompositeValidationError(res...)
+       }
+       return nil
+}
+
+func (m *SubscriptionData) validateSubscriptionInstances(formats strfmt.Registry) error {
+
+       if swag.IsZero(m.SubscriptionInstances) { // not required
+               return nil
+       }
+
+       for i := 0; i < len(m.SubscriptionInstances); i++ {
+               if swag.IsZero(m.SubscriptionInstances[i]) { // not required
+                       continue
+               }
+
+               if m.SubscriptionInstances[i] != nil {
+                       if err := m.SubscriptionInstances[i].Validate(formats); err != nil {
+                               if ve, ok := err.(*errors.Validation); ok {
+                                       return ve.ValidateName("SubscriptionInstances" + "." + strconv.Itoa(i))
+                               }
+                               return err
+                       }
+               }
+
+       }
+
        return nil
 }
 
diff --git a/pkg/clientmodel/subscription_detail.go b/pkg/clientmodel/subscription_detail.go
new file mode 100644 (file)
index 0000000..f7a7f1d
--- /dev/null
@@ -0,0 +1,151 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package clientmodel
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+       strfmt "github.com/go-openapi/strfmt"
+
+       "github.com/go-openapi/errors"
+       "github.com/go-openapi/swag"
+       "github.com/go-openapi/validate"
+)
+
+// SubscriptionDetail subscription detail
+// swagger:model SubscriptionDetail
+type SubscriptionDetail struct {
+
+       // action to be setup list
+       // Required: true
+       ActionToBeSetupList ActionsToBeSetup `json:"ActionToBeSetupList"`
+
+       // event triggers
+       // Required: true
+       EventTriggers *EventTriggerDefinition `json:"EventTriggers"`
+
+       // instance Id
+       // Required: true
+       // Maximum: 65535
+       // Minimum: 0
+       InstanceID *int64 `json:"InstanceId"`
+
+       // requestor Id
+       // Required: true
+       // Maximum: 65535
+       // Minimum: 0
+       RequestorID *int64 `json:"RequestorId"`
+}
+
+// Validate validates this subscription detail
+func (m *SubscriptionDetail) Validate(formats strfmt.Registry) error {
+       var res []error
+
+       if err := m.validateActionToBeSetupList(formats); err != nil {
+               res = append(res, err)
+       }
+
+       if err := m.validateEventTriggers(formats); err != nil {
+               res = append(res, err)
+       }
+
+       if err := m.validateInstanceID(formats); err != nil {
+               res = append(res, err)
+       }
+
+       if err := m.validateRequestorID(formats); err != nil {
+               res = append(res, err)
+       }
+
+       if len(res) > 0 {
+               return errors.CompositeValidationError(res...)
+       }
+       return nil
+}
+
+func (m *SubscriptionDetail) validateActionToBeSetupList(formats strfmt.Registry) error {
+
+       if err := validate.Required("ActionToBeSetupList", "body", m.ActionToBeSetupList); err != nil {
+               return err
+       }
+
+       if err := m.ActionToBeSetupList.Validate(formats); err != nil {
+               if ve, ok := err.(*errors.Validation); ok {
+                       return ve.ValidateName("ActionToBeSetupList")
+               }
+               return err
+       }
+
+       return nil
+}
+
+func (m *SubscriptionDetail) validateEventTriggers(formats strfmt.Registry) error {
+
+       if err := validate.Required("EventTriggers", "body", m.EventTriggers); err != nil {
+               return err
+       }
+
+       if m.EventTriggers != nil {
+               if err := m.EventTriggers.Validate(formats); err != nil {
+                       if ve, ok := err.(*errors.Validation); ok {
+                               return ve.ValidateName("EventTriggers")
+                       }
+                       return err
+               }
+       }
+
+       return nil
+}
+
+func (m *SubscriptionDetail) validateInstanceID(formats strfmt.Registry) error {
+
+       if err := validate.Required("InstanceId", "body", m.InstanceID); err != nil {
+               return err
+       }
+
+       if err := validate.MinimumInt("InstanceId", "body", int64(*m.InstanceID), 0, false); err != nil {
+               return err
+       }
+
+       if err := validate.MaximumInt("InstanceId", "body", int64(*m.InstanceID), 65535, false); err != nil {
+               return err
+       }
+
+       return nil
+}
+
+func (m *SubscriptionDetail) validateRequestorID(formats strfmt.Registry) error {
+
+       if err := validate.Required("RequestorId", "body", m.RequestorID); err != nil {
+               return err
+       }
+
+       if err := validate.MinimumInt("RequestorId", "body", int64(*m.RequestorID), 0, false); err != nil {
+               return err
+       }
+
+       if err := validate.MaximumInt("RequestorId", "body", int64(*m.RequestorID), 65535, false); err != nil {
+               return err
+       }
+
+       return nil
+}
+
+// MarshalBinary interface implementation
+func (m *SubscriptionDetail) MarshalBinary() ([]byte, error) {
+       if m == nil {
+               return nil, nil
+       }
+       return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *SubscriptionDetail) UnmarshalBinary(b []byte) error {
+       var res SubscriptionDetail
+       if err := swag.ReadJSON(b, &res); err != nil {
+               return err
+       }
+       *m = res
+       return nil
+}
index 450e08f..fbb3fa7 100644 (file)
@@ -16,7 +16,7 @@ import (
 
 // SubscriptionDetailsList subscription details list
 // swagger:model SubscriptionDetailsList
-type SubscriptionDetailsList []*SubscriptionDetails
+type SubscriptionDetailsList []*SubscriptionDetail
 
 // Validate validates this subscription details list
 func (m SubscriptionDetailsList) Validate(formats strfmt.Registry) error {
index eb1d875..68e3072 100644 (file)
@@ -21,12 +21,6 @@ type SubscriptionParams struct {
        // Required: true
        ClientEndpoint *SubscriptionParamsClientEndpoint `json:"ClientEndpoint"`
 
-       // instance Id
-       // Required: true
-       // Maximum: 65535
-       // Minimum: 0
-       InstanceID *int64 `json:"InstanceId"`
-
        // meid
        // Required: true
        Meid *string `json:"Meid"`
@@ -37,12 +31,6 @@ type SubscriptionParams struct {
        // Minimum: 0
        RANFunctionID *int64 `json:"RANFunctionID"`
 
-       // requestor Id
-       // Required: true
-       // Maximum: 65535
-       // Minimum: 0
-       RequestorID *int64 `json:"RequestorId"`
-
        // subscription details
        // Required: true
        SubscriptionDetails SubscriptionDetailsList `json:"SubscriptionDetails"`
@@ -56,10 +44,6 @@ func (m *SubscriptionParams) Validate(formats strfmt.Registry) error {
                res = append(res, err)
        }
 
-       if err := m.validateInstanceID(formats); err != nil {
-               res = append(res, err)
-       }
-
        if err := m.validateMeid(formats); err != nil {
                res = append(res, err)
        }
@@ -68,10 +52,6 @@ func (m *SubscriptionParams) Validate(formats strfmt.Registry) error {
                res = append(res, err)
        }
 
-       if err := m.validateRequestorID(formats); err != nil {
-               res = append(res, err)
-       }
-
        if err := m.validateSubscriptionDetails(formats); err != nil {
                res = append(res, err)
        }
@@ -100,23 +80,6 @@ func (m *SubscriptionParams) validateClientEndpoint(formats strfmt.Registry) err
        return nil
 }
 
-func (m *SubscriptionParams) validateInstanceID(formats strfmt.Registry) error {
-
-       if err := validate.Required("InstanceId", "body", m.InstanceID); err != nil {
-               return err
-       }
-
-       if err := validate.MinimumInt("InstanceId", "body", int64(*m.InstanceID), 0, false); err != nil {
-               return err
-       }
-
-       if err := validate.MaximumInt("InstanceId", "body", int64(*m.InstanceID), 65535, false); err != nil {
-               return err
-       }
-
-       return nil
-}
-
 func (m *SubscriptionParams) validateMeid(formats strfmt.Registry) error {
 
        if err := validate.Required("Meid", "body", m.Meid); err != nil {
@@ -143,23 +106,6 @@ func (m *SubscriptionParams) validateRANFunctionID(formats strfmt.Registry) erro
        return nil
 }
 
-func (m *SubscriptionParams) validateRequestorID(formats strfmt.Registry) error {
-
-       if err := validate.Required("RequestorId", "body", m.RequestorID); err != nil {
-               return err
-       }
-
-       if err := validate.MinimumInt("RequestorId", "body", int64(*m.RequestorID), 0, false); err != nil {
-               return err
-       }
-
-       if err := validate.MaximumInt("RequestorId", "body", int64(*m.RequestorID), 65535, false); err != nil {
-               return err
-       }
-
-       return nil
-}
-
 func (m *SubscriptionParams) validateSubscriptionDetails(formats strfmt.Registry) error {
 
        if err := validate.Required("SubscriptionDetails", "body", m.SubscriptionDetails); err != nil {
@@ -198,20 +144,29 @@ func (m *SubscriptionParams) UnmarshalBinary(b []byte) error {
 // swagger:model SubscriptionParamsClientEndpoint
 type SubscriptionParamsClientEndpoint struct {
 
-       // xApp service address port
+       // xApp HTTP service address port
        // Maximum: 65535
        // Minimum: 0
-       Port *int64 `json:"Port,omitempty"`
+       HTTPPort *int64 `json:"HTTPPort,omitempty"`
 
        // xApp service address name like 'service-ricxapp-xappname-http.ricxapp'
-       ServiceName string `json:"ServiceName,omitempty"`
+       Host string `json:"Host,omitempty"`
+
+       // xApp RMR service address port
+       // Maximum: 65535
+       // Minimum: 0
+       RMRPort *int64 `json:"RMRPort,omitempty"`
 }
 
 // Validate validates this subscription params client endpoint
 func (m *SubscriptionParamsClientEndpoint) Validate(formats strfmt.Registry) error {
        var res []error
 
-       if err := m.validatePort(formats); err != nil {
+       if err := m.validateHTTPPort(formats); err != nil {
+               res = append(res, err)
+       }
+
+       if err := m.validateRMRPort(formats); err != nil {
                res = append(res, err)
        }
 
@@ -221,17 +176,34 @@ func (m *SubscriptionParamsClientEndpoint) Validate(formats strfmt.Registry) err
        return nil
 }
 
-func (m *SubscriptionParamsClientEndpoint) validatePort(formats strfmt.Registry) error {
+func (m *SubscriptionParamsClientEndpoint) validateHTTPPort(formats strfmt.Registry) error {
+
+       if swag.IsZero(m.HTTPPort) { // not required
+               return nil
+       }
+
+       if err := validate.MinimumInt("ClientEndpoint"+"."+"HTTPPort", "body", int64(*m.HTTPPort), 0, false); err != nil {
+               return err
+       }
+
+       if err := validate.MaximumInt("ClientEndpoint"+"."+"HTTPPort", "body", int64(*m.HTTPPort), 65535, false); err != nil {
+               return err
+       }
+
+       return nil
+}
+
+func (m *SubscriptionParamsClientEndpoint) validateRMRPort(formats strfmt.Registry) error {
 
-       if swag.IsZero(m.Port) { // not required
+       if swag.IsZero(m.RMRPort) { // not required
                return nil
        }
 
-       if err := validate.MinimumInt("ClientEndpoint"+"."+"Port", "body", int64(*m.Port), 0, false); err != nil {
+       if err := validate.MinimumInt("ClientEndpoint"+"."+"RMRPort", "body", int64(*m.RMRPort), 0, false); err != nil {
                return err
        }
 
-       if err := validate.MaximumInt("ClientEndpoint"+"."+"Port", "body", int64(*m.Port), 65535, false); err != nil {
+       if err := validate.MaximumInt("ClientEndpoint"+"."+"RMRPort", "body", int64(*m.RMRPort), 65535, false); err != nil {
                return err
        }
 
index a297e62..5d665c0 100644 (file)
@@ -6,8 +6,11 @@ package models
 // Editing this file might prove futile when you re-run the swagger generate command
 
 import (
+       "strconv"
+
        strfmt "github.com/go-openapi/strfmt"
 
+       "github.com/go-openapi/errors"
        "github.com/go-openapi/swag"
 )
 
@@ -15,18 +18,55 @@ import (
 // swagger:model SubscriptionData
 type SubscriptionData struct {
 
-       // endpoint
-       Endpoint []string `json:"Endpoint"`
+       // client endpoint
+       ClientEndpoint []string `json:"ClientEndpoint"`
 
        // meid
        Meid string `json:"Meid,omitempty"`
 
        // subscription Id
        SubscriptionID int64 `json:"SubscriptionId,omitempty"`
+
+       // subscription instances
+       SubscriptionInstances []*SubscriptionInstance `json:"SubscriptionInstances"`
 }
 
 // Validate validates this subscription data
 func (m *SubscriptionData) Validate(formats strfmt.Registry) error {
+       var res []error
+
+       if err := m.validateSubscriptionInstances(formats); err != nil {
+               res = append(res, err)
+       }
+
+       if len(res) > 0 {
+               return errors.CompositeValidationError(res...)
+       }
+       return nil
+}
+
+func (m *SubscriptionData) validateSubscriptionInstances(formats strfmt.Registry) error {
+
+       if swag.IsZero(m.SubscriptionInstances) { // not required
+               return nil
+       }
+
+       for i := 0; i < len(m.SubscriptionInstances); i++ {
+               if swag.IsZero(m.SubscriptionInstances[i]) { // not required
+                       continue
+               }
+
+               if m.SubscriptionInstances[i] != nil {
+                       if err := m.SubscriptionInstances[i].Validate(formats); err != nil {
+                               if ve, ok := err.(*errors.Validation); ok {
+                                       return ve.ValidateName("SubscriptionInstances" + "." + strconv.Itoa(i))
+                               }
+                               return err
+                       }
+               }
+
+       }
+
        return nil
 }
 
diff --git a/pkg/models/subscription_detail.go b/pkg/models/subscription_detail.go
new file mode 100644 (file)
index 0000000..c592c53
--- /dev/null
@@ -0,0 +1,151 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+       strfmt "github.com/go-openapi/strfmt"
+
+       "github.com/go-openapi/errors"
+       "github.com/go-openapi/swag"
+       "github.com/go-openapi/validate"
+)
+
+// SubscriptionDetail subscription detail
+// swagger:model SubscriptionDetail
+type SubscriptionDetail struct {
+
+       // action to be setup list
+       // Required: true
+       ActionToBeSetupList ActionsToBeSetup `json:"ActionToBeSetupList"`
+
+       // event triggers
+       // Required: true
+       EventTriggers *EventTriggerDefinition `json:"EventTriggers"`
+
+       // instance Id
+       // Required: true
+       // Maximum: 65535
+       // Minimum: 0
+       InstanceID *int64 `json:"InstanceId"`
+
+       // requestor Id
+       // Required: true
+       // Maximum: 65535
+       // Minimum: 0
+       RequestorID *int64 `json:"RequestorId"`
+}
+
+// Validate validates this subscription detail
+func (m *SubscriptionDetail) Validate(formats strfmt.Registry) error {
+       var res []error
+
+       if err := m.validateActionToBeSetupList(formats); err != nil {
+               res = append(res, err)
+       }
+
+       if err := m.validateEventTriggers(formats); err != nil {
+               res = append(res, err)
+       }
+
+       if err := m.validateInstanceID(formats); err != nil {
+               res = append(res, err)
+       }
+
+       if err := m.validateRequestorID(formats); err != nil {
+               res = append(res, err)
+       }
+
+       if len(res) > 0 {
+               return errors.CompositeValidationError(res...)
+       }
+       return nil
+}
+
+func (m *SubscriptionDetail) validateActionToBeSetupList(formats strfmt.Registry) error {
+
+       if err := validate.Required("ActionToBeSetupList", "body", m.ActionToBeSetupList); err != nil {
+               return err
+       }
+
+       if err := m.ActionToBeSetupList.Validate(formats); err != nil {
+               if ve, ok := err.(*errors.Validation); ok {
+                       return ve.ValidateName("ActionToBeSetupList")
+               }
+               return err
+       }
+
+       return nil
+}
+
+func (m *SubscriptionDetail) validateEventTriggers(formats strfmt.Registry) error {
+
+       if err := validate.Required("EventTriggers", "body", m.EventTriggers); err != nil {
+               return err
+       }
+
+       if m.EventTriggers != nil {
+               if err := m.EventTriggers.Validate(formats); err != nil {
+                       if ve, ok := err.(*errors.Validation); ok {
+                               return ve.ValidateName("EventTriggers")
+                       }
+                       return err
+               }
+       }
+
+       return nil
+}
+
+func (m *SubscriptionDetail) validateInstanceID(formats strfmt.Registry) error {
+
+       if err := validate.Required("InstanceId", "body", m.InstanceID); err != nil {
+               return err
+       }
+
+       if err := validate.MinimumInt("InstanceId", "body", int64(*m.InstanceID), 0, false); err != nil {
+               return err
+       }
+
+       if err := validate.MaximumInt("InstanceId", "body", int64(*m.InstanceID), 65535, false); err != nil {
+               return err
+       }
+
+       return nil
+}
+
+func (m *SubscriptionDetail) validateRequestorID(formats strfmt.Registry) error {
+
+       if err := validate.Required("RequestorId", "body", m.RequestorID); err != nil {
+               return err
+       }
+
+       if err := validate.MinimumInt("RequestorId", "body", int64(*m.RequestorID), 0, false); err != nil {
+               return err
+       }
+
+       if err := validate.MaximumInt("RequestorId", "body", int64(*m.RequestorID), 65535, false); err != nil {
+               return err
+       }
+
+       return nil
+}
+
+// MarshalBinary interface implementation
+func (m *SubscriptionDetail) MarshalBinary() ([]byte, error) {
+       if m == nil {
+               return nil, nil
+       }
+       return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *SubscriptionDetail) UnmarshalBinary(b []byte) error {
+       var res SubscriptionDetail
+       if err := swag.ReadJSON(b, &res); err != nil {
+               return err
+       }
+       *m = res
+       return nil
+}
index 4387022..583da99 100644 (file)
@@ -16,7 +16,7 @@ import (
 
 // SubscriptionDetailsList subscription details list
 // swagger:model SubscriptionDetailsList
-type SubscriptionDetailsList []*SubscriptionDetails
+type SubscriptionDetailsList []*SubscriptionDetail
 
 // Validate validates this subscription details list
 func (m SubscriptionDetailsList) Validate(formats strfmt.Registry) error {
index eb2d171..dc57dee 100644 (file)
@@ -21,12 +21,6 @@ type SubscriptionParams struct {
        // Required: true
        ClientEndpoint *SubscriptionParamsClientEndpoint `json:"ClientEndpoint"`
 
-       // instance Id
-       // Required: true
-       // Maximum: 65535
-       // Minimum: 0
-       InstanceID *int64 `json:"InstanceId"`
-
        // meid
        // Required: true
        Meid *string `json:"Meid"`
@@ -37,12 +31,6 @@ type SubscriptionParams struct {
        // Minimum: 0
        RANFunctionID *int64 `json:"RANFunctionID"`
 
-       // requestor Id
-       // Required: true
-       // Maximum: 65535
-       // Minimum: 0
-       RequestorID *int64 `json:"RequestorId"`
-
        // subscription details
        // Required: true
        SubscriptionDetails SubscriptionDetailsList `json:"SubscriptionDetails"`
@@ -56,10 +44,6 @@ func (m *SubscriptionParams) Validate(formats strfmt.Registry) error {
                res = append(res, err)
        }
 
-       if err := m.validateInstanceID(formats); err != nil {
-               res = append(res, err)
-       }
-
        if err := m.validateMeid(formats); err != nil {
                res = append(res, err)
        }
@@ -68,10 +52,6 @@ func (m *SubscriptionParams) Validate(formats strfmt.Registry) error {
                res = append(res, err)
        }
 
-       if err := m.validateRequestorID(formats); err != nil {
-               res = append(res, err)
-       }
-
        if err := m.validateSubscriptionDetails(formats); err != nil {
                res = append(res, err)
        }
@@ -100,23 +80,6 @@ func (m *SubscriptionParams) validateClientEndpoint(formats strfmt.Registry) err
        return nil
 }
 
-func (m *SubscriptionParams) validateInstanceID(formats strfmt.Registry) error {
-
-       if err := validate.Required("InstanceId", "body", m.InstanceID); err != nil {
-               return err
-       }
-
-       if err := validate.MinimumInt("InstanceId", "body", int64(*m.InstanceID), 0, false); err != nil {
-               return err
-       }
-
-       if err := validate.MaximumInt("InstanceId", "body", int64(*m.InstanceID), 65535, false); err != nil {
-               return err
-       }
-
-       return nil
-}
-
 func (m *SubscriptionParams) validateMeid(formats strfmt.Registry) error {
 
        if err := validate.Required("Meid", "body", m.Meid); err != nil {
@@ -143,23 +106,6 @@ func (m *SubscriptionParams) validateRANFunctionID(formats strfmt.Registry) erro
        return nil
 }
 
-func (m *SubscriptionParams) validateRequestorID(formats strfmt.Registry) error {
-
-       if err := validate.Required("RequestorId", "body", m.RequestorID); err != nil {
-               return err
-       }
-
-       if err := validate.MinimumInt("RequestorId", "body", int64(*m.RequestorID), 0, false); err != nil {
-               return err
-       }
-
-       if err := validate.MaximumInt("RequestorId", "body", int64(*m.RequestorID), 65535, false); err != nil {
-               return err
-       }
-
-       return nil
-}
-
 func (m *SubscriptionParams) validateSubscriptionDetails(formats strfmt.Registry) error {
 
        if err := validate.Required("SubscriptionDetails", "body", m.SubscriptionDetails); err != nil {
@@ -198,20 +144,29 @@ func (m *SubscriptionParams) UnmarshalBinary(b []byte) error {
 // swagger:model SubscriptionParamsClientEndpoint
 type SubscriptionParamsClientEndpoint struct {
 
-       // xApp service address port
+       // xApp HTTP service address port
        // Maximum: 65535
        // Minimum: 0
-       Port *int64 `json:"Port,omitempty"`
+       HTTPPort *int64 `json:"HTTPPort,omitempty"`
 
        // xApp service address name like 'service-ricxapp-xappname-http.ricxapp'
-       ServiceName string `json:"ServiceName,omitempty"`
+       Host string `json:"Host,omitempty"`
+
+       // xApp RMR service address port
+       // Maximum: 65535
+       // Minimum: 0
+       RMRPort *int64 `json:"RMRPort,omitempty"`
 }
 
 // Validate validates this subscription params client endpoint
 func (m *SubscriptionParamsClientEndpoint) Validate(formats strfmt.Registry) error {
        var res []error
 
-       if err := m.validatePort(formats); err != nil {
+       if err := m.validateHTTPPort(formats); err != nil {
+               res = append(res, err)
+       }
+
+       if err := m.validateRMRPort(formats); err != nil {
                res = append(res, err)
        }
 
@@ -221,17 +176,34 @@ func (m *SubscriptionParamsClientEndpoint) Validate(formats strfmt.Registry) err
        return nil
 }
 
-func (m *SubscriptionParamsClientEndpoint) validatePort(formats strfmt.Registry) error {
+func (m *SubscriptionParamsClientEndpoint) validateHTTPPort(formats strfmt.Registry) error {
+
+       if swag.IsZero(m.HTTPPort) { // not required
+               return nil
+       }
+
+       if err := validate.MinimumInt("ClientEndpoint"+"."+"HTTPPort", "body", int64(*m.HTTPPort), 0, false); err != nil {
+               return err
+       }
+
+       if err := validate.MaximumInt("ClientEndpoint"+"."+"HTTPPort", "body", int64(*m.HTTPPort), 65535, false); err != nil {
+               return err
+       }
+
+       return nil
+}
+
+func (m *SubscriptionParamsClientEndpoint) validateRMRPort(formats strfmt.Registry) error {
 
-       if swag.IsZero(m.Port) { // not required
+       if swag.IsZero(m.RMRPort) { // not required
                return nil
        }
 
-       if err := validate.MinimumInt("ClientEndpoint"+"."+"Port", "body", int64(*m.Port), 0, false); err != nil {
+       if err := validate.MinimumInt("ClientEndpoint"+"."+"RMRPort", "body", int64(*m.RMRPort), 0, false); err != nil {
                return err
        }
 
-       if err := validate.MaximumInt("ClientEndpoint"+"."+"Port", "body", int64(*m.Port), 65535, false); err != nil {
+       if err := validate.MaximumInt("ClientEndpoint"+"."+"RMRPort", "body", int64(*m.RMRPort), 65535, false); err != nil {
                return err
        }
 
index 5fcc66f..b031520 100644 (file)
@@ -231,7 +231,7 @@ func init() {
     "SubscriptionData": {
       "type": "object",
       "properties": {
-        "Endpoint": {
+        "ClientEndpoint": {
           "type": "array",
           "items": {
             "type": "string"
@@ -242,28 +242,44 @@ func init() {
         },
         "SubscriptionId": {
           "type": "integer"
+        },
+        "SubscriptionInstances": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/SubscriptionInstance"
+          }
         }
       }
     },
-    "SubscriptionDetails": {
+    "SubscriptionDetail": {
       "type": "object",
       "required": [
-        "EventTriggerList",
+        "RequestorId",
+        "InstanceId",
+        "EventTriggers",
         "ActionToBeSetupList"
       ],
       "properties": {
         "ActionToBeSetupList": {
           "$ref": "#/definitions/ActionsToBeSetup"
         },
-        "EventTriggerList": {
+        "EventTriggers": {
           "$ref": "#/definitions/EventTriggerDefinition"
+        },
+        "InstanceId": {
+          "type": "integer",
+          "maximum": 65535
+        },
+        "RequestorId": {
+          "type": "integer",
+          "maximum": 65535
         }
       }
     },
     "SubscriptionDetailsList": {
       "type": "array",
       "items": {
-        "$ref": "#/definitions/SubscriptionDetails"
+        "$ref": "#/definitions/SubscriptionDetail"
       }
     },
     "SubscriptionInstance": {
@@ -300,8 +316,6 @@ func init() {
       "required": [
         "ClientEndpoint",
         "Meid",
-        "RequestorId",
-        "InstanceId",
         "RANFunctionID",
         "SubscriptionDetails"
       ],
@@ -310,21 +324,22 @@ func init() {
           "description": "xApp service address and port",
           "type": "object",
           "properties": {
-            "Port": {
-              "description": "xApp service address port",
+            "HTTPPort": {
+              "description": "xApp HTTP service address port",
               "type": "integer",
               "maximum": 65535
             },
-            "ServiceName": {
+            "Host": {
               "description": "xApp service address name like 'service-ricxapp-xappname-http.ricxapp'",
               "type": "string"
+            },
+            "RMRPort": {
+              "description": "xApp RMR service address port",
+              "type": "integer",
+              "maximum": 65535
             }
           }
         },
-        "InstanceId": {
-          "type": "integer",
-          "maximum": 65535
-        },
         "Meid": {
           "type": "string"
         },
@@ -332,10 +347,6 @@ func init() {
           "type": "integer",
           "maximum": 4095
         },
-        "RequestorId": {
-          "type": "integer",
-          "maximum": 65535
-        },
         "SubscriptionDetails": {
           "$ref": "#/definitions/SubscriptionDetailsList"
         }
@@ -638,7 +649,7 @@ func init() {
     "SubscriptionData": {
       "type": "object",
       "properties": {
-        "Endpoint": {
+        "ClientEndpoint": {
           "type": "array",
           "items": {
             "type": "string"
@@ -649,28 +660,46 @@ func init() {
         },
         "SubscriptionId": {
           "type": "integer"
+        },
+        "SubscriptionInstances": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/SubscriptionInstance"
+          }
         }
       }
     },
-    "SubscriptionDetails": {
+    "SubscriptionDetail": {
       "type": "object",
       "required": [
-        "EventTriggerList",
+        "RequestorId",
+        "InstanceId",
+        "EventTriggers",
         "ActionToBeSetupList"
       ],
       "properties": {
         "ActionToBeSetupList": {
           "$ref": "#/definitions/ActionsToBeSetup"
         },
-        "EventTriggerList": {
+        "EventTriggers": {
           "$ref": "#/definitions/EventTriggerDefinition"
+        },
+        "InstanceId": {
+          "type": "integer",
+          "maximum": 65535,
+          "minimum": 0
+        },
+        "RequestorId": {
+          "type": "integer",
+          "maximum": 65535,
+          "minimum": 0
         }
       }
     },
     "SubscriptionDetailsList": {
       "type": "array",
       "items": {
-        "$ref": "#/definitions/SubscriptionDetails"
+        "$ref": "#/definitions/SubscriptionDetail"
       }
     },
     "SubscriptionInstance": {
@@ -709,8 +738,6 @@ func init() {
       "required": [
         "ClientEndpoint",
         "Meid",
-        "RequestorId",
-        "InstanceId",
         "RANFunctionID",
         "SubscriptionDetails"
       ],
@@ -719,23 +746,24 @@ func init() {
           "description": "xApp service address and port",
           "type": "object",
           "properties": {
-            "Port": {
-              "description": "xApp service address port",
+            "HTTPPort": {
+              "description": "xApp HTTP service address port",
               "type": "integer",
               "maximum": 65535,
               "minimum": 0
             },
-            "ServiceName": {
+            "Host": {
               "description": "xApp service address name like 'service-ricxapp-xappname-http.ricxapp'",
               "type": "string"
+            },
+            "RMRPort": {
+              "description": "xApp RMR service address port",
+              "type": "integer",
+              "maximum": 65535,
+              "minimum": 0
             }
           }
         },
-        "InstanceId": {
-          "type": "integer",
-          "maximum": 65535,
-          "minimum": 0
-        },
         "Meid": {
           "type": "string"
         },
@@ -744,11 +772,6 @@ func init() {
           "maximum": 4095,
           "minimum": 0
         },
-        "RequestorId": {
-          "type": "integer",
-          "maximum": 65535,
-          "minimum": 0
-        },
         "SubscriptionDetails": {
           "$ref": "#/definitions/SubscriptionDetailsList"
         }
index 73cb4a2..a7e7a3c 100755 (executable)
@@ -154,7 +154,7 @@ func (r *Subscriber) Notify(resp *models.SubscriptionResponse, ep models.Subscri
                return err
        }
 
-       clientUrl := fmt.Sprintf("http://%s:%d%s", ep.ServiceName, ep.Port, r.clientUrl)
+       clientUrl := fmt.Sprintf("http://%s:%d%s", ep.Host, *ep.HTTPPort, r.clientUrl)
 
        retries := viper.GetInt("subscription.retryCount")
        if retries == 0 {
index dc0a171..72c5bc7 100755 (executable)
@@ -26,12 +26,13 @@ var (
        actionType = "report"
        subsequestActioType = "continue"
        timeToWait = "w10ms"
-       port = int64(4560)
-       clientEndpoint = clientmodel.SubscriptionParamsClientEndpoint{ServiceName: "localhost", Port: &port}
        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
@@ -49,7 +50,7 @@ func TestSubscriptionQueryHandling(t *testing.T) {
        assert.Equal(t, err, nil)
        assert.Equal(t, resp[0].SubscriptionID, int64(11))
        assert.Equal(t, resp[0].Meid, "Test-Gnb")
-       assert.Equal(t, resp[0].Endpoint, []string{"127.0.0.1:4056"})
+       assert.Equal(t, resp[0].ClientEndpoint, []string{"127.0.0.1:4056"})
 }
 
 func TestSubscriptionHandling(t *testing.T) {
@@ -57,11 +58,11 @@ func TestSubscriptionHandling(t *testing.T) {
                Meid:           &meid,
                RANFunctionID:  &funId,
                ClientEndpoint: &clientEndpoint,
-               RequestorID: &reqId,
-               InstanceID: &seqId,
                SubscriptionDetails: clientmodel.SubscriptionDetailsList{
-                       &clientmodel.SubscriptionDetails{
-                               EventTriggerList: &clientmodel.EventTriggerDefinition{
+                       &clientmodel.SubscriptionDetail{
+                               RequestorID: &reqId,
+                               InstanceID: &seqId,
+                               EventTriggers: &clientmodel.EventTriggerDefinition{
                                        OctetString: "1234",
                                },
                                ActionToBeSetupList: clientmodel.ActionsToBeSetup{
@@ -114,7 +115,7 @@ func processSubscriptions(subscriptionId string) {
        }
 
        // Notify the client: don't worry about errors ... Notify() will handle retries, etc.
-       Subscription.Notify(resp, models.SubscriptionParamsClientEndpoint{ServiceName: "localhost", Port: &port})
+       Subscription.Notify(resp, models.SubscriptionParamsClientEndpoint{Host: "localhost", HTTPPort: &hPort, RMRPort: &rPort})
 }
 
 func subscriptionHandler(params interface{}) (*models.SubscriptionResponse, error) {
@@ -122,12 +123,13 @@ func subscriptionHandler(params interface{}) (*models.SubscriptionResponse, erro
 
        assert.Equal(suite, meid, *p.Meid)
        assert.Equal(suite, funId, *p.RANFunctionID)
-       assert.Equal(suite, clientEndpoint.ServiceName, p.ClientEndpoint.ServiceName)
-       assert.Equal(suite, clientEndpoint.Port, p.ClientEndpoint.Port)
-       assert.Equal(suite, reqId, *p.RequestorID)
-       assert.Equal(suite, seqId, *p.InstanceID)
+       assert.Equal(suite, clientEndpoint.Host, p.ClientEndpoint.Host)
+       assert.Equal(suite, clientEndpoint.HTTPPort, p.ClientEndpoint.HTTPPort)
+       assert.Equal(suite, clientEndpoint.RMRPort, p.ClientEndpoint.RMRPort)
 
-       assert.Equal(suite, "1234", p.SubscriptionDetails[0].EventTriggerList.OctetString)
+       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, actionId, *p.SubscriptionDetails[0].ActionToBeSetupList[0].ActionID)
        assert.Equal(suite, actionType, *p.SubscriptionDetails[0].ActionToBeSetupList[0].ActionType)
 
@@ -136,7 +138,7 @@ func subscriptionHandler(params interface{}) (*models.SubscriptionResponse, erro
        assert.Equal(suite, "5678", p.SubscriptionDetails[0].ActionToBeSetupList[0].ActionDefinition.OctetString)
 
        // Generate a unique subscriptionId
-       subscriptionId = fmt.Sprintf("%s-%s", meid, clientEndpoint.ServiceName)
+       subscriptionId = fmt.Sprintf("%s-%s", meid, clientEndpoint.Host)
 
        // Process subscriptions on the background
        go processSubscriptions(subscriptionId)
@@ -152,7 +154,7 @@ func queryHandler() (models.SubscriptionList, error) {
                &models.SubscriptionData{
                        SubscriptionID: 11,
                        Meid:           "Test-Gnb",
-                       Endpoint:       []string{"127.0.0.1:4056"},
+                       ClientEndpoint: []string{"127.0.0.1:4056"},
                },
        }
        return resp, nil
index ab5aeb6..f778265 100755 (executable)
@@ -251,7 +251,7 @@ func init() {
        Resource = NewRouter()
        Config = Configurator{}
        Metric = NewMetrics(viper.GetString("metrics.url"), viper.GetString("metrics.namespace"), Resource.router)
-       Subscription = NewSubscriber(viper.GetString("subscription.host"), viper.GetInt("subscription.timeout"))
+       Subscription = NewSubscriber(viper.GetString("controls.subscription.host"), viper.GetInt("controls.subscription.timeout"))
        Sdl = NewSDLClient(viper.GetString("controls.db.namespace"))
        Rnib = NewRNIBClient()
        Util = NewUtils()