|
| 1 | +package features |
| 2 | + |
| 3 | +import ( |
| 4 | + "testing" |
| 5 | + |
| 6 | + "github.com/enbility/eebus-go/spine" |
| 7 | + "github.com/enbility/eebus-go/spine/model" |
| 8 | + "github.com/enbility/eebus-go/util" |
| 9 | + "github.com/stretchr/testify/assert" |
| 10 | +) |
| 11 | + |
| 12 | +func TestDeviceDiagnosis_GetState(t *testing.T) { |
| 13 | + localDevice := spine.NewDeviceLocalImpl("TestBrandName", "TestDeviceModel", "TestSerialNumber", "TestDeviceCode", |
| 14 | + "TestDeviceAddress", model.DeviceTypeTypeEnergyManagementSystem, model.NetworkManagementFeatureSetTypeSmart) |
| 15 | + localEntity := spine.NewEntityLocalImpl(localDevice, model.EntityTypeTypeCEM, spine.NewAddressEntityType([]uint{1})) |
| 16 | + localDevice.AddEntity(localEntity) |
| 17 | + |
| 18 | + f := spine.NewFeatureLocalImpl(1, localEntity, model.FeatureTypeTypeDeviceDiagnosis, model.RoleTypeServer) |
| 19 | + localEntity.AddFeature(f) |
| 20 | + |
| 21 | + remoteDeviceName := "remoteDevice" |
| 22 | + remoteDevice := spine.NewDeviceRemoteImpl(localDevice, "test", nil) |
| 23 | + data := &model.NodeManagementDetailedDiscoveryDataType{ |
| 24 | + DeviceInformation: &model.NodeManagementDetailedDiscoveryDeviceInformationType{ |
| 25 | + Description: &model.NetworkManagementDeviceDescriptionDataType{ |
| 26 | + DeviceAddress: &model.DeviceAddressType{ |
| 27 | + Device: util.Ptr(model.AddressDeviceType(remoteDeviceName)), |
| 28 | + }, |
| 29 | + }, |
| 30 | + }, |
| 31 | + EntityInformation: []model.NodeManagementDetailedDiscoveryEntityInformationType{ |
| 32 | + { |
| 33 | + Description: &model.NetworkManagementEntityDescriptionDataType{ |
| 34 | + EntityAddress: &model.EntityAddressType{ |
| 35 | + Device: util.Ptr(model.AddressDeviceType(remoteDeviceName)), |
| 36 | + Entity: []model.AddressEntityType{1}, |
| 37 | + }, |
| 38 | + EntityType: util.Ptr(model.EntityTypeTypeEVSE), |
| 39 | + }, |
| 40 | + }, |
| 41 | + }, |
| 42 | + FeatureInformation: []model.NodeManagementDetailedDiscoveryFeatureInformationType{ |
| 43 | + { |
| 44 | + Description: &model.NetworkManagementFeatureDescriptionDataType{ |
| 45 | + FeatureAddress: &model.FeatureAddressType{ |
| 46 | + Device: util.Ptr(model.AddressDeviceType(remoteDeviceName)), |
| 47 | + Entity: []model.AddressEntityType{1}, |
| 48 | + Feature: util.Ptr(model.AddressFeatureType(1)), |
| 49 | + }, |
| 50 | + FeatureType: util.Ptr(model.FeatureTypeTypeDeviceDiagnosis), |
| 51 | + Role: util.Ptr(model.RoleTypeClient), |
| 52 | + }, |
| 53 | + }, |
| 54 | + }, |
| 55 | + } |
| 56 | + remoteEntities, err := remoteDevice.AddEntityAndFeatures(true, data) |
| 57 | + assert.Nil(t, err) |
| 58 | + assert.NotNil(t, remoteEntities) |
| 59 | + assert.NotEqual(t, 0, len(remoteEntities)) |
| 60 | + |
| 61 | + remoteEntity := remoteEntities[0] |
| 62 | + |
| 63 | + d, err := NewDeviceDiagnosis(model.RoleTypeServer, model.RoleTypeClient, localDevice, remoteEntity) |
| 64 | + assert.Nil(t, err) |
| 65 | + assert.NotNil(t, d) |
| 66 | + |
| 67 | + result, err := d.GetState() |
| 68 | + assert.NotNil(t, err) |
| 69 | + assert.Nil(t, result) |
| 70 | + |
| 71 | + rF := remoteEntity.Feature(util.Ptr(model.AddressFeatureType(1))) |
| 72 | + fData := &model.DeviceDiagnosisStateDataType{ |
| 73 | + OperatingState: util.Ptr(model.DeviceDiagnosisOperatingStateTypeNormalOperation), |
| 74 | + } |
| 75 | + rF.UpdateData(model.FunctionTypeDeviceDiagnosisStateData, fData, nil, nil) |
| 76 | + |
| 77 | + result, err = d.GetState() |
| 78 | + assert.Nil(t, err) |
| 79 | + assert.NotNil(t, result) |
| 80 | + |
| 81 | +} |
0 commit comments