Skip to content

Commit

Permalink
Create helper function for cleaner code
Browse files Browse the repository at this point in the history
  • Loading branch information
nam054 committed Mar 4, 2025
1 parent ea8dcf1 commit ecd95f9
Showing 1 changed file with 83 additions and 150 deletions.
233 changes: 83 additions & 150 deletions internal/service/lakeformation/opt_in_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,81 +101,7 @@ func testAccCheckOptInDestroy(ctx context.Context) resource.TestCheckFunc {
Resource: &awstypes.Resource{},
}

type resourceConstructor func(*terraform.ResourceState) *awstypes.Resource

resourceConstructors := map[string]resourceConstructor{
"resource_data.0.catalog.0.id": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{Catalog: &awstypes.CatalogResource{Id: aws.String(rs.Primary.Attributes["resource_data.0.catalog.0.id"])}}
},
"resource_data.0.database.0.name": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{
Database: &awstypes.DatabaseResource{
Name: aws.String(rs.Primary.Attributes["resource_data.0.database.0.name"]),
CatalogId: aws.String(rs.Primary.Attributes["resource_data.0.database.0.catalog_id"]),
},
}
},
"resource_data.0.data_cells_filter.0.name": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{
DataCellsFilter: &awstypes.DataCellsFilterResource{
Name: aws.String(rs.Primary.Attributes["resource_data.0.data_cells_filter.0.name"]),
DatabaseName: aws.String(rs.Primary.Attributes["resource_data.0.data_cells_filter.0.database_name"]),
TableCatalogId: aws.String(rs.Primary.Attributes["resource_data.0.data_cells_filter.0.table_catalog_id"]),
},
}
},
"resource_data.0.data_location.0.resource_arn": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{
DataLocation: &awstypes.DataLocationResource{
ResourceArn: aws.String(rs.Primary.Attributes["resource_data.0.data_location.0.resource_arn"]),
CatalogId: aws.String(rs.Primary.Attributes["resource_data.0.data_location.0.catalog_id"]),
},
}
},
"resource_data.0.lf_tag.0.key": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{LFTag: &awstypes.LFTagKeyResource{TagKey: aws.String(rs.Primary.Attributes["resource_data.0.lf_tag.0.key"])}}
},
"resource_data.0.lf_tag_expression.0.name": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{
LFTagExpression: &awstypes.LFTagExpressionResource{
Name: aws.String(rs.Primary.Attributes["resource_data.0.lf_tag_expression.0.name"]),
CatalogId: aws.String(rs.Primary.Attributes["resource_data.0.lf_tag_expression.0.catalog_id"]),
},
}
},
"resource_data.0.lf_tag_policy.0.resource_type": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{
LFTagPolicy: &awstypes.LFTagPolicyResource{
ResourceType: awstypes.ResourceType(rs.Primary.Attributes["resource_data.0.lf_tag_policy.0.resource_type"]),
CatalogId: aws.String(rs.Primary.Attributes["resource_data.0.lf_tag_policy.0.catalog_id"]),
ExpressionName: aws.String(rs.Primary.Attributes["resource_data.0.lf_tag_policy.0.expression_name"]),
},
}
},
"resource_data.0.table.0.name": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{
Table: &awstypes.TableResource{
Name: aws.String(rs.Primary.Attributes["resource_data.0.table.0.name"]),
DatabaseName: aws.String(rs.Primary.Attributes["resource_data.0.table.0.database_name"]),
},
}
},
"resource_data.0.table_with_columns.0.name": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{
TableWithColumns: &awstypes.TableWithColumnsResource{
Name: aws.String(rs.Primary.Attributes["resource_data.0.table_with_columns.0.name"]),
DatabaseName: aws.String(rs.Primary.Attributes["resource_data.0.table_with_columns.0.database_name"]),
},
}
},
}

for path, constructor := range resourceConstructors {
if v, ok := rs.Primary.Attributes[path]; ok && v != "" {
in.Resource = constructor(rs)
break
}
}
in.Resource = constructOptInResource(rs)

