From 9ea6c7860300c299b9fe68caaf8aff61b3ec71d2 Mon Sep 17 00:00:00 2001 From: Mohamed Abukar Date: Wed, 7 Apr 2021 21:18:55 +0300 Subject: [PATCH] Further enhancements Change-Id: I6584ca5e8c33b105ef0e99fe737d6da3b3e08073 Signed-off-by: Mohamed Abukar --- api/xapp_rest_api.yaml | 49 +++++---- config/config-file.json | 17 +-- pkg/clientmodel/subscription_data.go | 44 +++++++- pkg/clientmodel/subscription_detail.go | 151 +++++++++++++++++++++++++++ pkg/clientmodel/subscription_details_list.go | 2 +- pkg/clientmodel/subscription_params.go | 96 ++++++----------- pkg/models/subscription_data.go | 44 +++++++- pkg/models/subscription_detail.go | 151 +++++++++++++++++++++++++++ pkg/models/subscription_details_list.go | 2 +- pkg/models/subscription_params.go | 96 ++++++----------- pkg/restapi/embedded_spec.go | 99 +++++++++++------- pkg/xapp/subscription.go | 2 +- pkg/xapp/subscription_test.go | 32 +++--- pkg/xapp/xapp.go | 2 +- 14 files changed, 568 insertions(+), 219 deletions(-) create mode 100644 pkg/clientmodel/subscription_detail.go create mode 100644 pkg/models/subscription_detail.go diff --git a/api/xapp_rest_api.yaml b/api/xapp_rest_api.yaml index 74db6b9..8554ca2 100755 --- a/api/xapp_rest_api.yaml +++ b/api/xapp_rest_api.yaml @@ -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 diff --git a/config/config-file.json b/config/config-file.json index 08a204e..70fd3ae 100755 --- a/config/config-file.json +++ b/config/config-file.json @@ -67,13 +67,10 @@ "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 }, @@ -81,12 +78,6 @@ "url": "/ric/v1/metrics", "namespace": "ricxapp" }, - "subscription": { - "host": "localhost:8088", - "timeout": 2, - "retryCount": 10, - "retryDelay": 5 - }, "faults": {}, "measurements": [] } diff --git a/pkg/clientmodel/subscription_data.go b/pkg/clientmodel/subscription_data.go index 8d22352..deeddca 100644 --- a/pkg/clientmodel/subscription_data.go +++ b/pkg/clientmodel/subscription_data.go @@ -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 index 0000000..f7a7f1d --- /dev/null +++ b/pkg/clientmodel/subscription_detail.go @@ -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 +} diff --git a/pkg/clientmodel/subscription_details_list.go b/pkg/clientmodel/subscription_details_list.go index 450e08f..fbb3fa7 100644 --- a/pkg/clientmodel/subscription_details_list.go +++ b/pkg/clientmodel/subscription_details_list.go @@ -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 { diff --git a/pkg/clientmodel/subscription_params.go b/pkg/clientmodel/subscription_params.go index eb1d875..68e3072 100644 --- a/pkg/clientmodel/subscription_params.go +++ b/pkg/clientmodel/subscription_params.go @@ -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 } diff --git a/pkg/models/subscription_data.go b/pkg/models/subscription_data.go index a297e62..5d665c0 100644 --- a/pkg/models/subscription_data.go +++ b/pkg/models/subscription_data.go @@ -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 index 0000000..c592c53 --- /dev/null +++ b/pkg/models/subscription_detail.go @@ -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 +} diff --git a/pkg/models/subscription_details_list.go b/pkg/models/subscription_details_list.go index 4387022..583da99 100644 --- a/pkg/models/subscription_details_list.go +++ b/pkg/models/subscription_details_list.go @@ -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 { diff --git a/pkg/models/subscription_params.go b/pkg/models/subscription_params.go index eb2d171..dc57dee 100644 --- a/pkg/models/subscription_params.go +++ b/pkg/models/subscription_params.go @@ -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 } diff --git a/pkg/restapi/embedded_spec.go b/pkg/restapi/embedded_spec.go index 5fcc66f..b031520 100644 --- a/pkg/restapi/embedded_spec.go +++ b/pkg/restapi/embedded_spec.go @@ -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" } diff --git a/pkg/xapp/subscription.go b/pkg/xapp/subscription.go index 73cb4a2..a7e7a3c 100755 --- a/pkg/xapp/subscription.go +++ b/pkg/xapp/subscription.go @@ -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 { diff --git a/pkg/xapp/subscription_test.go b/pkg/xapp/subscription_test.go index dc0a171..72c5bc7 100755 --- a/pkg/xapp/subscription_test.go +++ b/pkg/xapp/subscription_test.go @@ -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 diff --git a/pkg/xapp/xapp.go b/pkg/xapp/xapp.go index ab5aeb6..f778265 100755 --- a/pkg/xapp/xapp.go +++ b/pkg/xapp/xapp.go @@ -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() -- 2.16.6