github.com/enbility/spine-go@v0.7.0/spine/subscription_manager_test.go (about) 1 package spine 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/enbility/spine-go/api" 8 "github.com/enbility/spine-go/model" 9 "github.com/enbility/spine-go/util" 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/suite" 12 ) 13 14 func TestSubscriptionManagerSuite(t *testing.T) { 15 suite.Run(t, new(SubscriptionManagerSuite)) 16 } 17 18 type SubscriptionManagerSuite struct { 19 suite.Suite 20 21 localDevice api.DeviceLocalInterface 22 remoteDevice, 23 remoteDevice2 api.DeviceRemoteInterface 24 sut api.SubscriptionManagerInterface 25 } 26 27 func (suite *SubscriptionManagerSuite) WriteShipMessageWithPayload([]byte) {} 28 29 func (suite *SubscriptionManagerSuite) SetupSuite() { 30 suite.localDevice = NewDeviceLocal("brand", "model", "serial", "code", "address", model.DeviceTypeTypeEnergyManagementSystem, model.NetworkManagementFeatureSetTypeSmart) 31 32 ski := "test" 33 sender := NewSender(suite) 34 suite.remoteDevice = NewDeviceRemote(suite.localDevice, ski, sender) 35 _ = suite.localDevice.SetupRemoteDevice(ski, suite) 36 37 ski2 := "test2" 38 suite.remoteDevice2 = NewDeviceRemote(suite.localDevice, ski2, sender) 39 _ = suite.localDevice.SetupRemoteDevice(ski2, suite) 40 41 suite.sut = NewSubscriptionManager(suite.localDevice) 42 } 43 44 func (suite *SubscriptionManagerSuite) Test_Subscriptions() { 45 entity := NewEntityLocal(suite.localDevice, model.EntityTypeTypeCEM, []model.AddressEntityType{1}, time.Second*4) 46 suite.localDevice.AddEntity(entity) 47 48 localFeature := entity.GetOrAddFeature(model.FeatureTypeTypeDeviceDiagnosis, model.RoleTypeServer) 49 50 remoteEntity := NewEntityRemote(suite.remoteDevice, model.EntityTypeTypeEVSE, []model.AddressEntityType{1}) 51 suite.remoteDevice.AddEntity(remoteEntity) 52 53 remoteFeature := NewFeatureRemote(remoteEntity.NextFeatureId(), remoteEntity, model.FeatureTypeTypeDeviceDiagnosis, model.RoleTypeClient) 54 remoteFeature.Address().Device = util.Ptr(model.AddressDeviceType("remoteDevice")) 55 remoteEntity.AddFeature(remoteFeature) 56 remoteEntity.Address().Device = util.Ptr(model.AddressDeviceType("remoteDevice")) 57 58 subscrRequest := model.SubscriptionManagementRequestCallType{ 59 ClientAddress: remoteFeature.Address(), 60 ServerAddress: localFeature.Address(), 61 ServerFeatureType: util.Ptr(model.FeatureTypeTypeDeviceDiagnosis), 62 } 63 64 remoteEntity2 := NewEntityRemote(suite.remoteDevice2, model.EntityTypeTypeEVSE, []model.AddressEntityType{1}) 65 suite.remoteDevice2.AddEntity(remoteEntity2) 66 67 remoteFeature2 := NewFeatureRemote(remoteEntity2.NextFeatureId(), remoteEntity2, model.FeatureTypeTypeDeviceDiagnosis, model.RoleTypeClient) 68 remoteFeature2.Address().Device = util.Ptr(model.AddressDeviceType("remoteDevice2")) 69 remoteEntity2.AddFeature(remoteFeature2) 70 remoteEntity2.Address().Device = util.Ptr(model.AddressDeviceType("remoteDevice2")) 71 72 subscrRequest2 := model.SubscriptionManagementRequestCallType{ 73 ClientAddress: remoteFeature2.Address(), 74 ServerAddress: localFeature.Address(), 75 ServerFeatureType: util.Ptr(model.FeatureTypeTypeDeviceDiagnosis), 76 } 77 78 subMgr := suite.localDevice.SubscriptionManager() 79 err := subMgr.AddSubscription(suite.remoteDevice, subscrRequest) 80 assert.Nil(suite.T(), err) 81 82 subs := subMgr.Subscriptions(suite.remoteDevice) 83 assert.Equal(suite.T(), 1, len(subs)) 84 85 err = subMgr.AddSubscription(suite.remoteDevice, subscrRequest) 86 assert.NotNil(suite.T(), err) 87 88 subs = subMgr.Subscriptions(suite.remoteDevice) 89 assert.Equal(suite.T(), 1, len(subs)) 90 91 err = subMgr.AddSubscription(suite.remoteDevice2, subscrRequest2) 92 assert.Nil(suite.T(), err) 93 94 subs = subMgr.Subscriptions(suite.remoteDevice2) 95 assert.Equal(suite.T(), 1, len(subs)) 96 97 subscrDelete := model.SubscriptionManagementDeleteCallType{ 98 ClientAddress: remoteFeature.Address(), 99 ServerAddress: localFeature.Address(), 100 } 101 102 err = subMgr.RemoveSubscription(subscrDelete, suite.remoteDevice) 103 assert.Nil(suite.T(), err) 104 105 subs = subMgr.Subscriptions(suite.remoteDevice) 106 assert.Equal(suite.T(), 0, len(subs)) 107 108 err = subMgr.RemoveSubscription(subscrDelete, suite.remoteDevice) 109 assert.NotNil(suite.T(), err) 110 111 subMgr = suite.localDevice.SubscriptionManager() 112 err = subMgr.AddSubscription(suite.remoteDevice, subscrRequest) 113 assert.Nil(suite.T(), err) 114 115 subs = subMgr.Subscriptions(suite.remoteDevice) 116 assert.Equal(suite.T(), 1, len(subs)) 117 118 subMgr.RemoveSubscriptionsForEntity(nil) 119 120 subs = subMgr.Subscriptions(suite.remoteDevice) 121 assert.Equal(suite.T(), 1, len(subs)) 122 123 subMgr.RemoveSubscriptionsForDevice(nil) 124 125 subs = subMgr.Subscriptions(suite.remoteDevice) 126 assert.Equal(suite.T(), 1, len(subs)) 127 128 subMgr.RemoveSubscriptionsForDevice(suite.remoteDevice) 129 130 subs = subMgr.Subscriptions(suite.remoteDevice) 131 assert.Equal(suite.T(), 0, len(subs)) 132 133 subs = subMgr.Subscriptions(suite.remoteDevice2) 134 assert.Equal(suite.T(), 1, len(subs)) 135 }