github.com/enbility/spine-go@v0.7.0/spine/device_remote_test.go (about) 1 package spine 2 3 import ( 4 "testing" 5 6 "github.com/enbility/spine-go/api" 7 "github.com/enbility/spine-go/model" 8 "github.com/enbility/spine-go/util" 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/suite" 11 ) 12 13 const ( 14 nm_usecaseinformationlistdata_recv_reply_file_path = "../spine/testdata/nm_usecaseinformationlistdata_recv_reply.json" 15 ) 16 17 func TestDeviceRemoteSuite(t *testing.T) { 18 suite.Run(t, new(DeviceRemoteSuite)) 19 } 20 21 type DeviceRemoteSuite struct { 22 suite.Suite 23 24 localDevice api.DeviceLocalInterface 25 remoteDevice api.DeviceRemoteInterface 26 remoteEntity api.EntityRemoteInterface 27 } 28 29 func (s *DeviceRemoteSuite) WriteShipMessageWithPayload([]byte) {} 30 31 func (s *DeviceRemoteSuite) SetupSuite() {} 32 33 func (s *DeviceRemoteSuite) BeforeTest(suiteName, testName string) { 34 s.localDevice = NewDeviceLocal("brand", "model", "serial", "code", "address", model.DeviceTypeTypeEnergyManagementSystem, model.NetworkManagementFeatureSetTypeSmart) 35 36 ski := "test" 37 sender := NewSender(s) 38 s.remoteDevice = NewDeviceRemote(s.localDevice, ski, sender) 39 desc := &model.NetworkManagementDeviceDescriptionDataType{ 40 DeviceAddress: &model.DeviceAddressType{ 41 Device: util.Ptr(model.AddressDeviceType("test")), 42 }, 43 } 44 s.remoteDevice.UpdateDevice(desc) 45 _ = s.localDevice.SetupRemoteDevice(ski, s) 46 47 s.remoteEntity = NewEntityRemote(s.remoteDevice, model.EntityTypeTypeEVSE, []model.AddressEntityType{1}) 48 49 feature := NewFeatureRemote(0, s.remoteEntity, model.FeatureTypeTypeDeviceDiagnosis, model.RoleTypeServer) 50 s.remoteEntity.AddFeature(feature) 51 52 s.remoteDevice.AddEntity(s.remoteEntity) 53 } 54 55 func (s *DeviceRemoteSuite) Test_RemoveByAddress() { 56 assert.Equal(s.T(), 2, len(s.remoteDevice.Entities())) 57 58 s.remoteDevice.RemoveEntityByAddress([]model.AddressEntityType{2}) 59 assert.Equal(s.T(), 2, len(s.remoteDevice.Entities())) 60 61 s.remoteDevice.RemoveEntityByAddress([]model.AddressEntityType{1}) 62 assert.Equal(s.T(), 1, len(s.remoteDevice.Entities())) 63 } 64 65 func (s *DeviceRemoteSuite) Test_FeatureByEntityTypeAndRole() { 66 entity := s.remoteDevice.Entity([]model.AddressEntityType{1}) 67 assert.NotNil(s.T(), entity) 68 69 assert.Equal(s.T(), 1, len(entity.Features())) 70 71 feature := s.remoteDevice.FeatureByEntityTypeAndRole(entity, model.FeatureTypeTypeDeviceDiagnosis, model.RoleTypeClient) 72 assert.Nil(s.T(), feature) 73 74 feature = s.remoteDevice.FeatureByEntityTypeAndRole(entity, model.FeatureTypeTypeDeviceDiagnosis, model.RoleTypeServer) 75 assert.NotNil(s.T(), feature) 76 77 s.remoteDevice.RemoveEntityByAddress([]model.AddressEntityType{1}) 78 assert.Equal(s.T(), 1, len(s.remoteDevice.Entities())) 79 80 _ = s.remoteDevice.Entity([]model.AddressEntityType{0}) 81 s.remoteDevice.RemoveEntityByAddress([]model.AddressEntityType{0}) 82 assert.Equal(s.T(), 0, len(s.remoteDevice.Entities())) 83 84 feature = s.remoteDevice.FeatureByEntityTypeAndRole(entity, model.FeatureTypeTypeDeviceDiagnosis, model.RoleTypeServer) 85 assert.Nil(s.T(), feature) 86 } 87 88 func (s *DeviceRemoteSuite) Test_Usecases() { 89 uc := s.remoteDevice.UseCases() 90 assert.Nil(s.T(), uc) 91 92 _, _ = s.remoteDevice.HandleSpineMesssage(loadFileData(s.T(), nm_usecaseinformationlistdata_recv_reply_file_path)) 93 94 uc = s.remoteDevice.UseCases() 95 assert.NotNil(s.T(), uc) 96 }