From cfe1c0942e718ea29c80d1cc4fb435dce043cfe3 Mon Sep 17 00:00:00 2001
From: Neil-Jocelyn Schark <neil-jocelyn.schark@stud.h-da.de>
Date: Wed, 1 Jun 2022 11:30:36 +0000
Subject: [PATCH] Fix Update for devices does not work as expected for file
 store system

See merge request danet/gosdn!325
---
 controller/nucleus/deviceFilesystemStore.go   |  5 +-
 .../nucleus/deviceFilesystemStore_test.go     | 49 +++++++++++++++++--
 2 files changed, 49 insertions(+), 5 deletions(-)

diff --git a/controller/nucleus/deviceFilesystemStore.go b/controller/nucleus/deviceFilesystemStore.go
index 47d90d55a..3f1bf140f 100644
--- a/controller/nucleus/deviceFilesystemStore.go
+++ b/controller/nucleus/deviceFilesystemStore.go
@@ -125,7 +125,7 @@ func (s *FilesystemDeviceStore) Update(deviceToUpdate device.Device) error {
 	s.fileMutex.Lock()
 	defer s.fileMutex.Unlock()
 
-	var loadedDevice device.LoadedDevice
+	loadedDeviceToUpdate, err := store.TransformObjectToLoadedObject[device.Device, device.LoadedDevice](deviceToUpdate)
 
 	devices, err := s.readAllDevicesFromFile()
 	if err != nil {
@@ -134,11 +134,12 @@ func (s *FilesystemDeviceStore) Update(deviceToUpdate device.Device) error {
 
 	for i, device := range devices {
 		if device.ID == deviceToUpdate.ID().String() {
-			devices[i] = loadedDevice
+			devices[i] = loadedDeviceToUpdate
 			err = s.writeAllDevicesToFile(devices)
 			if err != nil {
 				return err
 			}
+			return nil
 		}
 	}
 
diff --git a/controller/nucleus/deviceFilesystemStore_test.go b/controller/nucleus/deviceFilesystemStore_test.go
index 6534627b1..e3179ad31 100644
--- a/controller/nucleus/deviceFilesystemStore_test.go
+++ b/controller/nucleus/deviceFilesystemStore_test.go
@@ -54,11 +54,12 @@ func TestAddDevice(t *testing.T) {
 	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()
 
 	sbi1, _ := NewSBI(spb.Type_TYPE_OPENCONFIG, sbiID1)
 
 	deviceStore := NewDeviceStore(pndID)
-	device, _ := NewDevice("testdevice", deviceID, nil, sbi1)
+	device, _ := NewDevice("testdevice", deviceID, &trop, sbi1)
 
 	err := deviceStore.Add(device)
 	if err != nil {
@@ -160,10 +161,52 @@ func TestGetDevice(t *testing.T) {
 	}
 
 	if returnDevice.ID != inputDevices[1].ID().String() {
-		t.Errorf("GetAll() = %v, want %v", 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("GetAll() = %v, want %v", 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)
 	}
 }
 
-- 
GitLab