First go version of o-ru-closed-loop
[nonrtric.git] / test / usecases / oruclosedlooprecovery / goversion / internal / repository / lookupservice_test.go
diff --git a/test/usecases/oruclosedlooprecovery/goversion/internal/repository/lookupservice_test.go b/test/usecases/oruclosedlooprecovery/goversion/internal/repository/lookupservice_test.go
new file mode 100644 (file)
index 0000000..5819456
--- /dev/null
@@ -0,0 +1,176 @@
+// -
+//   ========================LICENSE_START=================================
+//   O-RAN-SC
+//   %%
+//   Copyright (C) 2021: Nordix Foundation
+//   %%
+//   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.
+//   ========================LICENSE_END===================================
+//
+
+package repository
+
+import (
+       "errors"
+       "reflect"
+       "testing"
+
+       "oransc.org/usecase/oruclosedloop/mocks"
+)
+
+func TestNewLookupServiceImpl(t *testing.T) {
+       mockCsvFileHelper := &mocks.CsvFileHelper{}
+       type args struct {
+               fileHelper CsvFileHelper
+               fileName   string
+       }
+       tests := []struct {
+               name string
+               args args
+               want *LookupServiceImpl
+       }{
+               {
+                       name: "Should return populated service",
+                       args: args{
+                               fileHelper: mockCsvFileHelper,
+                               fileName:   "test.csv",
+                       },
+                       want: &LookupServiceImpl{
+                               csvFileHelper:   mockCsvFileHelper,
+                               csvFileName:     "test.csv",
+                               oRuIdToODuIdMap: map[string]string{},
+                       },
+               },
+       }
+       for _, tt := range tests {
+               t.Run(tt.name, func(t *testing.T) {
+                       if got := NewLookupServiceImpl(tt.args.fileHelper, tt.args.fileName); !reflect.DeepEqual(got, tt.want) {
+                               t.Errorf("NewLookupServiceImpl() = %v, want %v", got, tt.want)
+                       }
+               })
+       }
+}
+
+func TestLookupServiceImpl_Init(t *testing.T) {
+       mockCsvFileHelper := &mocks.CsvFileHelper{}
+       mockCsvFileHelper.On("GetCsvFromFile", "./map.csv").Return([][]string{{"O-RU-ID", "O-DU-ID"}}, nil).Once()
+       mockCsvFileHelper.On("GetCsvFromFile", "foo.csv").Return(nil, errors.New("Error")).Once()
+       type fields struct {
+               csvFileHelper   CsvFileHelper
+               csvFileName     string
+               oRuIdToODuIdMap map[string]string
+       }
+       tests := []struct {
+               name    string
+               fields  fields
+               wantErr bool
+       }{
+               {
+                       name: "Init with proper csv file should not return error",
+                       fields: fields{
+                               csvFileHelper:   mockCsvFileHelper,
+                               csvFileName:     "./map.csv",
+                               oRuIdToODuIdMap: map[string]string{}},
+                       wantErr: false,
+               },
+               {
+                       name: "Init with missing file should return error",
+                       fields: fields{
+                               csvFileHelper:   mockCsvFileHelper,
+                               csvFileName:     "foo.csv",
+                               oRuIdToODuIdMap: map[string]string{},
+                       },
+                       wantErr: true,
+               },
+       }
+       for _, tt := range tests {
+               t.Run(tt.name, func(t *testing.T) {
+                       s := LookupServiceImpl{
+                               csvFileHelper:   tt.fields.csvFileHelper,
+                               csvFileName:     tt.fields.csvFileName,
+                               oRuIdToODuIdMap: tt.fields.oRuIdToODuIdMap,
+                       }
+                       if err := s.Init(); (err != nil) != tt.wantErr {
+                               t.Errorf("LookupServiceImpl.Init() error = %v, wantErr %v", err, tt.wantErr)
+                       } else if !tt.wantErr {
+                               wantedMap := map[string]string{"O-RU-ID": "O-DU-ID"}
+                               if !reflect.DeepEqual(wantedMap, s.oRuIdToODuIdMap) {
+                                       t.Errorf("LookupServiceImpl.Init() map not initialized, wanted map: %v, got map: %v", wantedMap, s.oRuIdToODuIdMap)
+                               }
+                       }
+               })
+       }
+       mockCsvFileHelper.AssertNumberOfCalls(t, "GetCsvFromFile", 2)
+}
+
+func TestLookupServiceImpl_GetODuID(t *testing.T) {
+       type fields struct {
+               csvFileHelper   CsvFileHelper
+               csvFileName     string
+               oRuIdToODuIdMap map[string]string
+       }
+       type args struct {
+               oRuId string
+       }
+       tests := []struct {
+               name    string
+               fields  fields
+               args    args
+               want    string
+               wantErr error
+       }{
+               {
+                       name: "Id mapped should return mapped id",
+                       fields: fields{
+                               csvFileHelper:   nil,
+                               csvFileName:     "",
+                               oRuIdToODuIdMap: map[string]string{"O-RU-ID": "O-DU-ID"},
+                       },
+                       args: args{
+                               oRuId: "O-RU-ID",
+                       },
+                       want:    "O-DU-ID",
+                       wantErr: nil,
+               },
+               {
+                       name: "Id not mapped should return IdNotMappedError",
+                       fields: fields{
+                               csvFileHelper:   nil,
+                               csvFileName:     "",
+                               oRuIdToODuIdMap: map[string]string{},
+                       },
+                       args: args{
+                               oRuId: "O-RU-ID",
+                       },
+                       want:    "",
+                       wantErr: IdNotMappedError{Id: "O-RU-ID"},
+               },
+       }
+       for _, tt := range tests {
+               t.Run(tt.name, func(t *testing.T) {
+                       s := LookupServiceImpl{
+                               csvFileHelper:   tt.fields.csvFileHelper,
+                               csvFileName:     tt.fields.csvFileName,
+                               oRuIdToODuIdMap: tt.fields.oRuIdToODuIdMap,
+                       }
+                       got, err := s.GetODuID(tt.args.oRuId)
+                       if err != tt.wantErr {
+                               t.Errorf("LookupServiceImpl.GetODuID() error = %v, wantErr %v", err, tt.wantErr)
+                               return
+                       }
+                       if got != tt.want {
+                               t.Errorf("LookupServiceImpl.GetODuID() = %v, want %v", got, tt.want)
+                       }
+               })
+       }
+}