diff --git a/cmd/setup.go b/cmd/setup.go index ebc8fa0b80..328fc60343 100644 --- a/cmd/setup.go +++ b/cmd/setup.go @@ -937,14 +937,10 @@ CONTINUE: hasRoot = true } - for _, lp := range loadpoints { - if lp.GetCircuit() == instance { - if isRoot { - return fmt.Errorf("root circuit must not be assigned to loadpoint %s", lp.Title()) - } - - continue CONTINUE - } + if slices.ContainsFunc(loadpoints, func(lp *core.Loadpoint) bool { + return lp.GetCircuit() == instance + }) { + continue CONTINUE } if !isRoot && !instance.HasMeter() { diff --git a/cmd/setup_circuits_test.go b/cmd/setup_circuits_test.go index c8d1f8aa07..80f65190a9 100644 --- a/cmd/setup_circuits_test.go +++ b/cmd/setup_circuits_test.go @@ -98,40 +98,22 @@ loadpoints: } func (suite *circuitsTestSuite) TestMissingRootCircuit() { - var conf globalconfig.All - viper.SetConfigType("yaml") - - suite.Require().NoError(viper.ReadConfig(strings.NewReader(` -loadpoints: -- charger: test -`))) - - suite.Require().NoError(viper.UnmarshalExact(&conf)) - ctrl := gomock.NewController(suite.T()) circuit := api.NewMockCircuit(ctrl) - // mock circuit + // circuit device suite.Require().NoError(config.Circuits().Add(config.NewStaticDevice(config.Named{ - Name: "test", + Name: "master", }, api.Circuit(circuit)))) - // mock charger - suite.Require().NoError(config.Chargers().Add(config.NewStaticDevice(config.Named{ - Name: "test", - }, api.Charger(nil)))) - - lps, err := configureLoadpoints(conf) - suite.Require().NoError(err) - - // root circuit + // root circuit present circuit.EXPECT().GetParent().Return(nil) circuit.EXPECT().HasMeter().Return(true) - suite.Require().NoError(validateCircuits(lps)) + suite.Require().NoError(validateCircuits(nil)) - // no root circuit + // root circuit missing circuit.EXPECT().GetParent().Return(circuit) - err = validateCircuits(lps) + err := validateCircuits(nil) suite.Require().Error(err) suite.Require().Equal("missing root circuit", err.Error()) } @@ -141,20 +123,17 @@ func (suite *circuitsTestSuite) TestLoadpointUsingRootCircuit() { viper.SetConfigType("yaml") suite.Require().NoError(viper.ReadConfig(strings.NewReader(` +circuits: +- name: master loadpoints: - charger: test - circuit: root + circuit: master `))) suite.Require().NoError(viper.UnmarshalExact(&conf)) - ctrl := gomock.NewController(suite.T()) - circuit := api.NewMockCircuit(ctrl) - - // mock circuit - suite.Require().NoError(config.Circuits().Add(config.NewStaticDevice(config.Named{ - Name: "root", - }, api.Circuit(circuit)))) + suite.Require().NoError(configureCircuits(conf.Circuits)) + suite.Require().Len(config.Circuits().Devices(), 1) // mock charger suite.Require().NoError(config.Chargers().Add(config.NewStaticDevice(config.Named{ @@ -164,9 +143,6 @@ loadpoints: lps, err := configureLoadpoints(conf) suite.Require().NoError(err) - // root circuit - circuit.EXPECT().GetParent().Return(nil) - err = validateCircuits(lps) - suite.Require().Error(err) - suite.Require().Equal("root circuit must not be assigned to loadpoint ", err.Error()) + // lp using root circuit is valid + suite.Require().NoError(validateCircuits(lps)) }