Skip to content
Snippets Groups Projects
deviceFilesystemStore_test.go 6.85 KiB
Newer Older
  • Learn to ignore specific revisions
  • package nucleus
    
    import (
    	"log"
    	"os"
    	"path/filepath"
    	"testing"
    
    	spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound"
    	tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport"
    	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/device"
    	"code.fbi.h-da.de/danet/gosdn/controller/nucleus/filesystem"
    	"code.fbi.h-da.de/danet/gosdn/controller/store"
    	"github.com/google/uuid"
    )
    
    func ensureDeviceFilesForTestAreRemoved() {
    	store.EnsureFilesystemStorePathExists(filesystem.DeviceFilenameSuffix)
    	wildcartFilename := "*-" + filesystem.DeviceFilenameSuffix
    	path := store.GetCompletePathToFileStore(wildcartFilename)
    
    	files, err := filepath.Glob(path)
    
    	if err != nil {
    		log.Println(err)
    	}
    	for _, f := range files {
    		if err := os.Remove(f); err != nil {
    			log.Println(err)
    		}
    	}
    }
    
    func returnBasicTransportOption() tpb.TransportOption {
    	return tpb.TransportOption{
    		Address:  "test:///",
    		Username: "test",
    		Password: "test",
    		TransportOption: &tpb.TransportOption_GnmiTransportOption{
    			GnmiTransportOption: &tpb.GnmiTransportOption{
    				Compression:     "",
    				GrpcDialOptions: nil,
    				Token:           "",
    				Encoding:        0,
    			},
    		},
    	}
    }
    
    func TestAddDevice(t *testing.T) {
    	ensureDeviceFilesForTestAreRemoved()
    	defer ensureDeviceFilesForTestAreRemoved()
    
    	pndID, _ := uuid.Parse("b4016412-eec5-45a1-aa29-f59915357bad")
    	deviceID, _ := uuid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa")
    	sbiID1, _ := uuid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa")
    
    
    	sbi1, _ := NewSBI(spb.Type_TYPE_OPENCONFIG, sbiID1)
    
    	deviceStore := NewDeviceStore(pndID)
    
    	device, _ := NewDevice("testdevice", deviceID, &trop, sbi1)
    
    
    	err := deviceStore.Add(device)
    	if err != nil {
    		t.Error(err)
    	}
    }
    
    func TestGetAllDevices(t *testing.T) {
    	ensureDeviceFilesForTestAreRemoved()
    	defer ensureDeviceFilesForTestAreRemoved()
    
    	pndID, _ := uuid.Parse("b4016412-eec5-45a1-aa29-f59915357bad")
    	deviceStore := NewDeviceStore(pndID)
    
    	sbiID, _ := uuid.Parse("ssssssss-ssss-ssss-ssss-ssssssssssss")
    	sbi, _ := NewSBI(spb.Type_TYPE_OPENCONFIG, sbiID)
    
    	deviceID1, _ := uuid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa")
    	deviceID2, _ := uuid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaab")
    
    	transportOptions := returnBasicTransportOption()
    
    	device1, err := NewDevice("testname", deviceID1, &transportOptions, sbi)
    	if err != nil {
    		t.Error(err)
    	}
    
    	device2, err := NewDevice("testname2", deviceID2, &transportOptions, sbi)
    	if err != nil {
    		t.Error(err)
    	}
    
    	inputDevices := [2]device.Device{device1, device2}
    
    	for _, device := range inputDevices {
    		err := deviceStore.Add(device)
    		if err != nil {
    			t.Error(err)
    		}
    	}
    
    	returnedDevices, err := deviceStore.GetAll()
    	if err != nil {
    		t.Error(err)
    	}
    
    	length := len(returnedDevices)
    	if length != 2 {
    		t.Errorf("GetAll() length of array = %v, want %v", length, 2)
    	}
    
    	for i, device := range returnedDevices {
    		if device.ID != inputDevices[i].ID().String() {
    			t.Errorf("GetAll() = %v, want %v", device.ID, inputDevices[i].ID().String())
    		}
    		if device.Name != inputDevices[i].Name() {
    			t.Errorf("GetAll() = %v, want %v", device.Name, inputDevices[i].Name())
    		}
    	}
    }
    
    func TestGetDevice(t *testing.T) {
    	ensureDeviceFilesForTestAreRemoved()
    	defer ensureDeviceFilesForTestAreRemoved()
    
    	pndID, _ := uuid.Parse("b4016412-eec5-45a1-aa29-f59915357bad")
    	deviceStore := NewDeviceStore(pndID)
    
    	sbiID, _ := uuid.Parse("ssssssss-ssss-ssss-ssss-ssssssssssss")
    	sbi, _ := NewSBI(spb.Type_TYPE_OPENCONFIG, sbiID)
    
    	deviceID1, _ := uuid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa")
    	deviceID2, _ := uuid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaab")
    
    	trop := returnBasicTransportOption()
    
    	device1, err := NewDevice("testname", deviceID1, &trop, sbi)
    	if err != nil {
    		t.Error(err)
    	}
    
    	device2, err := NewDevice("testname2", deviceID2, &trop, sbi)
    	if err != nil {
    		t.Error(err)
    	}
    
    	inputDevices := [2]device.Device{device1, device2}
    
    	for _, device := range inputDevices {
    		err := deviceStore.Add(device)
    		if err != nil {
    			t.Error(err)
    		}
    	}
    
    	returnDevice, err := deviceStore.Get(store.Query{ID: deviceID2, Name: "testname2"})
    	if err != nil {
    		t.Error(err)
    	}
    
    	if returnDevice.ID != inputDevices[1].ID().String() {
    
    		t.Errorf("Get() = %v, want %v", returnDevice.ID, inputDevices[1].ID().String())
    
    	}
    	if returnDevice.Name != inputDevices[1].Name() {
    
    		t.Errorf("Get() = %v, want %v", returnDevice.Name, inputDevices[1].Name())
    	}
    }
    
    func TestUpdateDevice(t *testing.T) {
    	ensureDeviceFilesForTestAreRemoved()
    	defer ensureDeviceFilesForTestAreRemoved()
    
    	pndID, _ := uuid.Parse("b4016412-eec5-45a1-aa29-f59915357bad")
    	deviceID, _ := uuid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa")
    	sbiID1, _ := uuid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa")
    
    	trop := returnBasicTransportOption()
    
    	updatedDeviceName := "testdevice2"
    
    	sbi1, _ := NewSBI(spb.Type_TYPE_OPENCONFIG, sbiID1)
    
    	deviceStore := NewDeviceStore(pndID)
    	device, _ := NewDevice("testdevice", deviceID, &trop, sbi1)
    
    	err := deviceStore.Add(device)
    	if err != nil {
    		t.Error(err)
    	}
    
    	device, _ = NewDevice(updatedDeviceName, deviceID, &trop, sbi1)
    
    	err = deviceStore.Update(device)
    	if err != nil {
    		t.Error(err)
    	}
    
    	returnDevice, err := deviceStore.Get(store.Query{ID: deviceID, Name: updatedDeviceName})
    	if err != nil {
    		t.Error(err)
    	}
    
    	if returnDevice.ID != deviceID.String() {
    		t.Errorf("Get() = %v, want %v", returnDevice.ID, deviceID.String())
    	}
    	if returnDevice.Name != updatedDeviceName {
    		t.Errorf("Get() = %v, want %v", returnDevice.Name, updatedDeviceName)
    
    	}
    }
    
    func TestDeleteDevice(t *testing.T) {
    	ensureDeviceFilesForTestAreRemoved()
    	defer ensureDeviceFilesForTestAreRemoved()
    
    	pndID, _ := uuid.Parse("b4016412-eec5-45a1-aa29-f59915357bad")
    	deviceStore := NewDeviceStore(pndID)
    
    	sbiID, _ := uuid.Parse("ssssssss-ssss-ssss-ssss-ssssssssssss")
    	sbi, _ := NewSBI(spb.Type_TYPE_OPENCONFIG, sbiID)
    
    	deviceID1, _ := uuid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa")
    	deviceID2, _ := uuid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaab")
    
    	trop := returnBasicTransportOption()
    
    	device1, err := NewDevice("testname", deviceID1, &trop, sbi)
    	if err != nil {
    		t.Error(err)
    	}
    
    	device2, err := NewDevice("testname2", deviceID2, &trop, sbi)
    	if err != nil {
    		t.Error(err)
    	}
    
    	inputDevices := [2]device.Device{device1, device2}
    
    	for _, device := range inputDevices {
    		err := deviceStore.Add(device)
    		if err != nil {
    			t.Error(err)
    		}
    	}
    
    	err = deviceStore.Delete(device1)
    	if err != nil {
    		t.Error(err)
    	}
    
    	returnDevices, err := deviceStore.GetAll()
    	if err != nil {
    		t.Error(err)
    	}
    
    	length := len(returnDevices)
    	if length != 1 {
    		t.Errorf("GetAll() length of array = %v, want %v", length, 2)
    	}
    
    	for _, device := range returnDevices {
    		if device.ID != inputDevices[1].ID().String() {
    			t.Errorf("GetAll() = %v, want %v", device.ID, inputDevices[1].ID().String())
    		}
    		if device.Name != inputDevices[1].Name() {
    			t.Errorf("GetAll() = %v, want %v", device.Name, inputDevices[1].Name())
    		}
    	}
    }