X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=E2Manager%2Fmanagers%2Fe2t_shutdown_manager_test.go;h=eaceeb56870999a5f0a8d5156b7a29c19cf06586;hb=refs%2Fchanges%2F62%2F4162%2F1;hp=570cf62fab96001b308f6e665bb63959a67d57c2;hpb=011bb9161ca8e7ad0d0cf282b818672a88a5dfbf;p=ric-plt%2Fe2mgr.git diff --git a/E2Manager/managers/e2t_shutdown_manager_test.go b/E2Manager/managers/e2t_shutdown_manager_test.go index 570cf62..eaceeb5 100644 --- a/E2Manager/managers/e2t_shutdown_manager_test.go +++ b/E2Manager/managers/e2t_shutdown_manager_test.go @@ -35,6 +35,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "io/ioutil" + //"k8s.io/apimachinery/pkg/runtime" + //"k8s.io/client-go/kubernetes/fake" "net/http" "testing" "time" @@ -42,7 +44,7 @@ import ( const E2TAddress3 = "10.10.2.17:9800" -func initE2TShutdownManagerTest(t *testing.T) (*E2TShutdownManager, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.HttpClientMock) { +func initE2TShutdownManagerTest(t *testing.T) (*E2TShutdownManager, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.HttpClientMock, *KubernetesManager) { log := initLog(t) config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3, E2TInstanceDeletionTimeoutMs: 15000} @@ -53,23 +55,31 @@ func initE2TShutdownManagerTest(t *testing.T) (*E2TShutdownManager, *mocks.RnibR e2tInstancesManager := NewE2TInstancesManager(rnibDataService, log) httpClientMock := &mocks.HttpClientMock{} rmClient := clients.NewRoutingManagerClient(log, config, httpClientMock) - associationManager := NewE2TAssociationManager(log, rnibDataService, e2tInstancesManager, rmClient) - shutdownManager := NewE2TShutdownManager(log, config, rnibDataService, e2tInstancesManager, associationManager) + ranListManager := NewRanListManager(log) + ranAlarmService := services.NewRanAlarmService(log, config) + ranConnectStatusChangeManager := NewRanConnectStatusChangeManager(log, rnibDataService,ranListManager, ranAlarmService) + associationManager := NewE2TAssociationManager(log, rnibDataService, e2tInstancesManager, rmClient, ranConnectStatusChangeManager) + //kubernetesManager := initKubernetesManagerTest(t) - return shutdownManager, readerMock, writerMock, httpClientMock + /*shutdownManager := NewE2TShutdownManager(log, config, rnibDataService, e2tInstancesManager, associationManager, kubernetesManager) + + return shutdownManager, readerMock, writerMock, httpClientMock, kubernetesManager*/ + shutdownManager := NewE2TShutdownManager(log, config, rnibDataService, e2tInstancesManager, associationManager, nil) + + return shutdownManager, readerMock, writerMock, httpClientMock, nil } func TestShutdownSuccess1OutOf3Instances(t *testing.T) { - shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t) + shutdownManager, readerMock, writerMock, httpClientMock,_ := initE2TShutdownManagerTest(t) - e2tInstance1 := entities.NewE2TInstance(E2TAddress) + e2tInstance1 := entities.NewE2TInstance(E2TAddress, PodName) e2tInstance1.State = entities.Active e2tInstance1.AssociatedRanList = []string{"test1", "test2", "test5"} - e2tInstance2 := entities.NewE2TInstance(E2TAddress2) + e2tInstance2 := entities.NewE2TInstance(E2TAddress2, PodName) e2tInstance2.State = entities.Active e2tInstance2.AssociatedRanList = []string{"test3"} - e2tInstance3 := entities.NewE2TInstance(E2TAddress3) + e2tInstance3 := entities.NewE2TInstance(E2TAddress3, PodName) e2tInstance3.State = entities.Active e2tInstance3.AssociatedRanList = []string{"test4"} writerMock.On("SaveE2TInstance", mock.MatchedBy(func(e2tInstance *entities.E2TInstance) bool { return e2tInstance.Address == E2TAddress && e2tInstance.State == entities.ToBeDeleted })).Return(nil) @@ -115,9 +125,9 @@ func TestShutdownSuccess1OutOf3Instances(t *testing.T) { } func TestShutdownSuccess1InstanceWithoutRans(t *testing.T) { - shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t) + shutdownManager, readerMock, writerMock, httpClientMock,_ := initE2TShutdownManagerTest(t) - e2tInstance1 := entities.NewE2TInstance(E2TAddress) + e2tInstance1 := entities.NewE2TInstance(E2TAddress, PodName) e2tInstance1.State = entities.Active e2tInstance1.AssociatedRanList = []string{} writerMock.On("SaveE2TInstance", mock.MatchedBy(func(e2tInstance *entities.E2TInstance) bool { return e2tInstance.Address == E2TAddress && e2tInstance.State == entities.ToBeDeleted })).Return(nil) @@ -141,9 +151,9 @@ func TestShutdownSuccess1InstanceWithoutRans(t *testing.T) { } func TestShutdownSuccess1Instance2Rans(t *testing.T) { - shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t) + shutdownManager, readerMock, writerMock, httpClientMock,_ := initE2TShutdownManagerTest(t) - e2tInstance1 := entities.NewE2TInstance(E2TAddress) + e2tInstance1 := entities.NewE2TInstance(E2TAddress, PodName) e2tInstance1.State = entities.Active e2tInstance1.AssociatedRanList = []string{"test1", "test2"} writerMock.On("SaveE2TInstance", mock.MatchedBy(func(e2tInstance *entities.E2TInstance) bool { return e2tInstance.Address == E2TAddress && e2tInstance.State == entities.ToBeDeleted })).Return(nil) @@ -178,13 +188,13 @@ func TestShutdownSuccess1Instance2Rans(t *testing.T) { readerMock.AssertExpectations(t) writerMock.AssertExpectations(t) httpClientMock.AssertExpectations(t) - + } func TestShutdownE2tInstanceAlreadyBeingDeleted(t *testing.T) { - shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t) + shutdownManager, readerMock, writerMock, httpClientMock,_ := initE2TShutdownManagerTest(t) - e2tInstance1 := entities.NewE2TInstance(E2TAddress) + e2tInstance1 := entities.NewE2TInstance(E2TAddress, PodName) e2tInstance1.State = entities.ToBeDeleted e2tInstance1.AssociatedRanList = []string{"test1"} e2tInstance1.DeletionTimestamp = time.Now().UnixNano() @@ -195,13 +205,13 @@ func TestShutdownE2tInstanceAlreadyBeingDeleted(t *testing.T) { readerMock.AssertExpectations(t) writerMock.AssertExpectations(t) httpClientMock.AssertExpectations(t) - + } func TestShutdownFailureMarkInstanceAsToBeDeleted(t *testing.T) { - shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t) + shutdownManager, readerMock, writerMock, httpClientMock,_ := initE2TShutdownManagerTest(t) - e2tInstance1 := entities.NewE2TInstance(E2TAddress) + e2tInstance1 := entities.NewE2TInstance(E2TAddress, PodName) e2tInstance1.State = entities.Active e2tInstance1.AssociatedRanList = []string{"test1", "test2", "test5"} writerMock.On("SaveE2TInstance", mock.MatchedBy(func(e2tInstance *entities.E2TInstance) bool { return e2tInstance.Address == E2TAddress && e2tInstance.State == entities.ToBeDeleted })).Return(e2managererrors.NewRnibDbError()) @@ -212,19 +222,19 @@ func TestShutdownFailureMarkInstanceAsToBeDeleted(t *testing.T) { readerMock.AssertExpectations(t) writerMock.AssertExpectations(t) httpClientMock.AssertExpectations(t) - + } func TestShutdownFailureRoutingManagerError(t *testing.T) { - shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t) + shutdownManager, readerMock, writerMock, httpClientMock,_ := initE2TShutdownManagerTest(t) - e2tInstance1 := entities.NewE2TInstance(E2TAddress) + e2tInstance1 := entities.NewE2TInstance(E2TAddress, PodName) e2tInstance1.State = entities.Active e2tInstance1.AssociatedRanList = []string{"test1", "test2", "test5"} - e2tInstance2 := entities.NewE2TInstance(E2TAddress2) + e2tInstance2 := entities.NewE2TInstance(E2TAddress2, PodName) e2tInstance2.State = entities.Active e2tInstance2.AssociatedRanList = []string{"test3"} - e2tInstance3 := entities.NewE2TInstance(E2TAddress3) + e2tInstance3 := entities.NewE2TInstance(E2TAddress3, PodName) e2tInstance3.State = entities.Active e2tInstance3.AssociatedRanList = []string{"test4"} writerMock.On("SaveE2TInstance", mock.MatchedBy(func(e2tInstance *entities.E2TInstance) bool { return e2tInstance.Address == E2TAddress && e2tInstance.State == entities.ToBeDeleted })).Return(nil) @@ -267,13 +277,13 @@ func TestShutdownFailureRoutingManagerError(t *testing.T) { readerMock.AssertExpectations(t) writerMock.AssertExpectations(t) httpClientMock.AssertExpectations(t) - + } func TestShutdownFailureInClearNodebsAssociation(t *testing.T) { - shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t) + shutdownManager, readerMock, writerMock, httpClientMock,_ := initE2TShutdownManagerTest(t) - e2tInstance1 := entities.NewE2TInstance(E2TAddress) + e2tInstance1 := entities.NewE2TInstance(E2TAddress, PodName) e2tInstance1.State = entities.Active e2tInstance1.AssociatedRanList = []string{"test1", "test2"} writerMock.On("SaveE2TInstance", mock.MatchedBy(func(e2tInstance *entities.E2TInstance) bool { return e2tInstance.Address == E2TAddress && e2tInstance.State == entities.ToBeDeleted })).Return(nil) @@ -295,9 +305,9 @@ func TestShutdownFailureInClearNodebsAssociation(t *testing.T) { } func TestShutdownResourceNotFoundErrorInGetNodeb(t *testing.T) { - shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t) + shutdownManager, readerMock, writerMock, httpClientMock,_ := initE2TShutdownManagerTest(t) - e2tInstance1 := entities.NewE2TInstance(E2TAddress) + e2tInstance1 := entities.NewE2TInstance(E2TAddress, PodName) e2tInstance1.State = entities.Active e2tInstance1.AssociatedRanList = []string{"test1", "test2"} writerMock.On("SaveE2TInstance", mock.MatchedBy(func(e2tInstance *entities.E2TInstance) bool { return e2tInstance.Address == E2TAddress && e2tInstance.State == entities.ToBeDeleted })).Return(nil) @@ -321,9 +331,9 @@ func TestShutdownResourceNotFoundErrorInGetNodeb(t *testing.T) { } func TestShutdownResourceGeneralErrorInGetNodeb(t *testing.T) { - shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t) + shutdownManager, readerMock, writerMock, httpClientMock,_ := initE2TShutdownManagerTest(t) - e2tInstance1 := entities.NewE2TInstance(E2TAddress) + e2tInstance1 := entities.NewE2TInstance(E2TAddress, PodName) e2tInstance1.State = entities.Active e2tInstance1.AssociatedRanList = []string{"test1", "test2"} writerMock.On("SaveE2TInstance", mock.MatchedBy(func(e2tInstance *entities.E2TInstance) bool { return e2tInstance.Address == E2TAddress && e2tInstance.State == entities.ToBeDeleted })).Return(nil) @@ -358,15 +368,15 @@ func TestShutdownResourceGeneralErrorInGetNodeb(t *testing.T) { } func TestShutdownFailureInRemoveE2TInstance(t *testing.T) { - shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t) + shutdownManager, readerMock, writerMock, httpClientMock,_ := initE2TShutdownManagerTest(t) - e2tInstance1 := entities.NewE2TInstance(E2TAddress) + e2tInstance1 := entities.NewE2TInstance(E2TAddress, PodName) e2tInstance1.State = entities.Active e2tInstance1.AssociatedRanList = []string{"test1", "test2", "test5"} - e2tInstance2 := entities.NewE2TInstance(E2TAddress2) + e2tInstance2 := entities.NewE2TInstance(E2TAddress2, PodName) e2tInstance2.State = entities.Active e2tInstance2.AssociatedRanList = []string{"test3"} - e2tInstance3 := entities.NewE2TInstance(E2TAddress3) + e2tInstance3 := entities.NewE2TInstance(E2TAddress3, PodName) e2tInstance3.State = entities.Active e2tInstance3.AssociatedRanList = []string{"test4"} writerMock.On("SaveE2TInstance", mock.MatchedBy(func(e2tInstance *entities.E2TInstance) bool { return e2tInstance.Address == E2TAddress && e2tInstance.State == entities.ToBeDeleted })).Return(nil) @@ -405,4 +415,100 @@ func TestShutdownFailureInRemoveE2TInstance(t *testing.T) { readerMock.AssertExpectations(t) writerMock.AssertExpectations(t) httpClientMock.AssertExpectations(t) -} \ No newline at end of file +} +/* +func TestShutdownSuccess2Instance2Rans(t *testing.T) { + shutdownManager, readerMock, writerMock, httpClientMock,kubernetesManager := initE2TShutdownManagerTest(t) + + e2tInstance1 := entities.NewE2TInstance(E2TAddress, PodName) + e2tInstance1.State = entities.Active + e2tInstance1.AssociatedRanList = []string{"test2"} + writerMock.On("SaveE2TInstance", mock.MatchedBy(func(e2tInstance *entities.E2TInstance) bool { return e2tInstance.Address == E2TAddress && e2tInstance.State == entities.ToBeDeleted })).Return(nil) + + nodeb1 := &entities.NodebInfo{RanName:"test1", AssociatedE2TInstanceAddress:E2TAddress2, ConnectionStatus:entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol:entities.E2ApplicationProtocol_X2_SETUP_REQUEST} + nodeb2 := &entities.NodebInfo{RanName:"test2", AssociatedE2TInstanceAddress:E2TAddress, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol:entities.E2ApplicationProtocol_X2_SETUP_REQUEST} + readerMock.On("GetNodeb", "test2").Return(nodeb2, nil) + + data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, []string{"test2"}, nil) + marshaled, _ := json.Marshal(data) + body := bytes.NewBuffer(marshaled) + respBody := ioutil.NopCloser(bytes.NewBufferString("")) + httpClientMock.On("Delete", "e2t", "application/json", body).Return(&http.Response{StatusCode: http.StatusCreated, Body: respBody}, nil) + + writerMock.On("RemoveE2TInstance", E2TAddress).Return(nil) + readerMock.On("GetE2TAddresses").Return([]string{E2TAddress}, nil) + writerMock.On("SaveE2TAddresses", []string{}).Return(nil) + + nodeb1new := *nodeb1 + nodeb1new.AssociatedE2TInstanceAddress = "" + nodeb1new.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED + nodeb2new := *nodeb2 + nodeb2new.AssociatedE2TInstanceAddress = "" + nodeb2new.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED + writerMock.On("UpdateNodebInfo", &nodeb2new).Return(nil) + + test := TestStruct{ + description: "namespace, 2 pods in Oran", + namespace: "oran", + objs: []runtime.Object{pod("oran", PodName), pod("oran", "e2t_2"), pod("some-namespace", "POD_Test_1")}, + } + + t.Run(test.description, func(t *testing.T) { + kubernetesManager.ClientSet = fake.NewSimpleClientset(test.objs...) + + err := shutdownManager.Shutdown(e2tInstance1) + + assert.Nil(t, err) + readerMock.AssertExpectations(t) + writerMock.AssertExpectations(t) + httpClientMock.AssertExpectations(t) + }) +} + +func TestShutdownSuccess2Instance2RansNoPod(t *testing.T) { + shutdownManager, readerMock, writerMock, httpClientMock,kubernetesManager := initE2TShutdownManagerTest(t) + + e2tInstance1 := entities.NewE2TInstance(E2TAddress, PodName) + e2tInstance1.State = entities.Active + e2tInstance1.AssociatedRanList = []string{"test2"} + writerMock.On("SaveE2TInstance", mock.MatchedBy(func(e2tInstance *entities.E2TInstance) bool { return e2tInstance.Address == E2TAddress && e2tInstance.State == entities.ToBeDeleted })).Return(nil) + + nodeb1 := &entities.NodebInfo{RanName:"test1", AssociatedE2TInstanceAddress:E2TAddress2, ConnectionStatus:entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol:entities.E2ApplicationProtocol_X2_SETUP_REQUEST} + nodeb2 := &entities.NodebInfo{RanName:"test2", AssociatedE2TInstanceAddress:E2TAddress, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol:entities.E2ApplicationProtocol_X2_SETUP_REQUEST} + readerMock.On("GetNodeb", "test2").Return(nodeb2, nil) + + data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, []string{"test2"}, nil) + marshaled, _ := json.Marshal(data) + body := bytes.NewBuffer(marshaled) + respBody := ioutil.NopCloser(bytes.NewBufferString("")) + httpClientMock.On("Delete", "e2t", "application/json", body).Return(&http.Response{StatusCode: http.StatusCreated, Body: respBody}, nil) + + writerMock.On("RemoveE2TInstance", E2TAddress).Return(nil) + readerMock.On("GetE2TAddresses").Return([]string{E2TAddress}, nil) + writerMock.On("SaveE2TAddresses", []string{}).Return(nil) + + nodeb1new := *nodeb1 + nodeb1new.AssociatedE2TInstanceAddress = "" + nodeb1new.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED + nodeb2new := *nodeb2 + nodeb2new.AssociatedE2TInstanceAddress = "" + nodeb2new.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED + writerMock.On("UpdateNodebInfo", &nodeb2new).Return(nil) + + test := TestStruct{ + description: "namespace, 2 pods in Oran", + namespace: "oran", + objs: []runtime.Object{pod("oran", "e2t_2"), pod("some-namespace", "POD_Test_1")}, + } + + t.Run(test.description, func(t *testing.T) { + kubernetesManager.ClientSet = fake.NewSimpleClientset(test.objs...) + + err := shutdownManager.Shutdown(e2tInstance1) + + assert.Nil(t, err) + readerMock.AssertExpectations(t) + writerMock.AssertExpectations(t) + httpClientMock.AssertExpectations(t) + }) +}*/ \ No newline at end of file