Skip to content

Commit f39fd6f

Browse files
Support expired access policy tokens (#1678)
* Include randomness in token names * Detect 404 issue * Resolve 404 issue * lint
1 parent 2f13039 commit f39fd6f

File tree

2 files changed

+37
-12
lines changed

2 files changed

+37
-12
lines changed

internal/common/errcheck.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1111
)
1212

13-
const NotFoundError = "status: 404"
13+
const NotFoundError = "404"
1414

1515
// CheckReadError checks for common cases on resource read/delete paths:
1616
// - If the resource no longer exists and 404s, it should be removed from state and return nil, to stop processing the read.

internal/resources/cloud/resource_cloud_access_policy_token_test.go

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"fmt"
66
"os"
7+
"strconv"
78
"strings"
89
"time"
910

@@ -13,6 +14,7 @@ import (
1314
"github.com/grafana/terraform-provider-grafana/v3/internal/common"
1415
"github.com/grafana/terraform-provider-grafana/v3/internal/resources/cloud"
1516
"github.com/grafana/terraform-provider-grafana/v3/internal/testutils"
17+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
1618
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1719
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
1820
)
@@ -38,6 +40,11 @@ func TestResourceAccessPolicyToken_Basic(t *testing.T) {
3840
"metrics:write",
3941
}
4042

