var msgImpl *rmrCgo.Context
rmrMessenger := msgImpl.Init("tcp:"+strconv.Itoa(config.Rmr.Port), config.Rmr.MaxMsgSize, 0, logger)
rmrSender := rmrsender.NewRmrSender(logger, rmrMessenger)
- kubernetes := managers.NewKubernetesManager(logger, config)
- ranSetupManager := managers.NewRanSetupManager(logger, rmrSender, rnibDataService)
e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, logger)
routingManagerClient := clients.NewRoutingManagerClient(logger, config, clients.NewHttpClient())
ranListManager := managers.NewRanListManager(logger)
ranAlarmService := services.NewRanAlarmService(logger, config)
ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService, ranListManager, ranAlarmService)
e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManager, routingManagerClient, ranConnectStatusChangeManager)
- e2tShutdownManager := managers.NewE2TShutdownManager(logger, config, rnibDataService, e2tInstancesManager, e2tAssociationManager, kubernetes, ranConnectStatusChangeManager)
+ e2tShutdownManager := managers.NewE2TShutdownManager(logger, config, rnibDataService, e2tInstancesManager, e2tAssociationManager, ranConnectStatusChangeManager)
e2tKeepAliveWorker := managers.NewE2TKeepAliveWorker(logger, rmrSender, e2tInstancesManager, e2tShutdownManager, config)
rmrNotificationHandlerProvider := rmrmsghandlerprovider.NewNotificationHandlerProvider()
rmrNotificationHandlerProvider.Init(logger, config, rnibDataService, rmrSender, e2tInstancesManager, routingManagerClient, e2tAssociationManager, ranConnectStatusChangeManager)
notificationManager := notificationmanager.NewNotificationManager(logger, rmrNotificationHandlerProvider)
rmrReceiver := rmrreceiver.NewRmrReceiver(logger, rmrMessenger, notificationManager)
-
+ nodebValidator := managers.NewNodebValidator()
e2tInstancesManager.ResetKeepAliveTimestampsForAllE2TInstances()
defer rmrMessenger.Close()
go rmrReceiver.ListenAndHandle()
go e2tKeepAliveWorker.Execute()
- httpMsgHandlerProvider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(logger, rmrSender, config, rnibDataService, ranSetupManager, e2tInstancesManager, e2tAssociationManager, routingManagerClient, ranConnectStatusChangeManager)
+ httpMsgHandlerProvider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(logger, rmrSender, config, rnibDataService, e2tInstancesManager, routingManagerClient, ranConnectStatusChangeManager, nodebValidator)
rootController := controllers.NewRootController(rnibDataService)
nodebController := controllers.NewNodebController(logger, httpMsgHandlerProvider)
e2tController := controllers.NewE2TController(logger, httpMsgHandlerProvider)
# The Jenkins job requires a tag to build the Docker image.
# Global-JJB script assumes this file is in the repo root.
---
-tag: 5.2.6
+tag: 5.2.7
ranListManager := managers.NewRanListManager(log)
ranAlarmService := services.NewRanAlarmService(log, config)
ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(log, rnibDataService,ranListManager, ranAlarmService)
+ nodebValidator := managers.NewNodebValidator()
- handlerProvider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(log, nil, config, rnibDataService, nil, e2tInstancesManager, &managers.E2TAssociationManager{}, nil, ranConnectStatusChangeManager)
+ handlerProvider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(log, nil, config, rnibDataService, e2tInstancesManager, nil, ranConnectStatusChangeManager, nodebValidator)
controller := NewE2TController(log, handlerProvider)
return controller, readerMock
}
rnibDataService := services.NewRnibDataService(log, config, readerMock, writerMock)
rmrSender := getRmrSender(rmrMessengerMock, log)
- ranSetupManager := managers.NewRanSetupManager(log, rmrSender, rnibDataService)
e2tInstancesManager := &mocks.E2TInstancesManagerMock{}
httpClientMock := &mocks.HttpClientMock{}
rmClient := clients.NewRoutingManagerClient(log, config, httpClientMock)
ranListManager := &mocks.RanListManagerMock{}
ranAlarmService := &mocks.RanAlarmServiceMock{}
ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(log, rnibDataService, ranListManager, ranAlarmService)
-
- e2tAssociationManager := managers.NewE2TAssociationManager(log, rnibDataService, e2tInstancesManager, rmClient, ranConnectStatusChangeManager)
- handlerProvider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(log, rmrSender, config, rnibDataService, ranSetupManager, e2tInstancesManager, e2tAssociationManager, rmClient, ranConnectStatusChangeManager)
+ nodebValidator := managers.NewNodebValidator()
+ handlerProvider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(log, rmrSender, config, rnibDataService, e2tInstancesManager, rmClient, ranConnectStatusChangeManager, nodebValidator)
controller := NewNodebController(log, handlerProvider)
return controller, readerMock, writerMock, rmrMessengerMock, e2tInstancesManager
}
google.golang.org/appengine v1.6.1 // indirect
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
gopkg.in/yaml.v2 v2.2.8
- k8s.io/client-go v0.17.0
)
replace gerrit.o-ran-sc.org/r/ric-plt/sdlgo => gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.5.2
import (
"e2mgr/e2managererrors"
"e2mgr/logger"
+ "e2mgr/managers"
"e2mgr/models"
"e2mgr/services"
"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
type AddEnbRequestHandler struct {
logger *logger.Logger
+ nodebValidator *managers.NodebValidator
rNibDataService services.RNibDataService
}
-func NewAddEnbRequestHandler(logger *logger.Logger, rNibDataService services.RNibDataService) *AddEnbRequestHandler {
+func NewAddEnbRequestHandler(logger *logger.Logger, rNibDataService services.RNibDataService, nodebValidator *managers.NodebValidator) *AddEnbRequestHandler {
return &AddEnbRequestHandler{
logger: logger,
+ nodebValidator: nodebValidator,
rNibDataService: rNibDataService,
}
}
return errors.New("enb")
}
- if err := isEnbValid(addEnbRequest.Enb); err != nil {
+ if err := h.nodebValidator.IsEnbValid(addEnbRequest.Enb); err != nil {
return err
}
return nil
}
-
-func isEnbValid(enb *entities.Enb) error {
- if enb.EnbType == entities.EnbType_UNKNOWN_ENB_TYPE {
- return errors.New("enb.enbType")
- }
-
- if enb.ServedCells == nil || len(enb.ServedCells) == 0 {
- return errors.New("enb.servedCells")
- }
-
- for _, servedCell := range enb.ServedCells {
- err := isServedCellValid(servedCell)
-
- if err != nil {
- return err
- }
- }
-
- return nil
-}
-
-func isServedCellValid(servedCell *entities.ServedCellInfo) error {
-
- if servedCell.CellId == "" {
- return errors.New("servedCell.cellId")
- }
-
- if servedCell.EutraMode == entities.Eutra_UNKNOWN {
- return errors.New("servedCell.eutraMode")
- }
-
- if servedCell.Tac == "" {
- return errors.New("servedCell.tac")
- }
-
- if servedCell.BroadcastPlmns == nil || len(servedCell.BroadcastPlmns) == 0 {
- return errors.New("servedCell.broadcastPlmns")
- }
-
- if servedCell.ChoiceEutraMode == nil {
- return errors.New("servedCell.choiceEutraMode")
- }
-
- return isChoiceEutraModeValid(servedCell.ChoiceEutraMode)
-}
-
-func isChoiceEutraModeValid(choiceEutraMode *entities.ChoiceEUTRAMode) error {
- if choiceEutraMode.Fdd != nil {
- return isFddInfoValid(choiceEutraMode.Fdd)
- }
-
- if choiceEutraMode.Tdd != nil {
- return isTddInfoValid(choiceEutraMode.Tdd)
- }
-
- return errors.New("servedCell.fdd / servedCell.tdd")
-}
-
-func isTddInfoValid(tdd *entities.TddInfo) error {
- return nil
-}
-
-func isFddInfoValid(fdd *entities.FddInfo) error {
- return nil
-}
+++ /dev/null
-apiVersion: v1
-kind: Config
-users:
-- name: someuser
- user:
- token: sometoken
-clusters:
-- cluster:
- certificate-authority-data: somedata
- server: 10.0.2.15:59009
- name: self-hosted-cluster
-contexts:
-- context:
- cluster: self-hosted-cluster
- user: svcs-acct-dply
- name: svcs-acct-context
-current-context: svcs-acct-context
rnibDataService services.RNibDataService
e2TInstancesManager IE2TInstancesManager
e2tAssociationManager *E2TAssociationManager
- kubernetesManager *KubernetesManager
ranConnectStatusChangeManager IRanConnectStatusChangeManager
}
-func NewE2TShutdownManager(logger *logger.Logger, config *configuration.Configuration, rnibDataService services.RNibDataService, e2TInstancesManager IE2TInstancesManager, e2tAssociationManager *E2TAssociationManager, kubernetes *KubernetesManager, ranConnectStatusChangeManager IRanConnectStatusChangeManager) *E2TShutdownManager {
+func NewE2TShutdownManager(logger *logger.Logger, config *configuration.Configuration, rnibDataService services.RNibDataService, e2TInstancesManager IE2TInstancesManager, e2tAssociationManager *E2TAssociationManager, ranConnectStatusChangeManager IRanConnectStatusChangeManager) *E2TShutdownManager {
return &E2TShutdownManager{
logger: logger,
config: config,
rnibDataService: rnibDataService,
e2TInstancesManager: e2TInstancesManager,
e2tAssociationManager: e2tAssociationManager,
- kubernetesManager: kubernetes,
ranConnectStatusChangeManager: ranConnectStatusChangeManager,
}
}
return nil
}
- //go m.kubernetesManager.DeletePod(e2tInstance.PodName)
-
err := m.markE2tInstanceToBeDeleted(e2tInstance)
if err != nil {
m.logger.Errorf("#E2TShutdownManager.Shutdown - Failed to mark E2T %s as 'ToBeDeleted'.", e2tInstance.Address)
const E2TAddress3 = "10.10.2.17:9800"
-func initE2TShutdownManagerTest(t *testing.T) (*E2TShutdownManager, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.HttpClientMock, *KubernetesManager) {
+func initE2TShutdownManagerTest(t *testing.T) (*E2TShutdownManager, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.HttpClientMock) {
log := initLog(t)
config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3, E2TInstanceDeletionTimeoutMs: 15000, RnibWriter: configuration.RnibWriterConfig{StateChangeMessageChannel: "RAN_CONNECTION_STATUS_CHANGE"}}
ranAlarmService := services.NewRanAlarmService(log, config)
ranConnectStatusChangeManager := NewRanConnectStatusChangeManager(log, rnibDataService, ranListManager, ranAlarmService)
associationManager := NewE2TAssociationManager(log, rnibDataService, e2tInstancesManager, rmClient, ranConnectStatusChangeManager)
- //kubernetesManager := initKubernetesManagerTest(t)
+ shutdownManager := NewE2TShutdownManager(log, config, rnibDataService, e2tInstancesManager, associationManager, ranConnectStatusChangeManager)
- /*shutdownManager := NewE2TShutdownManager(log, config, rnibDataService, e2tInstancesManager, associationManager, kubernetesManager)
-
- return shutdownManager, readerMock, writerMock, httpClientMock, kubernetesManager*/
- shutdownManager := NewE2TShutdownManager(log, config, rnibDataService, e2tInstancesManager, associationManager, nil, ranConnectStatusChangeManager)
-
- return shutdownManager, readerMock, writerMock, httpClientMock, nil
+ return shutdownManager, readerMock, writerMock, httpClientMock
}
func TestShutdownSuccess1OutOf3Instances(t *testing.T) {
- shutdownManager, readerMock, writerMock, httpClientMock, _ := initE2TShutdownManagerTest(t)
+ shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t)
e2tInstance1 := entities.NewE2TInstance(E2TAddress, PodName)
e2tInstance1.State = entities.Active
}
func TestShutdownSuccess1InstanceWithoutRans(t *testing.T) {
- shutdownManager, readerMock, writerMock, httpClientMock, _ := initE2TShutdownManagerTest(t)
+ shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t)
e2tInstance1 := entities.NewE2TInstance(E2TAddress, PodName)
e2tInstance1.State = entities.Active
}
func TestShutdownSuccess1Instance2Rans(t *testing.T) {
- shutdownManager, readerMock, writerMock, httpClientMock, _ := initE2TShutdownManagerTest(t)
+ shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t)
e2tInstance1 := entities.NewE2TInstance(E2TAddress, PodName)
e2tInstance1.State = entities.Active
}
func TestShutdownE2tInstanceAlreadyBeingDeleted(t *testing.T) {
- shutdownManager, readerMock, writerMock, httpClientMock, _ := initE2TShutdownManagerTest(t)
+ shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t)
e2tInstance1 := entities.NewE2TInstance(E2TAddress, PodName)
e2tInstance1.State = entities.ToBeDeleted
}
func TestShutdownFailureMarkInstanceAsToBeDeleted(t *testing.T) {
- shutdownManager, readerMock, writerMock, httpClientMock, _ := initE2TShutdownManagerTest(t)
+ shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t)
e2tInstance1 := entities.NewE2TInstance(E2TAddress, PodName)
e2tInstance1.State = entities.Active
}
func TestShutdownFailureRoutingManagerError(t *testing.T) {
- shutdownManager, readerMock, writerMock, httpClientMock, _ := initE2TShutdownManagerTest(t)
+ shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t)
e2tInstance1 := entities.NewE2TInstance(E2TAddress, PodName)
e2tInstance1.State = entities.Active
}
func TestShutdownFailureInClearNodebsAssociation(t *testing.T) {
- shutdownManager, readerMock, writerMock, httpClientMock, _ := initE2TShutdownManagerTest(t)
+ shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t)
e2tInstance1 := entities.NewE2TInstance(E2TAddress, PodName)
e2tInstance1.State = entities.Active
}
func TestShutdownFailureInClearNodebsAssociation_UpdateConnectionStatus(t *testing.T) {
- shutdownManager, readerMock, writerMock, httpClientMock, _ := initE2TShutdownManagerTest(t)
+ shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t)
e2tInstance1 := entities.NewE2TInstance(E2TAddress, PodName)
e2tInstance1.State = entities.Active
}
func TestShutdownResourceNotFoundErrorInGetNodeb(t *testing.T) {
- shutdownManager, readerMock, writerMock, httpClientMock, _ := initE2TShutdownManagerTest(t)
+ shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t)
e2tInstance1 := entities.NewE2TInstance(E2TAddress, PodName)
e2tInstance1.State = entities.Active
}
func TestShutdownResourceGeneralErrorInGetNodeb(t *testing.T) {
- shutdownManager, readerMock, writerMock, httpClientMock, _ := initE2TShutdownManagerTest(t)
+ shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t)
e2tInstance1 := entities.NewE2TInstance(E2TAddress, PodName)
e2tInstance1.State = entities.Active
}
func TestShutdownFailureInRemoveE2TInstance(t *testing.T) {
- shutdownManager, readerMock, writerMock, httpClientMock, _ := initE2TShutdownManagerTest(t)
+ shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t)
e2tInstance1 := entities.NewE2TInstance(E2TAddress, PodName)
e2tInstance1.State = entities.Active
+++ /dev/null
-//
-// Copyright 2019 AT&T Intellectual Property
-// Copyright 2019 Nokia
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-
-// This source code is part of the near-RT RIC (RAN Intelligent Controller)
-// platform project (RICP).
-
-package managers
-
-import (
- "e2mgr/configuration"
- "e2mgr/logger"
- "k8s.io/client-go/kubernetes"
-)
-
-type KubernetesManager struct {
- Logger *logger.Logger
- ClientSet kubernetes.Interface
- Config *configuration.Configuration
-}
-
-func NewKubernetesManager(logger *logger.Logger, config *configuration.Configuration) *KubernetesManager {
- return &KubernetesManager{
- Logger: logger,
- //ClientSet: createClientSet(logger, config),
- Config: config,
- }
-}
-
-/*func createClientSet(logger *logger.Logger, config *configuration.Configuration) kubernetes.Interface {
-
- absConfigPath,err := filepath.Abs(config.Kubernetes.ConfigPath)
- if err != nil {
- logger.Errorf("#KubernetesManager.init - error: %s", err)
- return nil
- }
-
- kubernetesConfig, err := clientcmd.BuildConfigFromFlags("", absConfigPath)
- if err != nil {
- logger.Errorf("#KubernetesManager.init - error: %s", err)
- return nil
- }
-
- clientSet, err := kubernetes.NewForConfig(kubernetesConfig)
- if err != nil {
- logger.Errorf("#KubernetesManager.init - error: %s", err)
- return nil
- }
- return clientSet
-}*/
-
-/*func (km KubernetesManager) DeletePod(podName string) error {
- km.Logger.Infof("#KubernetesManager.DeletePod - POD name: %s ", podName)
-
- if km.ClientSet == nil {
- km.Logger.Errorf("#KubernetesManager.DeletePod - no kubernetesManager connection")
- return e2managererrors.NewInternalError()
- }
-
- if len(podName) == 0 {
- km.Logger.Warnf("#KubernetesManager.DeletePod - empty pod name")
- return e2managererrors.NewInternalError()
- }
-
- err := km.ClientSet.CoreV1().Pods(km.Config.Kubernetes.KubeNamespace).Delete(podName, &metaV1.DeleteOptions{})
-
- if err != nil {
- km.Logger.Errorf("#KubernetesManager.DeletePod - POD %s can't be deleted, error: %s", podName, err)
- return err
- }
-
- km.Logger.Infof("#KubernetesManager.DeletePod - POD %s was deleted", podName)
- return nil
-}*/
\ No newline at end of file
+++ /dev/null
-//
-// Copyright 2019 AT&T Intellectual Property
-// Copyright 2019 Nokia
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-
-// This source code is part of the near-RT RIC (RAN Intelligent Controller)
-// platform project (RICP).
-
-package managers
-/*
-
-import (
- "e2mgr/configuration"
- "e2mgr/logger"
- "github.com/stretchr/testify/assert"
- "k8s.io/api/core/v1"
- metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1"
- "k8s.io/apimachinery/pkg/runtime"
- "k8s.io/client-go/kubernetes/fake"
- "testing"
-)
-
-type TestStruct struct {
- description string
- namespace string
- expected []string
- objs []runtime.Object
-}
-
-func initKubernetesManagerTest(t *testing.T) *KubernetesManager {
- logger, err := logger.InitLogger(logger.DebugLevel)
- if err != nil {
- t.Errorf("#... - failed to initialize logger, error: %s", err)
- }
- config := &configuration.Configuration{}
- config.Kubernetes.KubeNamespace = "oran"
- config.Kubernetes.ConfigPath = "somePath"
-
- kubernetesManager := NewKubernetesManager(logger, config)
-
- return kubernetesManager
-}
-
-func TestDelete_NoPodName(t *testing.T) {
- test := TestStruct{
- description: "2 namespace, 2 pods in oran",
- namespace: "oran",
- objs: []runtime.Object{pod("oran", "POD_Test_1"), pod("oran", "POD_Test_2"), pod("some-namespace", "POD_Test_1")},
- }
-
- kubernetesManager := initKubernetesManagerTest(t)
-
- t.Run(test.description, func(t *testing.T) {
- kubernetesManager.ClientSet = fake.NewSimpleClientset(test.objs...)
-
- err := kubernetesManager.DeletePod("")
- assert.NotNil(t, err)
- })
-}
-
-func TestDelete_NoPods(t *testing.T) {
- test := TestStruct{
- description: "no pods",
- namespace: "oran",
- expected: nil,
- objs: nil,
- }
-
- kubernetesManager := initKubernetesManagerTest(t)
-
- t.Run(test.description, func(t *testing.T) {
- kubernetesManager.ClientSet = fake.NewSimpleClientset(test.objs...)
-
- err := kubernetesManager.DeletePod("POD_Test")
- assert.NotNil(t, err)
- })
-}
-
-func TestDelete_PodExists(t *testing.T) {
- test := TestStruct{
- description: "2 namespace, 2 pods in oran",
- namespace: "oran",
- objs: []runtime.Object{pod("oran", "POD_Test_1"), pod("oran", "POD_Test_2"), pod("some-namespace", "POD_Test_1")},
- }
-
- kubernetesManager := initKubernetesManagerTest(t)
-
- t.Run(test.description, func(t *testing.T) {
- kubernetesManager.ClientSet = fake.NewSimpleClientset(test.objs...)
-
- err := kubernetesManager.DeletePod("POD_Test_1")
- assert.Nil(t, err)
- })
-}
-
-func TestDelete_NoPodInNamespace(t *testing.T) {
- test := TestStruct{
- description: "2 namespace, 2 pods in oran",
- namespace: "oran",
- objs: []runtime.Object{pod("oran", "POD_Test_1"), pod("oran", "POD_Test_2"), pod("some-namespace", "POD_Test")},
- }
-
- kubernetesManager := initKubernetesManagerTest(t)
-
- t.Run(test.description, func(t *testing.T) {
- kubernetesManager.ClientSet = fake.NewSimpleClientset(test.objs...)
-
- err := kubernetesManager.DeletePod("POD_Test")
- assert.NotNil(t, err)
- })
-}
-
-func TestDelete_NoNamespace(t *testing.T) {
- test := TestStruct{
- description: "No oran namespace",
- namespace: "oran",
- objs: []runtime.Object{pod("some-namespace", "POD_Test_1"), pod("some-namespace", "POD_Test_2"), pod("some-namespace", "POD_Test")},
- }
-
- kubernetesManager := initKubernetesManagerTest(t)
-
- t.Run(test.description, func(t *testing.T) {
- kubernetesManager.ClientSet = fake.NewSimpleClientset(test.objs...)
-
- err := kubernetesManager.DeletePod("POD_Test")
- assert.NotNil(t, err)
- })
-}
-
-func pod(namespace, image string) *v1.Pod {
-
- return &v1.Pod{
- ObjectMeta: metaV1.ObjectMeta{
- Name: image,
- Namespace: namespace,
- Annotations: map[string]string{},
- },
- }
-}
-*/
\ No newline at end of file
--- /dev/null
+//
+// Copyright 2019 AT&T Intellectual Property
+// Copyright 2019 Nokia
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// This source code is part of the near-RT RIC (RAN Intelligent Controller)
+// platform project (RICP).
+
+package managers
+
+import (
+ "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
+ "github.com/pkg/errors"
+)
+
+type NodebValidator struct {
+}
+
+func NewNodebValidator() *NodebValidator {
+ return &NodebValidator{}
+}
+
+func (h *NodebValidator) IsEnbValid(enb *entities.Enb) error {
+ if enb.EnbType == entities.EnbType_UNKNOWN_ENB_TYPE {
+ return errors.New("enb.enbType")
+ }
+
+ if enb.ServedCells == nil || len(enb.ServedCells) == 0 {
+ return errors.New("enb.servedCells")
+ }
+
+ for _, servedCell := range enb.ServedCells {
+ err := isServedCellValid(servedCell)
+
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+func isServedCellValid(servedCell *entities.ServedCellInfo) error {
+
+ if servedCell.CellId == "" {
+ return errors.New("servedCell.cellId")
+ }
+
+ if servedCell.EutraMode == entities.Eutra_UNKNOWN {
+ return errors.New("servedCell.eutraMode")
+ }
+
+ if servedCell.Tac == "" {
+ return errors.New("servedCell.tac")
+ }
+
+ if servedCell.BroadcastPlmns == nil || len(servedCell.BroadcastPlmns) == 0 {
+ return errors.New("servedCell.broadcastPlmns")
+ }
+
+ if servedCell.ChoiceEutraMode == nil {
+ return errors.New("servedCell.choiceEutraMode")
+ }
+
+ return isChoiceEutraModeValid(servedCell.ChoiceEutraMode)
+}
+
+func isChoiceEutraModeValid(choiceEutraMode *entities.ChoiceEUTRAMode) error {
+ if choiceEutraMode.Fdd != nil {
+ return isFddInfoValid(choiceEutraMode.Fdd)
+ }
+
+ if choiceEutraMode.Tdd != nil {
+ return isTddInfoValid(choiceEutraMode.Tdd)
+ }
+
+ return errors.New("servedCell.fdd / servedCell.tdd")
+}
+
+func isTddInfoValid(tdd *entities.TddInfo) error {
+ return nil
+}
+
+func isFddInfoValid(fdd *entities.FddInfo) error {
+ return nil
+}
ranConnectStatusChangeManager managers.IRanConnectStatusChangeManager
}
-func NewIncomingRequestHandlerProvider(logger *logger.Logger, rmrSender *rmrsender.RmrSender, config *configuration.Configuration, rNibDataService services.RNibDataService, ranSetupManager *managers.RanSetupManager, e2tInstancesManager managers.IE2TInstancesManager, e2tAssociationManager *managers.E2TAssociationManager, rmClient clients.IRoutingManagerClient, ranConnectStatusChangeManager managers.IRanConnectStatusChangeManager) *IncomingRequestHandlerProvider {
+func NewIncomingRequestHandlerProvider(logger *logger.Logger, rmrSender *rmrsender.RmrSender, config *configuration.Configuration, rNibDataService services.RNibDataService, e2tInstancesManager managers.IE2TInstancesManager, rmClient clients.IRoutingManagerClient, ranConnectStatusChangeManager managers.IRanConnectStatusChangeManager, nodebValidator *managers.NodebValidator) *IncomingRequestHandlerProvider {
return &IncomingRequestHandlerProvider{
- requestMap: initRequestHandlerMap(logger, rmrSender, config, rNibDataService, e2tInstancesManager, rmClient, ranConnectStatusChangeManager),
+ requestMap: initRequestHandlerMap(logger, rmrSender, config, rNibDataService, e2tInstancesManager, rmClient, ranConnectStatusChangeManager, nodebValidator),
logger: logger,
ranConnectStatusChangeManager: ranConnectStatusChangeManager,
}
}
-func initRequestHandlerMap(logger *logger.Logger, rmrSender *rmrsender.RmrSender, config *configuration.Configuration, rNibDataService services.RNibDataService, e2tInstancesManager managers.IE2TInstancesManager, rmClient clients.IRoutingManagerClient, ranConnectStatusChangeManager managers.IRanConnectStatusChangeManager) map[IncomingRequest]httpmsghandlers.RequestHandler {
+func initRequestHandlerMap(logger *logger.Logger, rmrSender *rmrsender.RmrSender, config *configuration.Configuration, rNibDataService services.RNibDataService, e2tInstancesManager managers.IE2TInstancesManager, rmClient clients.IRoutingManagerClient, ranConnectStatusChangeManager managers.IRanConnectStatusChangeManager, nodebValidator *managers.NodebValidator) map[IncomingRequest]httpmsghandlers.RequestHandler {
return map[IncomingRequest]httpmsghandlers.RequestHandler{
ShutdownRequest: httpmsghandlers.NewDeleteAllRequestHandler(logger, rmrSender, config, rNibDataService, e2tInstancesManager, rmClient, ranConnectStatusChangeManager),
GetNodebIdListRequest: httpmsghandlers.NewGetNodebIdListRequestHandler(logger, rNibDataService),
GetE2TInstancesRequest: httpmsghandlers.NewGetE2TInstancesRequestHandler(logger, e2tInstancesManager),
UpdateGnbRequest: httpmsghandlers.NewUpdateGnbRequestHandler(logger, rNibDataService),
- AddEnbRequest: httpmsghandlers.NewAddEnbRequestHandler(logger, rNibDataService),
+ AddEnbRequest: httpmsghandlers.NewAddEnbRequestHandler(logger, rNibDataService, nodebValidator),
}
}
writerMock := &mocks.RnibWriterMock{}
rnibDataService := services.NewRnibDataService(log, config, readerMock, writerMock)
rmrSender := getRmrSender(rmrMessengerMock, log)
- ranSetupManager := managers.NewRanSetupManager(log, rmrSender, rnibDataService)
e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, log)
httpClientMock := &mocks.HttpClientMock{}
rmClient := clients.NewRoutingManagerClient(log, config, httpClientMock)
ranListManager := managers.NewRanListManager(log)
ranAlarmService := services.NewRanAlarmService(log, config)
ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(log, rnibDataService,ranListManager, ranAlarmService)
- e2tAssociationManager := managers.NewE2TAssociationManager(log, rnibDataService, e2tInstancesManager, rmClient, ranConnectStatusChangeManager)
- return NewIncomingRequestHandlerProvider(log, rmrSender, configuration.ParseConfiguration(), rnibDataService, ranSetupManager, e2tInstancesManager, e2tAssociationManager, rmClient, ranConnectStatusChangeManager)
+ nodebValidator := managers.NewNodebValidator()
+ return NewIncomingRequestHandlerProvider(log, rmrSender, configuration.ParseConfiguration(), rnibDataService, e2tInstancesManager, rmClient, ranConnectStatusChangeManager, nodebValidator)
}
func TestNewIncomingRequestHandlerProvider(t *testing.T) {