mirror of
https://github.com/opentofu/opentofu.git
synced 2025-02-25 18:45:20 -06:00
missed relMatch for AbsModuleCall in SelectsModule
This commit is contained in:
parent
6087b1bdb9
commit
2dff0481c8
@ -192,6 +192,8 @@ func (e *MoveEndpointInModule) SelectsModule(addr ModuleInstance) bool {
|
||||
if callPart.Name != relAddr.Call.Name {
|
||||
return false
|
||||
}
|
||||
|
||||
relMatch = relAddr.Module.Child(relAddr.Call.Name, callPart.InstanceKey)
|
||||
case AbsResource:
|
||||
relMatch = relAddr.Module
|
||||
case AbsResourceInstance:
|
||||
@ -203,11 +205,13 @@ func (e *MoveEndpointInModule) SelectsModule(addr ModuleInstance) bool {
|
||||
if len(relPart) != len(relMatch) {
|
||||
return false
|
||||
}
|
||||
|
||||
for i := range relMatch {
|
||||
if relPart[i] != relMatch[i] {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
|
@ -1243,6 +1243,111 @@ func TestMoveEndpointChainAndNested(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestSelectsModule(t *testing.T) {
|
||||
tests := []struct {
|
||||
Endpoint *MoveEndpointInModule
|
||||
Addr ModuleInstance
|
||||
Selects bool
|
||||
}{
|
||||
{
|
||||
Endpoint: &MoveEndpointInModule{
|
||||
relSubject: AbsModuleCall{
|
||||
Module: mustParseModuleInstanceStr("module.foo[2]"),
|
||||
Call: ModuleCall{Name: "bar"},
|
||||
},
|
||||
},
|
||||
Addr: mustParseModuleInstanceStr("module.foo[2].module.bar[1]"),
|
||||
Selects: true,
|
||||
},
|
||||
{
|
||||
Endpoint: &MoveEndpointInModule{
|
||||
module: mustParseModuleInstanceStr("module.foo").Module(),
|
||||
relSubject: AbsModuleCall{
|
||||
Module: mustParseModuleInstanceStr("module.bar[2]"),
|
||||
Call: ModuleCall{Name: "baz"},
|
||||
},
|
||||
},
|
||||
Addr: mustParseModuleInstanceStr("module.foo[2].module.bar[2].module.baz"),
|
||||
Selects: true,
|
||||
},
|
||||
{
|
||||
Endpoint: &MoveEndpointInModule{
|
||||
module: mustParseModuleInstanceStr("module.foo").Module(),
|
||||
relSubject: AbsModuleCall{
|
||||
Module: mustParseModuleInstanceStr("module.bar[2]"),
|
||||
Call: ModuleCall{Name: "baz"},
|
||||
},
|
||||
},
|
||||
Addr: mustParseModuleInstanceStr("module.foo[2].module.bar[1].module.baz"),
|
||||
Selects: false,
|
||||
},
|
||||
{
|
||||
Endpoint: &MoveEndpointInModule{
|
||||
relSubject: AbsModuleCall{
|
||||
Module: mustParseModuleInstanceStr("module.bar"),
|
||||
Call: ModuleCall{Name: "baz"},
|
||||
},
|
||||
},
|
||||
Addr: mustParseModuleInstanceStr("module.bar[1].module.baz"),
|
||||
Selects: false,
|
||||
},
|
||||
{
|
||||
Endpoint: &MoveEndpointInModule{
|
||||
module: mustParseModuleInstanceStr("module.foo").Module(),
|
||||
relSubject: mustParseAbsResourceInstanceStr(`module.bar.resource.name["key"]`),
|
||||
},
|
||||
Addr: mustParseModuleInstanceStr(`module.foo[1].module.bar`),
|
||||
Selects: true,
|
||||
},
|
||||
{
|
||||
Endpoint: &MoveEndpointInModule{
|
||||
relSubject: mustParseModuleInstanceStr(`module.bar.module.baz["key"]`),
|
||||
},
|
||||
Addr: mustParseModuleInstanceStr(`module.bar.module.baz["key"]`),
|
||||
Selects: true,
|
||||
},
|
||||
{
|
||||
Endpoint: &MoveEndpointInModule{
|
||||
relSubject: mustParseAbsResourceInstanceStr(`module.bar.module.baz["key"].resource.name`).ContainingResource(),
|
||||
},
|
||||
Addr: mustParseModuleInstanceStr(`module.bar.module.baz["key"]`),
|
||||
Selects: true,
|
||||
},
|
||||
{
|
||||
Endpoint: &MoveEndpointInModule{
|
||||
module: mustParseModuleInstanceStr("module.nope").Module(),
|
||||
relSubject: mustParseAbsResourceInstanceStr(`module.bar.resource.name["key"]`),
|
||||
},
|
||||
Addr: mustParseModuleInstanceStr(`module.foo[1].module.bar`),
|
||||
Selects: false,
|
||||
},
|
||||
{
|
||||
Endpoint: &MoveEndpointInModule{
|
||||
relSubject: mustParseModuleInstanceStr(`module.bar.module.baz["key"]`),
|
||||
},
|
||||
Addr: mustParseModuleInstanceStr(`module.bar.module.baz["nope"]`),
|
||||
Selects: false,
|
||||
},
|
||||
{
|
||||
Endpoint: &MoveEndpointInModule{
|
||||
relSubject: mustParseAbsResourceInstanceStr(`module.nope.module.baz["key"].resource.name`).ContainingResource(),
|
||||
},
|
||||
Addr: mustParseModuleInstanceStr(`module.bar.module.baz["key"]`),
|
||||
Selects: false,
|
||||
},
|
||||
}
|
||||
|
||||
for i, test := range tests {
|
||||
t.Run(fmt.Sprintf("[%02d]%s.SelectsModule(%s)", i, test.Endpoint, test.Addr),
|
||||
func(t *testing.T) {
|
||||
if test.Endpoint.SelectsModule(test.Addr) != test.Selects {
|
||||
t.Errorf("expected %s SelectsModule %s == %t", test.Endpoint, test.Addr, test.Selects)
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
func mustParseAbsResourceInstanceStr(s string) AbsResourceInstance {
|
||||
r, diags := ParseAbsResourceInstanceStr(s)
|
||||
if diags.HasErrors() {
|
||||
|
Loading…
Reference in New Issue
Block a user