Skip to content
Snippets Groups Projects
deviceServiceMock.go 2.45 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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),
    	}
    }
    
    
    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
    }
    
    
    // UpdateModel updates a item device.Device.
    
    func (t *DeviceServiceMock) UpdateModel(item device.Device, model string) 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
    }
    
    
    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
    }
    
    
    func (t *DeviceServiceMock) GetAll() ([]device.Device, error) {
    	var allItems []device.Device
    
    	for _, item := range t.Store {
    		allItems = append(allItems, item)
    	}
    
    	return allItems, nil
    }
    
    // GetAllAsLoaded gets all items as `device.LoadedDevice`.
    func (t *DeviceServiceMock) GetAllAsLoaded() ([]device.LoadedDevice, error) {
    
    
    	for _, item := range t.Store {
    
    		allItems = append(allItems, device.LoadedDevice{
    			ID:   item.ID().String(),
    			Name: item.Name(),
    			SBI:  item.SBI().ID().String(),
    		})