Skip to content

Commit

Permalink
Remove VerifyUseCaseScenariosAndFeaturesSupport
Browse files Browse the repository at this point in the history
This functionality should be provided in the use case abstraction instead
  • Loading branch information
DerAndereAndi committed Jun 2, 2024
1 parent 73e4d43 commit b587986
Show file tree
Hide file tree
Showing 4 changed files with 0 additions and 326 deletions.
7 changes: 0 additions & 7 deletions api/device.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,13 +110,6 @@ type DeviceRemoteInterface interface {

// Get the devices usecase data
UseCases() []model.UseCaseInformationDataType
// Verify if the device supports a usecase depending on the usecase actor, name, scenarios and requires server features
VerifyUseCaseScenariosAndFeaturesSupport(
usecaseActor model.UseCaseActorType,
usecaseName model.UseCaseNameType,
scenarios []model.UseCaseScenarioSupportType,
serverFeatures []model.FeatureTypeType,
) bool

// Update the devices address, type and featureset based on NetworkManagementDeviceDescriptionData
UpdateDevice(description *model.NetworkManagementDeviceDescriptionDataType)
Expand Down
49 changes: 0 additions & 49 deletions mocks/DeviceRemoteInterface.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

86 changes: 0 additions & 86 deletions spine/device_remote.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"encoding/json"
"errors"
"reflect"
"slices"
"sync"

shipapi "github.com/enbility/ship-go/api"
Expand Down Expand Up @@ -181,91 +180,6 @@ func (d *DeviceRemote) UseCases() []model.UseCaseInformationDataType {
return nil
}

// Checks if the given actor, usecasename and provided server features are available
// Note: the server features are expected to be in a single entity and entity 0 is not checked!
func (d *DeviceRemote) VerifyUseCaseScenariosAndFeaturesSupport(
usecaseActor model.UseCaseActorType,
usecaseName model.UseCaseNameType,
scenarios []model.UseCaseScenarioSupportType,
serverFeatures []model.FeatureTypeType,
) bool {
entity := d.Entity(DeviceInformationAddressEntity)

nodemgmt := d.FeatureByEntityTypeAndRole(entity, model.FeatureTypeTypeNodeManagement, model.RoleTypeSpecial)

usecases, ok := nodemgmt.DataCopy(model.FunctionTypeNodeManagementUseCaseData).(*model.NodeManagementUseCaseDataType)

if !ok || usecases == nil || len(usecases.UseCaseInformation) == 0 {
return false
}

usecaseAndScenariosFound := false
for _, usecase := range usecases.UseCaseInformation {
if usecase.Actor == nil || *usecase.Actor != usecaseActor {
continue
}

for _, support := range usecase.UseCaseSupport {
if support.UseCaseName == nil || *support.UseCaseName != usecaseName ||
(support.UseCaseAvailable != nil && !*support.UseCaseAvailable) {
continue
}

var foundScenarios []model.UseCaseScenarioSupportType
for _, scenario := range support.ScenarioSupport {
if slices.Contains(scenarios, scenario) {
foundScenarios = append(foundScenarios, scenario)
}
}

if len(foundScenarios) == len(scenarios) {
usecaseAndScenariosFound = true
break
}
}

if usecaseAndScenariosFound {
break
}
}

if !usecaseAndScenariosFound {
return false
}

entities := d.Entities()
if len(entities) < 2 {
return false
}

entityWithServerFeaturesFound := false

for index, entity := range entities {
// ignore NodeManagement entity
if index == 0 {
continue
}

var foundServerFeatures []model.FeatureTypeType
for _, feature := range entity.Features() {
if feature.Role() != model.RoleTypeServer {
continue
}

if slices.Contains(serverFeatures, feature.Type()) {
foundServerFeatures = append(foundServerFeatures, feature.Type())
}
}

if len(serverFeatures) == len(foundServerFeatures) {
entityWithServerFeaturesFound = true
break
}
}

return entityWithServerFeaturesFound
}

func (d *DeviceRemote) UpdateDevice(description *model.NetworkManagementDeviceDescriptionDataType) {
if description != nil {
if description.DeviceAddress != nil && description.DeviceAddress.Device != nil {
Expand Down
184 changes: 0 additions & 184 deletions spine/device_remote_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,187 +95,3 @@ func (s *DeviceRemoteSuite) Test_Usecases() {
uc = s.remoteDevice.UseCases()
assert.NotNil(s.T(), uc)
}

func (s *DeviceRemoteSuite) Test_VerifyUseCaseScenariosAndFeaturesSupport_ElliJSON() {
_, _ = s.remoteDevice.HandleSpineMesssage(loadFileData(s.T(), nm_usecaseinformationlistdata_recv_reply_file_path))

result := s.remoteDevice.VerifyUseCaseScenariosAndFeaturesSupport(
model.UseCaseActorTypeBatterySystem,
model.UseCaseNameTypeControlOfBattery,
[]model.UseCaseScenarioSupportType{},
[]model.FeatureTypeType{},
)
assert.Equal(s.T(), false, result)

result = s.remoteDevice.VerifyUseCaseScenariosAndFeaturesSupport(
model.UseCaseActorTypeEVSE,
model.UseCaseNameTypeEVSECommissioningAndConfiguration,
[]model.UseCaseScenarioSupportType{},
[]model.FeatureTypeType{},
)
assert.Equal(s.T(), true, result)
}

func (s *DeviceRemoteSuite) Test_VerifyUseCaseScenariosAndFeaturesSupport() {
result := s.remoteDevice.VerifyUseCaseScenariosAndFeaturesSupport(
model.UseCaseActorTypeEVSE,
model.UseCaseNameTypeEVSECommissioningAndConfiguration,
[]model.UseCaseScenarioSupportType{},
[]model.FeatureTypeType{},
)
assert.Equal(s.T(), false, result)

nodeMgmtEntity := s.remoteDevice.Entity(DeviceInformationAddressEntity)
nodeMgmt := nodeMgmtEntity.FeatureOfAddress(util.Ptr(model.AddressFeatureType(NodeManagementFeatureId)))

// initialize with empty data
newData := &model.NodeManagementUseCaseDataType{
UseCaseInformation: []model.UseCaseInformationDataType{},
}
nodeMgmt.UpdateData(model.FunctionTypeNodeManagementUseCaseData, newData, nil, nil)

data := nodeMgmt.DataCopy(model.FunctionTypeNodeManagementUseCaseData).(*model.NodeManagementUseCaseDataType)

address := model.FeatureAddressType{
Device: s.remoteDevice.Address(),
Entity: s.remoteEntity.Address().Entity,
}

data.AddUseCaseSupport(
address,
model.UseCaseActorTypeBatterySystem,
model.UseCaseNameTypeControlOfBattery,
model.SpecificationVersionType("1.0.0"),
"",
true,
[]model.UseCaseScenarioSupportType{1},
)
nodeMgmt.UpdateData(model.FunctionTypeNodeManagementUseCaseData, data, nil, nil)
data = nodeMgmt.DataCopy(model.FunctionTypeNodeManagementUseCaseData).(*model.NodeManagementUseCaseDataType)

result = s.remoteDevice.VerifyUseCaseScenariosAndFeaturesSupport(
model.UseCaseActorTypeEVSE,
model.UseCaseNameTypeEVSECommissioningAndConfiguration,
nil,
nil,
)
assert.Equal(s.T(), false, result)

data.AddUseCaseSupport(
address,
model.UseCaseActorTypeEVSE,
model.UseCaseNameTypeEVCommissioningAndConfiguration,
model.SpecificationVersionType("1.0.0"),
"",
true,
[]model.UseCaseScenarioSupportType{1},
)
nodeMgmt.UpdateData(model.FunctionTypeNodeManagementUseCaseData, data, nil, nil)
data = nodeMgmt.DataCopy(model.FunctionTypeNodeManagementUseCaseData).(*model.NodeManagementUseCaseDataType)

result = s.remoteDevice.VerifyUseCaseScenariosAndFeaturesSupport(
model.UseCaseActorTypeEVSE,
model.UseCaseNameTypeEVSECommissioningAndConfiguration,
nil,
nil,
)
assert.Equal(s.T(), false, result)

data.AddUseCaseSupport(
address,
model.UseCaseActorTypeEVSE,
model.UseCaseNameTypeEVSECommissioningAndConfiguration,
model.SpecificationVersionType("1.0.0"),
"",
false,
[]model.UseCaseScenarioSupportType{1},
)
nodeMgmt.UpdateData(model.FunctionTypeNodeManagementUseCaseData, data, nil, nil)
data = nodeMgmt.DataCopy(model.FunctionTypeNodeManagementUseCaseData).(*model.NodeManagementUseCaseDataType)

result = s.remoteDevice.VerifyUseCaseScenariosAndFeaturesSupport(
model.UseCaseActorTypeEVSE,
model.UseCaseNameTypeEVSECommissioningAndConfiguration,
nil,
nil,
)
assert.Equal(s.T(), true, result)

data.AddUseCaseSupport(
address,
model.UseCaseActorTypeEVSE,
model.UseCaseNameTypeEVSECommissioningAndConfiguration,
model.SpecificationVersionType("1.0.0"),
"",
true,
[]model.UseCaseScenarioSupportType{1},
)
nodeMgmt.UpdateData(model.FunctionTypeNodeManagementUseCaseData, data, nil, nil)

result = s.remoteDevice.VerifyUseCaseScenariosAndFeaturesSupport(
model.UseCaseActorTypeEVSE,
model.UseCaseNameTypeEVSECommissioningAndConfiguration,
nil,
nil,
)
assert.Equal(s.T(), true, result)

result = s.remoteDevice.VerifyUseCaseScenariosAndFeaturesSupport(
model.UseCaseActorTypeEVSE,
model.UseCaseNameTypeEVSECommissioningAndConfiguration,
[]model.UseCaseScenarioSupportType{2},
nil,
)
assert.Equal(s.T(), false, result)

result = s.remoteDevice.VerifyUseCaseScenariosAndFeaturesSupport(
model.UseCaseActorTypeEVSE,
model.UseCaseNameTypeEVSECommissioningAndConfiguration,
[]model.UseCaseScenarioSupportType{1},
nil,
)
assert.Equal(s.T(), true, result)

result = s.remoteDevice.VerifyUseCaseScenariosAndFeaturesSupport(
model.UseCaseActorTypeEVSE,
model.UseCaseNameTypeEVSECommissioningAndConfiguration,
[]model.UseCaseScenarioSupportType{1},
[]model.FeatureTypeType{model.FeatureTypeTypeElectricalConnection},
)
assert.Equal(s.T(), false, result)

entity := s.remoteDevice.Entity([]model.AddressEntityType{1})
assert.NotNil(s.T(), entity)

feature := NewFeatureRemote(0, entity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeClient)
entity.AddFeature(feature)

result = s.remoteDevice.VerifyUseCaseScenariosAndFeaturesSupport(
model.UseCaseActorTypeEVSE,
model.UseCaseNameTypeEVSECommissioningAndConfiguration,
[]model.UseCaseScenarioSupportType{1},
[]model.FeatureTypeType{model.FeatureTypeTypeElectricalConnection},
)
assert.Equal(s.T(), false, result)

feature = NewFeatureRemote(0, entity, model.FeatureTypeTypeElectricalConnection, model.RoleTypeServer)
entity.AddFeature(feature)

result = s.remoteDevice.VerifyUseCaseScenariosAndFeaturesSupport(
model.UseCaseActorTypeEVSE,
model.UseCaseNameTypeEVSECommissioningAndConfiguration,
[]model.UseCaseScenarioSupportType{1},
[]model.FeatureTypeType{model.FeatureTypeTypeElectricalConnection},
)
assert.Equal(s.T(), true, result)

s.remoteDevice.RemoveEntityByAddress(feature.Address().Entity)

result = s.remoteDevice.VerifyUseCaseScenariosAndFeaturesSupport(
model.UseCaseActorTypeEVSE,
model.UseCaseNameTypeEVSECommissioningAndConfiguration,
[]model.UseCaseScenarioSupportType{1},
[]model.FeatureTypeType{model.FeatureTypeTypeElectricalConnection},
)
assert.Equal(s.T(), false, result)
}

0 comments on commit b587986

Please sign in to comment.