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  }