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  }