github.com/enbility/spine-go@v0.7.0/integration_tests/electricalconnection_test.go (about) 1 package integrationtests 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/spine" 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/suite" 11 ) 12 13 const ( 14 ec_permittedvaluesetlistdata_recv_notify_partial_file_path = "./testdata/ec_permittedvaluesetlistdata_recv_notify_partial.json" 15 ec_descriptionlistdata_recv_reply_file_path = "./testdata/ec_descriptionListData_recv_reply.json" 16 ec_parameterdescriptionlistdata_recv_reply_file_path = "./testdata/ec_parameterDescriptionListData_recv_reply.json" 17 ec_subscriptionRequestCall_recv_result_file_path = "./testdata/ec_subscriptionRequestCall_recv_result.json" 18 ) 19 20 func TestElectricalConnectionSuite(t *testing.T) { 21 suite.Run(t, new(ElectricalConnectionSuite)) 22 } 23 24 type ElectricalConnectionSuite struct { 25 suite.Suite 26 sut api.DeviceLocalInterface 27 28 remoteSki string 29 30 remoteDevice api.DeviceRemoteInterface 31 writeHandler *WriteMessageHandler 32 } 33 34 func (s *ElectricalConnectionSuite) SetupSuite() { 35 } 36 37 func (s *ElectricalConnectionSuite) BeforeTest(suiteName, testName string) { 38 s.sut, s.remoteSki, s.remoteDevice, s.writeHandler = beforeTest(1, model.FeatureTypeTypeElectricalConnection, model.RoleTypeClient) 39 initialCommunication(s.T(), s.remoteDevice, s.writeHandler) 40 } 41 42 func (s *ElectricalConnectionSuite) AfterTest(suiteName, testName string) { 43 } 44 45 func (s *ElectricalConnectionSuite) TestDescriptionListData_RecvReply() { 46 // Act 47 msgCounter, _ := s.remoteDevice.HandleSpineMesssage(loadFileData(s.T(), ec_descriptionlistdata_recv_reply_file_path)) 48 waitForAck(s.T(), msgCounter, s.writeHandler) 49 50 // Assert 51 remoteDevice := s.sut.RemoteDeviceForSki(s.remoteSki) 52 assert.NotNil(s.T(), remoteDevice) 53 54 ecFeature := remoteDevice.FeatureByEntityTypeAndRole( 55 remoteDevice.Entity(spine.NewAddressEntityType([]uint{1, 1})), 56 model.FeatureTypeTypeElectricalConnection, 57 model.RoleTypeServer) 58 assert.NotNil(s.T(), ecFeature) 59 60 fdata := ecFeature.DataCopy(model.FunctionTypeElectricalConnectionDescriptionListData) 61 if !assert.NotNil(s.T(), fdata) { 62 return 63 } 64 data := fdata.(*model.ElectricalConnectionDescriptionListDataType) 65 66 if !assert.Equal(s.T(), 1, len(data.ElectricalConnectionDescriptionData)) { 67 return 68 } 69 70 item1 := data.ElectricalConnectionDescriptionData[0] 71 assert.Equal(s.T(), 0, int(*item1.ElectricalConnectionId)) 72 assert.Equal(s.T(), string(model.ElectricalConnectionVoltageTypeTypeAc), string(*item1.PowerSupplyType)) 73 assert.Equal(s.T(), 1, int(*item1.AcConnectedPhases)) 74 assert.Equal(s.T(), string(model.EnergyDirectionTypeConsume), string(*item1.PositiveEnergyDirection)) 75 } 76 77 func (s *ElectricalConnectionSuite) TestParameterDescriptionListData_RecvReply() { 78 // Act 79 msgCounter, _ := s.remoteDevice.HandleSpineMesssage(loadFileData(s.T(), ec_parameterdescriptionlistdata_recv_reply_file_path)) 80 waitForAck(s.T(), msgCounter, s.writeHandler) 81 82 // Assert 83 remoteDevice := s.sut.RemoteDeviceForSki(s.remoteSki) 84 assert.NotNil(s.T(), remoteDevice) 85 86 ecFeature := remoteDevice.FeatureByEntityTypeAndRole( 87 remoteDevice.Entity(spine.NewAddressEntityType([]uint{1, 1})), 88 model.FeatureTypeTypeElectricalConnection, 89 model.RoleTypeServer) 90 assert.NotNil(s.T(), ecFeature) 91 92 fdata := ecFeature.DataCopy(model.FunctionTypeElectricalConnectionParameterDescriptionListData) 93 if !assert.NotNil(s.T(), fdata) { 94 return 95 } 96 data := fdata.(*model.ElectricalConnectionParameterDescriptionListDataType) 97 98 if !assert.Equal(s.T(), 4, len(data.ElectricalConnectionParameterDescriptionData)) { 99 return 100 } 101 102 item1 := data.ElectricalConnectionParameterDescriptionData[0] 103 assert.Equal(s.T(), 0, int(*item1.ElectricalConnectionId)) 104 assert.Equal(s.T(), 1, int(*item1.ParameterId)) 105 assert.Equal(s.T(), 1, int(*item1.MeasurementId)) 106 assert.Equal(s.T(), string(model.ElectricalConnectionVoltageTypeTypeAc), string(*item1.VoltageType)) 107 assert.Equal(s.T(), string(model.ElectricalConnectionPhaseNameTypeA), string(*item1.AcMeasuredPhases)) 108 assert.Equal(s.T(), string(model.ElectricalConnectionPhaseNameTypeNeutral), string(*item1.AcMeasuredInReferenceTo)) 109 assert.Equal(s.T(), string(model.ElectricalConnectionAcMeasurementTypeTypeReal), string(*item1.AcMeasurementType)) 110 assert.Equal(s.T(), string(model.ElectricalConnectionMeasurandVariantTypeRms), string(*item1.AcMeasurementVariant)) 111 } 112 113 func (s *ElectricalConnectionSuite) TestPermittedValueSetListData_RecvNotifyPartial() { 114 // Act 115 msgCounter, _ := s.remoteDevice.HandleSpineMesssage(loadFileData(s.T(), ec_permittedvaluesetlistdata_recv_notify_partial_file_path)) 116 waitForAck(s.T(), msgCounter, s.writeHandler) 117 118 // Assert 119 remoteDevice := s.sut.RemoteDeviceForSki(s.remoteSki) 120 assert.NotNil(s.T(), remoteDevice) 121 122 ecFeature := remoteDevice.FeatureByEntityTypeAndRole( 123 remoteDevice.Entity(spine.NewAddressEntityType([]uint{1, 1})), 124 model.FeatureTypeTypeElectricalConnection, 125 model.RoleTypeServer) 126 assert.NotNil(s.T(), ecFeature) 127 128 fdata := ecFeature.DataCopy(model.FunctionTypeElectricalConnectionPermittedValueSetListData) 129 if !assert.NotNil(s.T(), fdata) { 130 return 131 } 132 data := fdata.(*model.ElectricalConnectionPermittedValueSetListDataType) 133 134 if !assert.Equal(s.T(), 3, len(data.ElectricalConnectionPermittedValueSetData)) { 135 return 136 } 137 138 item1 := data.ElectricalConnectionPermittedValueSetData[0] 139 assert.Equal(s.T(), 0, int(*item1.ElectricalConnectionId)) 140 assert.Equal(s.T(), 1, int(*item1.ParameterId)) 141 assert.Equal(s.T(), 1, len(item1.PermittedValueSet)) 142 assert.Equal(s.T(), 1, len(item1.PermittedValueSet[0].Range)) 143 assert.NotNil(s.T(), item1.PermittedValueSet[0].Range) 144 assert.Equal(s.T(), 6, int(*item1.PermittedValueSet[0].Range[0].Min.Number)) 145 assert.Equal(s.T(), 0, int(*item1.PermittedValueSet[0].Range[0].Min.Scale)) 146 assert.Equal(s.T(), 16, int(*item1.PermittedValueSet[0].Range[0].Max.Number)) 147 assert.Equal(s.T(), 0, int(*item1.PermittedValueSet[0].Range[0].Max.Scale)) 148 assert.Nil(s.T(), item1.PermittedValueSet[0].Value) 149 }