github.com/GoogleCloudPlatform/terraformer@v0.8.18/terraformutils/service_test.go (about) 1 package terraformutils 2 3 import ( 4 "reflect" 5 "testing" 6 7 "github.com/hashicorp/terraform/terraform" 8 ) 9 10 func TestEmptyFiltersParsing(t *testing.T) { 11 service := Service{} 12 service.ParseFilters([]string{}) 13 14 if !reflect.DeepEqual(service.Filter, []ResourceFilter{}) { 15 t.Errorf("failed to parse, got %v", service.Filter) 16 } 17 } 18 19 func TestIdFiltersParsing(t *testing.T) { 20 service := Service{} 21 service.ParseFilters([]string{"aws_vpc=myid"}) 22 23 if !reflect.DeepEqual(service.Filter, []ResourceFilter{ 24 { 25 ServiceName: "aws_vpc", 26 FieldPath: "id", 27 AcceptableValues: []string{"myid"}, 28 }}) { 29 t.Errorf("failed to parse, got %v", service.Filter) 30 } 31 } 32 33 func TestComplexIdFiltersParsing(t *testing.T) { 34 service := Service{} 35 service.ParseFilters([]string{"resource=id1:'project:dataset_id'"}) 36 37 if !reflect.DeepEqual(service.Filter, []ResourceFilter{ 38 { 39 ServiceName: "resource", 40 FieldPath: "id", 41 AcceptableValues: []string{"id1", "project:dataset_id"}, 42 }}) { 43 t.Errorf("failed to parse, got %v", service.Filter) 44 } 45 } 46 47 func TestEdgeIdFiltersParsing(t *testing.T) { 48 service := Service{} 49 service.ParseFilters([]string{"aws_vpc=:myid"}) 50 51 if !reflect.DeepEqual(service.Filter, []ResourceFilter{ 52 { 53 ServiceName: "aws_vpc", 54 FieldPath: "id", 55 AcceptableValues: []string{"myid"}, 56 }}) { 57 t.Errorf("failed to parse, got %v", service.Filter) 58 } 59 } 60 61 func TestServiceIdCleanupWithFilter(t *testing.T) { 62 service := Service{ 63 Resources: []Resource{{ 64 InstanceInfo: &terraform.InstanceInfo{ 65 Type: "type1", 66 }, 67 InstanceState: &terraform.InstanceState{ 68 ID: "myid", 69 }}, { 70 InstanceInfo: &terraform.InstanceInfo{ 71 Type: "type2", 72 }, 73 InstanceState: &terraform.InstanceState{ 74 ID: "myid", 75 }}}, 76 } 77 service.ParseFilters([]string{"type1=:otherId"}) 78 service.InitialCleanup() 79 80 if !reflect.DeepEqual(len(service.Resources), 1) { 81 t.Errorf("failed to cleanup") 82 } 83 } 84 85 func TestServiceAttributeCleanupWithFilter(t *testing.T) { 86 service := Service{ 87 Resources: []Resource{ 88 { 89 InstanceInfo: &terraform.InstanceInfo{ 90 Type: "aws_vpc", 91 }, 92 InstanceState: &terraform.InstanceState{ 93 ID: "vpc1", 94 }, 95 Item: mapI("tags", mapI("Name", "some"))}, 96 { 97 InstanceInfo: &terraform.InstanceInfo{ 98 Type: "aws_vpc", 99 }, 100 InstanceState: &terraform.InstanceState{ 101 ID: "vpc2", 102 }, 103 Item: mapI("tags", mapI("Name", "default"))}}, 104 } 105 service.ParseFilters([]string{"Name=tags.Name;Value=default"}) 106 service.PostRefreshCleanup() 107 108 if !reflect.DeepEqual(len(service.Resources), 1) { 109 t.Errorf("failed to cleanup") 110 } 111 } 112 113 func TestServiceAttributeNameOnlyCleanupWithFilter(t *testing.T) { 114 service := Service{ 115 Resources: []Resource{ 116 { 117 InstanceInfo: &terraform.InstanceInfo{ 118 Type: "aws_vpc", 119 }, 120 InstanceState: &terraform.InstanceState{ 121 ID: "vpc1", 122 }, 123 Item: mapI("tags", mapI("Abc", nil))}, 124 { 125 InstanceInfo: &terraform.InstanceInfo{ 126 Type: "aws_vpc", 127 }, 128 InstanceState: &terraform.InstanceState{ 129 ID: "vpc2", 130 }, 131 Item: mapI("tags", mapI("Name", "default"))}}, 132 } 133 service.ParseFilters([]string{"Name=tags.Abc"}) 134 service.PostRefreshCleanup() 135 136 if !reflect.DeepEqual(len(service.Resources), 1) { 137 t.Errorf("failed to cleanup") 138 } 139 }