_, err := tflakeformation.FindOptInByID(ctx, conn, principalID, in.Resource)
if err != nil {
Expand Down Expand Up @@ -210,81 +136,7 @@ func testAccCheckOptInExists(ctx context.Context, name string, optin *lakeformat
principalID := rs.Primary.ID
in := &lakeformation.ListLakeFormationOptInsInput{}

type resourceConstructor func(*terraform.ResourceState) *awstypes.Resource

resourceConstructors := map[string]resourceConstructor{
"resource_data.0.catalog.0.id": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{Catalog: &awstypes.CatalogResource{Id: aws.String(rs.Primary.Attributes["resource_data.0.catalog.0.id"])}}
},
"resource_data.0.database.0.name": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{
Database: &awstypes.DatabaseResource{
Name: aws.String(rs.Primary.Attributes["resource_data.0.database.0.name"]),
CatalogId: aws.String(rs.Primary.Attributes["resource_data.0.database.0.catalog_id"]),
},
}
},
"resource_data.0.data_cells_filter.0.name": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{
DataCellsFilter: &awstypes.DataCellsFilterResource{
Name: aws.String(rs.Primary.Attributes["resource_data.0.data_cells_filter.0.name"]),
DatabaseName: aws.String(rs.Primary.Attributes["resource_data.0.data_cells_filter.0.database_name"]),
TableCatalogId: aws.String(rs.Primary.Attributes["resource_data.0.data_cells_filter.0.table_catalog_id"]),
},
}
},
"resource_data.0.data_location.0.resource_arn": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{
DataLocation: &awstypes.DataLocationResource{
ResourceArn: aws.String(rs.Primary.Attributes["resource_data.0.data_location.0.resource_arn"]),
CatalogId: aws.String(rs.Primary.Attributes["resource_data.0.data_location.0.catalog_id"]),
},
}
},
"resource_data.0.lf_tag.0.key": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{LFTag: &awstypes.LFTagKeyResource{TagKey: aws.String(rs.Primary.Attributes["resource_data.0.lf_tag.0.key"])}}
},
"resource_data.0.lf_tag_expression.0.name": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{
LFTagExpression: &awstypes.LFTagExpressionResource{
Name: aws.String(rs.Primary.Attributes["resource_data.0.lf_tag_expression.0.name"]),
CatalogId: aws.String(rs.Primary.Attributes["resource_data.0.lf_tag_expression.0.catalog_id"]),
},
}
},
"resource_data.0.lf_tag_policy.0.resource_type": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{
LFTagPolicy: &awstypes.LFTagPolicyResource{
ResourceType: awstypes.ResourceType(rs.Primary.Attributes["resource_data.0.lf_tag_policy.0.resource_type"]),
CatalogId: aws.String(rs.Primary.Attributes["resource_data.0.lf_tag_policy.0.catalog_id"]),
ExpressionName: aws.String(rs.Primary.Attributes["resource_data.0.lf_tag_policy.0.expression_name"]),
},
}
},
"resource_data.0.table.0.name": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{
Table: &awstypes.TableResource{
Name: aws.String(rs.Primary.Attributes["resource_data.0.table.0.name"]),
DatabaseName: aws.String(rs.Primary.Attributes["resource_data.0.table.0.database_name"]),
},
}
},
"resource_data.0.table_with_columns.0.name": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{
TableWithColumns: &awstypes.TableWithColumnsResource{
Name: aws.String(rs.Primary.Attributes["resource_data.0.table_with_columns.0.name"]),
DatabaseName: aws.String(rs.Primary.Attributes["resource_data.0.table_with_columns.0.database_name"]),
},
}
},
}

for path, constructor := range resourceConstructors {
if v, ok := rs.Primary.Attributes[path]; ok && v != "" {
in.Resource = constructor(rs)
break
}
}
in.Resource = constructOptInResource(rs)

