blob: 37a08f1604ff950c282690568f1e4d5a41d27841 [file] [log] [blame]
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package functions_test
import (
"fmt"
"regexp"
"testing"
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
"github.com/hashicorp/terraform-provider-google-beta/google-beta/acctest"
"github.com/hashicorp/terraform-provider-google-beta/google-beta/envvar"
)
func TestAccProviderFunction_zone_from_id(t *testing.T) {
t.Parallel()
zone := envvar.GetTestZoneFromEnv()
zoneRegex := regexp.MustCompile(fmt.Sprintf("^%s$", zone))
context := map[string]interface{}{
"function_name": "zone_from_id",
"output_name": "zone",
"resource_name": fmt.Sprintf("tf-test-zone-id-func-%s", acctest.RandString(t, 10)),
}
acctest.VcrTest(t, resource.TestCase{
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
Steps: []resource.TestStep{
{
// Can get the zone from a resource's id in one step
// Uses google_compute_disk resource's id attribute with format projects/{{project}}/zones/{{zone}}/disks/{{name}}
Config: testProviderFunction_get_zone_from_resource_id(context),
Check: resource.ComposeTestCheckFunc(
resource.TestMatchOutput(context["output_name"].(string), zoneRegex),
),
},
{
// Can get the zone from a resource's self_link in one step
// Uses google_compute_disk resource's self_link attribute
Config: testProviderFunction_get_zone_from_resource_self_link(context),
Check: resource.ComposeTestCheckFunc(
resource.TestMatchOutput(context["output_name"].(string), zoneRegex),
),
},
},
})
}
func testProviderFunction_get_zone_from_resource_id(context map[string]interface{}) string {
return acctest.Nprintf(`
# terraform block required for provider function to be found
terraform {
required_providers {
google = {
source = "hashicorp/google"
}
}
}
resource "google_compute_disk" "default" {
name = "%{resource_name}"
}
output "%{output_name}" {
value = provider::google::%{function_name}(google_compute_disk.default.id)
}
`, context)
}
func testProviderFunction_get_zone_from_resource_self_link(context map[string]interface{}) string {
return acctest.Nprintf(`
# terraform block required for provider function to be found
terraform {
required_providers {
google = {
source = "hashicorp/google"
}
}
}
resource "google_compute_disk" "default" {
name = "%{resource_name}"
}
output "%{output_name}" {
value = provider::google::%{function_name}(google_compute_disk.default.self_link)
}
`, context)
}