diff --git a/controller/nucleus/deviceServiceMock.go b/controller/nucleus/deviceServiceMock.go new file mode 100644 index 0000000000000000000000000000000000000000..0cd887fb4f077ba94c963ec7a6828e32042efc67 --- /dev/null +++ b/controller/nucleus/deviceServiceMock.go @@ -0,0 +1,91 @@ +package nucleus + +import ( + "code.fbi.h-da.de/danet/gosdn/controller/interfaces/device" + "code.fbi.h-da.de/danet/gosdn/controller/store" + "github.com/google/uuid" +) + +// DeviceServiceMock provides a in-memory implementation for multiple stores. +type DeviceServiceMock struct { + Store map[uuid.UUID]device.Device + nameLookupTable map[string]uuid.UUID +} + +// NewDeviceServiceMock returns a specific in-memory store for device service. +func NewDeviceServiceMock() device.Service { + return &DeviceServiceMock{ + Store: make(map[uuid.UUID]device.Device), + nameLookupTable: make(map[string]uuid.UUID), + } +} + +// Add adds a item device.Device +func (t *DeviceServiceMock) Add(item device.Device) error { + _, ok := t.Store[item.ID()] + if ok { + return nil + } + + t.Store[item.ID()] = item + t.nameLookupTable[item.Name()] = item.ID() + + return nil +} + +// Update updates a item device.Device +func (t *DeviceServiceMock) Update(item device.Device) error { + _, ok := t.Store[item.ID()] + if ok { + return nil + } + + t.Store[item.ID()] = item + t.nameLookupTable[item.Name()] = item.ID() + + return nil +} + +// Delete deletes a item device.Device +func (t *DeviceServiceMock) Delete(item device.Device) error { + delete(t.Store, item.ID()) + + return nil +} + +// Get gets a item device.Device +func (t *DeviceServiceMock) Get(query store.Query) (device.Device, error) { + // First search for direct hit on UUID. + item, ok := t.Store[query.ID] + if !ok { + // Second search for name + id, ok := t.nameLookupTable[query.Name] + if !ok { + return nil, nil + } + + item, ok := t.Store[id] + if !ok { + return nil, nil + } + + return item, nil + } + + return item, nil +} + +// GetAll gets all items +func (t *DeviceServiceMock) GetAll() ([]device.LoadedDevice, error) { + var allItems []device.LoadedDevice + + for _, item := range t.Store { + allItems = append(allItems, device.LoadedDevice{ + ID: item.ID().String(), + Name: item.Name(), + SBI: item.SBI().ID().String(), + }) + } + + return allItems, nil +}