if in.Resource == nil {
return create.Error(names.LakeFormation, create.ErrActionCheckingExistence, tflakeformation.ResNameOptIn, name, errors.New("no valid resource found in state"))
Expand All @@ -301,6 +153,87 @@ func testAccCheckOptInExists(ctx context.Context, name string, optin *lakeformat
}
}

func constructOptInResource(rs *terraform.ResourceState) *awstypes.Resource {
type resourceConstructor func(*terraform.ResourceState) *awstypes.Resource

resourceConstructors := map[string]resourceConstructor{
"resource_data.0.catalog.0.id": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{Catalog: &awstypes.CatalogResource{Id: aws.String(rs.Primary.Attributes["resource_data.0.catalog.0.id"])}}
},
"resource_data.0.database.0.name": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{
Database: &awstypes.DatabaseResource{
Name: aws.String(rs.Primary.Attributes["resource_data.0.database.0.name"]),
CatalogId: aws.String(rs.Primary.Attributes["resource_data.0.database.0.catalog_id"]),
},
}
},
"resource_data.0.data_cells_filter.0.name": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{
DataCellsFilter: &awstypes.DataCellsFilterResource{
Name: aws.String(rs.Primary.Attributes["resource_data.0.data_cells_filter.0.name"]),
DatabaseName: aws.String(rs.Primary.Attributes["resource_data.0.data_cells_filter.0.database_name"]),
TableCatalogId: aws.String(rs.Primary.Attributes["resource_data.0.data_cells_filter.0.table_catalog_id"]),
},
}
},
"resource_data.0.data_location.0.resource_arn": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{
DataLocation: &awstypes.DataLocationResource{
ResourceArn: aws.String(rs.Primary.Attributes["resource_data.0.data_location.0.resource_arn"]),
CatalogId: aws.String(rs.Primary.Attributes["resource_data.0.data_location.0.catalog_id"]),
},
}
},
"resource_data.0.lf_tag.0.key": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{LFTag: &awstypes.LFTagKeyResource{TagKey: aws.String(rs.Primary.Attributes["resource_data.0.lf_tag.0.key"])}}
},
"resource_data.0.lf_tag_expression.0.name": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{
LFTagExpression: &awstypes.LFTagExpressionResource{
Name: aws.String(rs.Primary.Attributes["resource_data.0.lf_tag_expression.0.name"]),
CatalogId: aws.String(rs.Primary.Attributes["resource_data.0.lf_tag_expression.0.catalog_id"]),
},
}
},
"resource_data.0.lf_tag_policy.0.resource_type": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{
LFTagPolicy: &awstypes.LFTagPolicyResource{
ResourceType: awstypes.ResourceType(rs.Primary.Attributes["resource_data.0.lf_tag_policy.0.resource_type"]),
CatalogId: aws.String(rs.Primary.Attributes["resource_data.0.lf_tag_policy.0.catalog_id"]),
ExpressionName: aws.String(rs.Primary.Attributes["resource_data.0.lf_tag_policy.0.expression_name"]),
},
}
},
"resource_data.0.table.0.name": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{
Table: &awstypes.TableResource{
Name: aws.String(rs.Primary.Attributes["resource_data.0.table.0.name"]),
DatabaseName: aws.String(rs.Primary.Attributes["resource_data.0.table.0.database_name"]),
},
}
},
"resource_data.0.table_with_columns.0.name": func(rs *terraform.ResourceState) *awstypes.Resource {
return &awstypes.Resource{
TableWithColumns: &awstypes.TableWithColumnsResource{
Name: aws.String(rs.Primary.Attributes["resource_data.0.table_with_columns.0.name"]),
DatabaseName: aws.String(rs.Primary.Attributes["resource_data.0.table_with_columns.0.database_name"]),
},
}
},
}

var resource *awstypes.Resource
for path, constructor := range resourceConstructors {
if v, ok := rs.Primary.Attributes[path]; ok && v != "" {
resource = constructor(rs)
break
}
}

return resource
}

func testAccOptInConfig_basic(rName string) string {
return fmt.Sprintf(`
data "aws_partition" "current" {}
Expand Down

0 comments on commit ecd95f9

Please sign in to comment.