43+
randomName := acctest.RandStringFromCharSet(6, acctest.CharSetAlpha)
44+
initialName := fmt.Sprintf("initial-%s", randomName)
45+
initialToken := fmt.Sprintf("token-%s", initialName)
46+
updatedName := fmt.Sprintf("updated-%s", randomName)
47+
4148
resource.Test(t, resource.TestCase{
4249
ProtoV5ProviderFactories: testutils.ProtoV5ProviderFactories,
4350
CheckDestroy: resource.ComposeTestCheckFunc(
@@ -46,13 +53,13 @@ func TestResourceAccessPolicyToken_Basic(t *testing.T) {
4653
),
4754
Steps: []resource.TestStep{
4855
{
49-
Config: testAccCloudAccessPolicyTokenConfigBasic("initial", "", "us", initialScopes, expiresAt),
56+
Config: testAccCloudAccessPolicyTokenConfigBasic(initialName, "", "us", initialScopes, expiresAt),
5057
Check: resource.ComposeTestCheckFunc(
5158
testAccCloudAccessPolicyCheckExists("grafana_cloud_access_policy.test", &policy),
5259
testAccCloudAccessPolicyTokenCheckExists("grafana_cloud_access_policy_token.test", &policyToken),
5360

54-
resource.TestCheckResourceAttr("grafana_cloud_access_policy.test", "name", "initial"),
55-
resource.TestCheckResourceAttr("grafana_cloud_access_policy.test", "display_name", "initial"),
61+
resource.TestCheckResourceAttr("grafana_cloud_access_policy.test", "name", initialName),
62+
resource.TestCheckResourceAttr("grafana_cloud_access_policy.test", "display_name", initialName),
5663
resource.TestCheckResourceAttr("grafana_cloud_access_policy.test", "scopes.#", "6"),
5764
resource.TestCheckResourceAttr("grafana_cloud_access_policy.test", "scopes.0", "accesspolicies:delete"),
5865
resource.TestCheckResourceAttr("grafana_cloud_access_policy.test", "scopes.1", "accesspolicies:read"),
@@ -63,37 +70,54 @@ func TestResourceAccessPolicyToken_Basic(t *testing.T) {
6370
resource.TestCheckResourceAttr("grafana_cloud_access_policy.test", "realm.#", "1"),
6471
resource.TestCheckResourceAttr("grafana_cloud_access_policy.test", "realm.0.type", "org"),
6572

66-
resource.TestCheckResourceAttr("grafana_cloud_access_policy_token.test", "name", "token-initial"),
67-
resource.TestCheckResourceAttr("grafana_cloud_access_policy_token.test", "display_name", "token-initial"),
73+
resource.TestCheckResourceAttr("grafana_cloud_access_policy_token.test", "name", initialToken),
74+
resource.TestCheckResourceAttr("grafana_cloud_access_policy_token.test", "display_name", initialToken),
6875
resource.TestCheckResourceAttr("grafana_cloud_access_policy_token.test", "expires_at", expiresAt),
6976
),
7077
},
7178
{
72-
Config: testAccCloudAccessPolicyTokenConfigBasic("initial", "updated", "us", updatedScopes, expiresAt),
79+
Config: testAccCloudAccessPolicyTokenConfigBasic(initialName, "", "us", initialScopes, expiresAt),
80+
PreConfig: func() {
81+
orgID, err := strconv.ParseInt(*policy.OrgId, 10, 32)
82+
if err != nil {
83+
t.Fatal(err)
84+
}
85+
client := testutils.Provider.Meta().(*common.Client).GrafanaCloudAPI
86+
_, _, err = client.TokensAPI.DeleteToken(context.Background(), *policyToken.Id).
87+
Region("us").
88+
OrgId(int32(orgID)).
89+
XRequestId("deleting-token").Execute()
90+
if err != nil {
91+
t.Fatalf("error getting cloud access policy: %s", err)
92+
}
93+
},
94+
},
95+
{
96+
Config: testAccCloudAccessPolicyTokenConfigBasic(initialName, "updated", "us", updatedScopes, expiresAt),
7397
Check: resource.ComposeTestCheckFunc(
7498
testAccCloudAccessPolicyCheckExists("grafana_cloud_access_policy.test", &policy),
7599
testAccCloudAccessPolicyTokenCheckExists("grafana_cloud_access_policy_token.test", &policyToken),
76100

77-
resource.TestCheckResourceAttr("grafana_cloud_access_policy.test", "name", "initial"),
101+
resource.TestCheckResourceAttr("grafana_cloud_access_policy.test", "name", initialName),
78102
resource.TestCheckResourceAttr("grafana_cloud_access_policy.test", "display_name", "updated"),
79103
resource.TestCheckResourceAttr("grafana_cloud_access_policy.test", "scopes.#", "1"),
80104
resource.TestCheckResourceAttr("grafana_cloud_access_policy.test", "scopes.0", "metrics:write"),
81105
resource.TestCheckResourceAttr("grafana_cloud_access_policy.test", "realm.#", "1"),
82106
resource.TestCheckResourceAttr("grafana_cloud_access_policy.test", "realm.0.type", "org"),
83107

84-
resource.TestCheckResourceAttr("grafana_cloud_access_policy_token.test", "name", "token-initial"),
108+
resource.TestCheckResourceAttr("grafana_cloud_access_policy_token.test", "name", initialToken),
85109
resource.TestCheckResourceAttr("grafana_cloud_access_policy_token.test", "display_name", "updated"),
86110
resource.TestCheckResourceAttr("grafana_cloud_access_policy_token.test", "expires_at", expiresAt),
87111
),
88112
},
89113
// Recreate
90114
{
91-
Config: testAccCloudAccessPolicyTokenConfigBasic("updated", "updated", "us", updatedScopes, expiresAt),
115+
Config: testAccCloudAccessPolicyTokenConfigBasic(updatedName, "updated", "us", updatedScopes, expiresAt),
92116
Check: resource.ComposeTestCheckFunc(
93117
testAccCloudAccessPolicyCheckExists("grafana_cloud_access_policy.test", &policy),
94118
testAccCloudAccessPolicyTokenCheckExists("grafana_cloud_access_policy_token.test", &policyToken),
95119

96-
resource.TestCheckResourceAttr("grafana_cloud_access_policy.test", "name", "updated"),
120+
resource.TestCheckResourceAttr("grafana_cloud_access_policy.test", "name", updatedName),
97121
resource.TestCheckResourceAttr("grafana_cloud_access_policy.test", "display_name", "updated"),
98122
resource.TestCheckResourceAttr("grafana_cloud_access_policy.test", "scopes.#", "1"),
99123
resource.TestCheckResourceAttr("grafana_cloud_access_policy.test", "scopes.0", "metrics:write"),
@@ -123,11 +147,12 @@ func TestResourceAccessPolicyToken_NoExpiration(t *testing.T) {
123147
var policy gcom.AuthAccessPolicy
124148
var policyToken gcom.AuthToken
125149

150+
randomName := fmt.Sprintf("initial-no-expiration-%s", acctest.RandStringFromCharSet(6, acctest.CharSetAlpha))
126151
resource.Test(t, resource.TestCase{
127152
ProtoV5ProviderFactories: testutils.ProtoV5ProviderFactories,
128153
Steps: []resource.TestStep{
129154
{
130-
Config: testAccCloudAccessPolicyTokenConfigBasic("initial-no-expiration", "", "us", []string{"metrics:read"}, ""),
155+
Config: testAccCloudAccessPolicyTokenConfigBasic(randomName, "", "us", []string{"metrics:read"}, ""),
131156
Check: resource.ComposeTestCheckFunc(
132157
testAccCloudAccessPolicyCheckExists("grafana_cloud_access_policy.test", &policy),
133158
testAccCloudAccessPolicyTokenCheckExists("grafana_cloud_access_policy_token.test", &policyToken),

0 commit comments

Comments
 (0)