github.com/GoogleCloudPlatform/terraformer@v0.8.18/terraformutils/providerwrapper/provider_test.go (about) 1 package providerwrapper //nolint 2 3 import ( 4 "regexp" 5 "testing" 6 7 "github.com/hashicorp/terraform/configs/configschema" 8 "github.com/zclconf/go-cty/cty" 9 ) 10 11 func TestIgnoredAttributes(t *testing.T) { 12 attributes := map[string]*configschema.Attribute{ 13 "computed_attribute": { 14 Type: cty.Number, 15 Computed: true, 16 }, 17 "required_attribute": { 18 Type: cty.String, 19 Required: true, 20 }, 21 } 22 23 testCases := map[string]struct { 24 block map[string]*configschema.NestedBlock 25 ignoredAttributes []string 26 notIgnoredAttributes []string 27 }{ 28 "nesting_set": {map[string]*configschema.NestedBlock{ 29 "attribute_one": { 30 Block: configschema.Block{ 31 Attributes: attributes, 32 }, 33 Nesting: configschema.NestingSet, 34 }, 35 }, []string{"nesting_set.attribute_one.computed_attribute"}, 36 []string{"nesting_set.attribute_one.required_attribute"}}, 37 "nesting_list": {map[string]*configschema.NestedBlock{ 38 "attribute_one": { 39 Block: configschema.Block{ 40 Attributes: map[string]*configschema.Attribute{}, 41 BlockTypes: map[string]*configschema.NestedBlock{ 42 "attribute_two_nested": { 43 Nesting: configschema.NestingList, 44 Block: configschema.Block{ 45 Attributes: attributes, 46 }, 47 }, 48 }, 49 }, 50 Nesting: configschema.NestingList, 51 }, 52 }, []string{"nesting_list.0.attribute_one.0.attribute_two_nested.computed_attribute"}, 53 []string{"nesting_list.0.attribute_one.0.attribute_two_nested.required_attribute"}}, 54 } 55 56 for key, tc := range testCases { 57 t.Run(key, func(t *testing.T) { 58 provider := ProviderWrapper{} 59 readOnlyAttributes := provider.readObjBlocks(tc.block, []string{}, key) 60 for _, attr := range tc.ignoredAttributes { 61 if ignored := isAttributeIgnored(attr, readOnlyAttributes); !ignored { 62 t.Errorf("attribute \"%s\" was not ignored. Pattern list: %s", attr, readOnlyAttributes) 63 } 64 } 65 66 for _, attr := range tc.notIgnoredAttributes { 67 if ignored := isAttributeIgnored(attr, readOnlyAttributes); ignored { 68 t.Errorf("attribute \"%s\" was ignored. Pattern list: %s", attr, readOnlyAttributes) 69 } 70 } 71 }) 72 } 73 } 74 75 func isAttributeIgnored(name string, patterns []string) bool { 76 ignored := false 77 for _, pattern := range patterns { 78 if match, _ := regexp.MatchString(pattern, name); match { 79 ignored = true 80 break 81 } 82 } 83 return ignored 84 }