Circuits: allow and require loadpoints assigned to root circuit (#14525)

This commit is contained in:
andig 2024-06-23 18:02:52 +02:00 • committed by GitHub
parent 27d67d0d34
commit 2441b57b47
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 17 additions and 45 deletions

View file

@ -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() {

View file

@ -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))
}