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  }