github.com/enbility/spine-go@v0.7.0/spine/entity_local_test.go (about)

     1  package spine
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/enbility/spine-go/model"
     8  	"github.com/stretchr/testify/assert"
     9  	"github.com/stretchr/testify/suite"
    10  )
    11  
    12  func TestEntityLocalSuite(t *testing.T) {
    13  	suite.Run(t, new(EntityLocalTestSuite))
    14  }
    15  
    16  type EntityLocalTestSuite struct {
    17  	suite.Suite
    18  }
    19  
    20  func (suite *EntityLocalTestSuite) Test_Entity() {
    21  	device := NewDeviceLocal("brand", "model", "serial", "code", "address", model.DeviceTypeTypeEnergyManagementSystem, model.NetworkManagementFeatureSetTypeSmart)
    22  	entity := NewEntityLocal(device, model.EntityTypeTypeCEM, NewAddressEntityType([]uint{1}), time.Second*4)
    23  	device.AddEntity(entity)
    24  
    25  	f := NewFeatureLocal(1, entity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeClient)
    26  	entity.AddFeature(f)
    27  	assert.Equal(suite.T(), 1, len(entity.Features()))
    28  
    29  	entity.AddFeature(f)
    30  	assert.Equal(suite.T(), 1, len(entity.Features()))
    31  
    32  	f1 := entity.FeatureOfAddress(nil)
    33  	assert.Nil(suite.T(), f1)
    34  
    35  	f1 = entity.FeatureOfAddress(f.Address().Feature)
    36  	assert.NotNil(suite.T(), f1)
    37  
    38  	fakeAddress := model.AddressFeatureType(5)
    39  	f1 = entity.FeatureOfAddress(&fakeAddress)
    40  	assert.Nil(suite.T(), f1)
    41  
    42  	f2 := entity.GetOrAddFeature(model.FeatureTypeTypeMeasurement, model.RoleTypeClient)
    43  	assert.NotNil(suite.T(), f2)
    44  
    45  	assert.Equal(suite.T(), 2, len(entity.Features()))
    46  
    47  	f3 := entity.GetOrAddFeature(model.FeatureTypeTypeDeviceDiagnosis, model.RoleTypeServer)
    48  	assert.NotNil(suite.T(), f3)
    49  
    50  	assert.Equal(suite.T(), 3, len(entity.Features()))
    51  
    52  	f4 := entity.GetOrAddFeature(model.FeatureTypeTypeDeviceDiagnosis, model.RoleTypeServer)
    53  	assert.NotNil(suite.T(), f4)
    54  
    55  	assert.Equal(suite.T(), 3, len(entity.Features()))
    56  
    57  	entity.RemoveAllUseCaseSupports()
    58  
    59  	hasUC := entity.HasUseCaseSupport(
    60  		model.UseCaseActorTypeCEM,
    61  		model.UseCaseNameTypeEVSECommissioningAndConfiguration,
    62  	)
    63  	assert.Equal(suite.T(), false, hasUC)
    64  
    65  	_, err := LocalFeatureDataCopyOfType[*model.NodeManagementUseCaseDataType](device.NodeManagement(), model.FunctionTypeNodeManagementUseCaseData)
    66  	assert.NotNil(suite.T(), err)
    67  
    68  	entity.AddUseCaseSupport(
    69  		model.UseCaseActorTypeCEM,
    70  		model.UseCaseNameTypeEVSECommissioningAndConfiguration,
    71  		model.SpecificationVersionType("1.0.0"),
    72  		"",
    73  		true,
    74  		[]model.UseCaseScenarioSupportType{1, 2},
    75  	)
    76  
    77  	_, err = LocalFeatureDataCopyOfType[*model.NodeManagementUseCaseDataType](device.NodeManagement(), model.FunctionTypeNodeManagementUseCaseData)
    78  	assert.Nil(suite.T(), err)
    79  
    80  	hasUC = entity.HasUseCaseSupport(
    81  		model.UseCaseActorTypeCEM,
    82  		model.UseCaseNameTypeEVSECommissioningAndConfiguration,
    83  	)
    84  	assert.Equal(suite.T(), true, hasUC)
    85  
    86  	entity.AddUseCaseSupport(
    87  		model.UseCaseActorTypeCEM,
    88  		model.UseCaseNameTypeEVSECommissioningAndConfiguration,
    89  		model.SpecificationVersionType("1.0.0"),
    90  		"",
    91  		true,
    92  		[]model.UseCaseScenarioSupportType{1, 2},
    93  	)
    94  
    95  	hasUC = entity.HasUseCaseSupport(
    96  		model.UseCaseActorTypeCEM,
    97  		model.UseCaseNameTypeEVSECommissioningAndConfiguration,
    98  	)
    99  	assert.Equal(suite.T(), true, hasUC)
   100  
   101  	entity.SetUseCaseAvailability(
   102  		model.UseCaseActorTypeCEM,
   103  		model.UseCaseNameTypeEVSECommissioningAndConfiguration,
   104  		false,
   105  	)
   106  
   107  	entity.RemoveUseCaseSupport(
   108  		model.UseCaseActorTypeCEM,
   109  		model.UseCaseNameTypeEVSECommissioningAndConfiguration,
   110  	)
   111  
   112  	hasUC = entity.HasUseCaseSupport(
   113  		model.UseCaseActorTypeCEM,
   114  		model.UseCaseNameTypeEVSECommissioningAndConfiguration,
   115  	)
   116  	assert.Equal(suite.T(), false, hasUC)
   117  
   118  	entity.AddUseCaseSupport(
   119  		model.UseCaseActorTypeCEM,
   120  		model.UseCaseNameTypeEVSECommissioningAndConfiguration,
   121  		model.SpecificationVersionType("1.0.0"),
   122  		"",
   123  		true,
   124  		[]model.UseCaseScenarioSupportType{1, 2},
   125  	)
   126  
   127  	hasUC = entity.HasUseCaseSupport(
   128  		model.UseCaseActorTypeCEM,
   129  		model.UseCaseNameTypeEVSECommissioningAndConfiguration,
   130  	)
   131  	assert.Equal(suite.T(), true, hasUC)
   132  
   133  	entity.RemoveAllUseCaseSupports()
   134  
   135  	hasUC = entity.HasUseCaseSupport(
   136  		model.UseCaseActorTypeCEM,
   137  		model.UseCaseNameTypeEVSECommissioningAndConfiguration,
   138  	)
   139  	assert.Equal(suite.T(), false, hasUC)
   140  
   141  	entity.RemoveAllBindings()
   142  	entity.RemoveAllSubscriptions()
   143  }