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 {
|
if callPart.Name != relAddr.Call.Name {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
relMatch = relAddr.Module.Child(relAddr.Call.Name, callPart.InstanceKey)
|
||||||
case AbsResource:
|
case AbsResource:
|
||||||
relMatch = relAddr.Module
|
relMatch = relAddr.Module
|
||||||
case AbsResourceInstance:
|
case AbsResourceInstance:
|
||||||
@ -203,11 +205,13 @@ func (e *MoveEndpointInModule) SelectsModule(addr ModuleInstance) bool {
|
|||||||
if len(relPart) != len(relMatch) {
|
if len(relPart) != len(relMatch) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := range relMatch {
|
for i := range relMatch {
|
||||||
if relPart[i] != relMatch[i] {
|
if relPart[i] != relMatch[i] {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true
|
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 {
|
func mustParseAbsResourceInstanceStr(s string) AbsResourceInstance {
|
||||||
r, diags := ParseAbsResourceInstanceStr(s)
|
r, diags := ParseAbsResourceInstanceStr(s)
|
||||||
if diags.HasErrors() {
|
if diags.HasErrors() {
|
||||||
|
Loading…
Reference in New Issue
Block a user