| package addrs |
| |
| import ( |
| "fmt" |
| "testing" |
| ) |
| |
| func TestResourceEqual_true(t *testing.T) { |
| resources := []Resource{ |
| { |
| Mode: ManagedResourceMode, |
| Type: "a", |
| Name: "b", |
| }, |
| { |
| Mode: DataResourceMode, |
| Type: "a", |
| Name: "b", |
| }, |
| } |
| for _, r := range resources { |
| t.Run(r.String(), func(t *testing.T) { |
| if !r.Equal(r) { |
| t.Fatalf("expected %#v to be equal to itself", r) |
| } |
| }) |
| } |
| } |
| |
| func TestResourceEqual_false(t *testing.T) { |
| testCases := []struct { |
| left Resource |
| right Resource |
| }{ |
| { |
| Resource{Mode: DataResourceMode, Type: "a", Name: "b"}, |
| Resource{Mode: ManagedResourceMode, Type: "a", Name: "b"}, |
| }, |
| { |
| Resource{Mode: ManagedResourceMode, Type: "a", Name: "b"}, |
| Resource{Mode: ManagedResourceMode, Type: "b", Name: "b"}, |
| }, |
| { |
| Resource{Mode: ManagedResourceMode, Type: "a", Name: "b"}, |
| Resource{Mode: ManagedResourceMode, Type: "a", Name: "c"}, |
| }, |
| } |
| for _, tc := range testCases { |
| t.Run(fmt.Sprintf("%s = %s", tc.left, tc.right), func(t *testing.T) { |
| if tc.left.Equal(tc.right) { |
| t.Fatalf("expected %#v not to be equal to %#v", tc.left, tc.right) |
| } |
| |
| if tc.right.Equal(tc.left) { |
| t.Fatalf("expected %#v not to be equal to %#v", tc.right, tc.left) |
| } |
| }) |
| } |
| } |
| |
| func TestResourceInstanceEqual_true(t *testing.T) { |
| resources := []ResourceInstance{ |
| { |
| Resource: Resource{ |
| Mode: ManagedResourceMode, |
| Type: "a", |
| Name: "b", |
| }, |
| Key: IntKey(0), |
| }, |
| { |
| Resource: Resource{ |
| Mode: DataResourceMode, |
| Type: "a", |
| Name: "b", |
| }, |
| Key: StringKey("x"), |
| }, |
| } |
| for _, r := range resources { |
| t.Run(r.String(), func(t *testing.T) { |
| if !r.Equal(r) { |
| t.Fatalf("expected %#v to be equal to itself", r) |
| } |
| }) |
| } |
| } |
| |
| func TestResourceInstanceEqual_false(t *testing.T) { |
| testCases := []struct { |
| left ResourceInstance |
| right ResourceInstance |
| }{ |
| { |
| ResourceInstance{ |
| Resource: Resource{Mode: DataResourceMode, Type: "a", Name: "b"}, |
| Key: IntKey(0), |
| }, |
| ResourceInstance{ |
| Resource: Resource{Mode: ManagedResourceMode, Type: "a", Name: "b"}, |
| Key: IntKey(0), |
| }, |
| }, |
| { |
| ResourceInstance{ |
| Resource: Resource{Mode: ManagedResourceMode, Type: "a", Name: "b"}, |
| Key: IntKey(0), |
| }, |
| ResourceInstance{ |
| Resource: Resource{Mode: ManagedResourceMode, Type: "b", Name: "b"}, |
| Key: IntKey(0), |
| }, |
| }, |
| { |
| ResourceInstance{ |
| Resource: Resource{Mode: ManagedResourceMode, Type: "a", Name: "b"}, |
| Key: IntKey(0), |
| }, |
| ResourceInstance{ |
| Resource: Resource{Mode: ManagedResourceMode, Type: "a", Name: "c"}, |
| Key: IntKey(0), |
| }, |
| }, |
| { |
| ResourceInstance{ |
| Resource: Resource{Mode: DataResourceMode, Type: "a", Name: "b"}, |
| Key: IntKey(0), |
| }, |
| ResourceInstance{ |
| Resource: Resource{Mode: DataResourceMode, Type: "a", Name: "b"}, |
| Key: StringKey("0"), |
| }, |
| }, |
| } |
| for _, tc := range testCases { |
| t.Run(fmt.Sprintf("%s = %s", tc.left, tc.right), func(t *testing.T) { |
| if tc.left.Equal(tc.right) { |
| t.Fatalf("expected %#v not to be equal to %#v", tc.left, tc.right) |
| } |
| |
| if tc.right.Equal(tc.left) { |
| t.Fatalf("expected %#v not to be equal to %#v", tc.right, tc.left) |
| } |
| }) |
| } |
| } |
| |
| func TestAbsResourceInstanceEqual_true(t *testing.T) { |
| managed := Resource{Mode: ManagedResourceMode, Type: "a", Name: "b"} |
| data := Resource{Mode: DataResourceMode, Type: "a", Name: "b"} |
| |
| foo, diags := ParseModuleInstanceStr("module.foo") |
| if len(diags) > 0 { |
| t.Fatalf("unexpected diags: %s", diags.Err()) |
| } |
| foobar, diags := ParseModuleInstanceStr("module.foo[1].module.bar") |
| if len(diags) > 0 { |
| t.Fatalf("unexpected diags: %s", diags.Err()) |
| } |
| |
| instances := []AbsResourceInstance{ |
| managed.Instance(IntKey(0)).Absolute(foo), |
| data.Instance(IntKey(0)).Absolute(foo), |
| managed.Instance(StringKey("a")).Absolute(foobar), |
| } |
| for _, r := range instances { |
| t.Run(r.String(), func(t *testing.T) { |
| if !r.Equal(r) { |
| t.Fatalf("expected %#v to be equal to itself", r) |
| } |
| }) |
| } |
| } |
| |
| func TestAbsResourceInstanceEqual_false(t *testing.T) { |
| managed := Resource{Mode: ManagedResourceMode, Type: "a", Name: "b"} |
| data := Resource{Mode: DataResourceMode, Type: "a", Name: "b"} |
| |
| foo, diags := ParseModuleInstanceStr("module.foo") |
| if len(diags) > 0 { |
| t.Fatalf("unexpected diags: %s", diags.Err()) |
| } |
| foobar, diags := ParseModuleInstanceStr("module.foo[1].module.bar") |
| if len(diags) > 0 { |
| t.Fatalf("unexpected diags: %s", diags.Err()) |
| } |
| |
| testCases := []struct { |
| left AbsResourceInstance |
| right AbsResourceInstance |
| }{ |
| { |
| managed.Instance(IntKey(0)).Absolute(foo), |
| data.Instance(IntKey(0)).Absolute(foo), |
| }, |
| { |
| managed.Instance(IntKey(0)).Absolute(foo), |
| managed.Instance(IntKey(0)).Absolute(foobar), |
| }, |
| { |
| managed.Instance(IntKey(0)).Absolute(foo), |
| managed.Instance(StringKey("0")).Absolute(foo), |
| }, |
| } |
| for _, tc := range testCases { |
| t.Run(fmt.Sprintf("%s = %s", tc.left, tc.right), func(t *testing.T) { |
| if tc.left.Equal(tc.right) { |
| t.Fatalf("expected %#v not to be equal to %#v", tc.left, tc.right) |
| } |
| |
| if tc.right.Equal(tc.left) { |
| t.Fatalf("expected %#v not to be equal to %#v", tc.right, tc.left) |
| } |
| }) |
| } |
| } |
| |
| func TestAbsResourceUniqueKey(t *testing.T) { |
| resourceAddr1 := Resource{ |
| Mode: ManagedResourceMode, |
| Type: "a", |
| Name: "b1", |
| }.Absolute(RootModuleInstance) |
| resourceAddr2 := Resource{ |
| Mode: ManagedResourceMode, |
| Type: "a", |
| Name: "b2", |
| }.Absolute(RootModuleInstance) |
| resourceAddr3 := Resource{ |
| Mode: ManagedResourceMode, |
| Type: "a", |
| Name: "in_module", |
| }.Absolute(RootModuleInstance.Child("boop", NoKey)) |
| |
| tests := []struct { |
| Reciever AbsResource |
| Other UniqueKeyer |
| WantEqual bool |
| }{ |
| { |
| resourceAddr1, |
| resourceAddr1, |
| true, |
| }, |
| { |
| resourceAddr1, |
| resourceAddr2, |
| false, |
| }, |
| { |
| resourceAddr1, |
| resourceAddr3, |
| false, |
| }, |
| { |
| resourceAddr3, |
| resourceAddr3, |
| true, |
| }, |
| { |
| resourceAddr1, |
| resourceAddr1.Instance(NoKey), |
| false, // no-key instance key is distinct from its resource even though they have the same String result |
| }, |
| { |
| resourceAddr1, |
| resourceAddr1.Instance(IntKey(1)), |
| false, |
| }, |
| } |
| |
| for _, test := range tests { |
| t.Run(fmt.Sprintf("%s matches %T %s?", test.Reciever, test.Other, test.Other), func(t *testing.T) { |
| rKey := test.Reciever.UniqueKey() |
| oKey := test.Other.UniqueKey() |
| |
| gotEqual := rKey == oKey |
| if gotEqual != test.WantEqual { |
| t.Errorf( |
| "wrong result\nreceiver: %s\nother: %s (%T)\ngot: %t\nwant: %t", |
| test.Reciever, test.Other, test.Other, |
| gotEqual, test.WantEqual, |
| ) |
| } |
| }) |
| } |
| } |
| |
| func TestConfigResourceEqual_true(t *testing.T) { |
| resources := []ConfigResource{ |
| { |
| Resource: Resource{Mode: ManagedResourceMode, Type: "a", Name: "b"}, |
| Module: RootModule, |
| }, |
| { |
| Resource: Resource{Mode: DataResourceMode, Type: "a", Name: "b"}, |
| Module: RootModule, |
| }, |
| { |
| Resource: Resource{Mode: ManagedResourceMode, Type: "a", Name: "b"}, |
| Module: Module{"foo"}, |
| }, |
| { |
| Resource: Resource{Mode: DataResourceMode, Type: "a", Name: "b"}, |
| Module: Module{"foo"}, |
| }, |
| } |
| for _, r := range resources { |
| t.Run(r.String(), func(t *testing.T) { |
| if !r.Equal(r) { |
| t.Fatalf("expected %#v to be equal to itself", r) |
| } |
| }) |
| } |
| } |
| |
| func TestConfigResourceEqual_false(t *testing.T) { |
| managed := Resource{Mode: ManagedResourceMode, Type: "a", Name: "b"} |
| data := Resource{Mode: DataResourceMode, Type: "a", Name: "b"} |
| |
| foo := Module{"foo"} |
| foobar := Module{"foobar"} |
| testCases := []struct { |
| left ConfigResource |
| right ConfigResource |
| }{ |
| { |
| ConfigResource{Resource: managed, Module: foo}, |
| ConfigResource{Resource: data, Module: foo}, |
| }, |
| { |
| ConfigResource{Resource: managed, Module: foo}, |
| ConfigResource{Resource: managed, Module: foobar}, |
| }, |
| } |
| for _, tc := range testCases { |
| t.Run(fmt.Sprintf("%s = %s", tc.left, tc.right), func(t *testing.T) { |
| if tc.left.Equal(tc.right) { |
| t.Fatalf("expected %#v not to be equal to %#v", tc.left, tc.right) |
| } |
| |
| if tc.right.Equal(tc.left) { |
| t.Fatalf("expected %#v not to be equal to %#v", tc.right, tc.left) |
| } |
| }) |
| } |
| } |