@@ -3,13 +3,15 @@ package modelserving_test
33import (
44 "context"
55 "fmt"
6+ "github.com/stackitcloud/stackit-sdk-go/core/utils"
67 "strings"
78 "testing"
89
910 "github.com/hashicorp/terraform-plugin-testing/helper/resource"
1011 "github.com/hashicorp/terraform-plugin-testing/terraform"
1112 "github.com/stackitcloud/stackit-sdk-go/core/config"
1213 "github.com/stackitcloud/stackit-sdk-go/services/modelserving"
14+ "github.com/stackitcloud/stackit-sdk-go/services/modelserving/wait"
1315 "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core"
1416 "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/testutil"
1517)
@@ -46,7 +48,7 @@ func inputTokenConfig(name, description string) string {
4648}
4749
4850func TestAccModelServingTokenResource (t * testing.T ) {
49- resource .ParallelTest (t , resource.TestCase {
51+ resource .Test (t , resource.TestCase {
5052 ProtoV6ProviderFactories : testutil .TestAccProtoV6ProviderFactories ,
5153 CheckDestroy : testAccCheckModelServingTokenDestroy ,
5254 Steps : []resource.TestStep {
@@ -57,47 +59,15 @@ func TestAccModelServingTokenResource(t *testing.T) {
5759 tokenResource ["description" ],
5860 ),
5961 Check : resource .ComposeAggregateTestCheckFunc (
60- resource .TestCheckResourceAttr (
61- "stackit_modelserving_token.token" ,
62- "project_id" ,
63- tokenResource ["project_id" ],
64- ),
65- resource .TestCheckResourceAttr (
66- "stackit_modelserving_token.token" ,
67- "region" ,
68- tokenResource ["region" ],
69- ),
70- resource .TestCheckResourceAttr (
71- "stackit_modelserving_token.token" ,
72- "name" ,
73- tokenResource ["name" ],
74- ),
75- resource .TestCheckResourceAttr (
76- "stackit_modelserving_token.token" ,
77- "description" ,
78- tokenResource ["description" ],
79- ),
80- resource .TestCheckResourceAttr (
81- "stackit_modelserving_token.token" ,
82- "ttl_duration" ,
83- tokenResource ["ttl_duration" ],
84- ),
85- resource .TestCheckResourceAttrSet (
86- "stackit_modelserving_token.token" ,
87- "token_id" ,
88- ),
89- resource .TestCheckResourceAttrSet (
90- "stackit_modelserving_token.token" ,
91- "state" ,
92- ),
93- resource .TestCheckResourceAttrSet (
94- "stackit_modelserving_token.token" ,
95- "valid_until" ,
96- ),
97- resource .TestCheckResourceAttrSet (
98- "stackit_modelserving_token.token" ,
99- "content" ,
100- ),
62+ resource .TestCheckResourceAttr ("stackit_modelserving_token.token" , "project_id" , tokenResource ["project_id" ]),
63+ resource .TestCheckResourceAttr ("stackit_modelserving_token.token" , "region" , tokenResource ["region" ]),
64+ resource .TestCheckResourceAttr ("stackit_modelserving_token.token" , "name" , tokenResource ["name" ]),
65+ resource .TestCheckResourceAttr ("stackit_modelserving_token.token" , "description" , tokenResource ["description" ]),
66+ resource .TestCheckResourceAttr ("stackit_modelserving_token.token" , "ttl_duration" , tokenResource ["ttl_duration" ]),
67+ resource .TestCheckResourceAttrSet ("stackit_modelserving_token.token" , "token_id" ),
68+ resource .TestCheckResourceAttrSet ("stackit_modelserving_token.token" , "state" ),
69+ resource .TestCheckResourceAttrSet ("stackit_modelserving_token.token" , "valid_until" ),
70+ resource .TestCheckResourceAttrSet ("stackit_modelserving_token.token" , "token" ),
10171 ),
10272 },
10373 // Update
@@ -107,38 +77,13 @@ func TestAccModelServingTokenResource(t *testing.T) {
10777 tokenResource ["description_updated" ],
10878 ),
10979 Check : resource .ComposeAggregateTestCheckFunc (
110- resource .TestCheckResourceAttr (
111- "stackit_modelserving_token.token" ,
112- "project_id" ,
113- tokenResource ["project_id" ],
114- ),
115- resource .TestCheckResourceAttr (
116- "stackit_modelserving_token.token" ,
117- "region" ,
118- tokenResource ["region" ],
119- ),
120- resource .TestCheckResourceAttr (
121- "stackit_modelserving_token.token" ,
122- "name" ,
123- tokenResource ["name" ],
124- ),
125- resource .TestCheckResourceAttr (
126- "stackit_modelserving_token.token" ,
127- "description" ,
128- tokenResource ["description_updated" ],
129- ),
130- resource .TestCheckResourceAttrSet (
131- "stackit_modelserving_token.token" ,
132- "token_id" ,
133- ),
134- resource .TestCheckResourceAttrSet (
135- "stackit_modelserving_token.token" ,
136- "state" ,
137- ),
138- resource .TestCheckResourceAttrSet (
139- "stackit_modelserving_token.token" ,
140- "valid_until" ,
141- ),
80+ resource .TestCheckResourceAttr ("stackit_modelserving_token.token" , "project_id" , tokenResource ["project_id" ]),
81+ resource .TestCheckResourceAttr ("stackit_modelserving_token.token" , "region" , tokenResource ["region" ]),
82+ resource .TestCheckResourceAttr ("stackit_modelserving_token.token" , "name" , tokenResource ["name" ]),
83+ resource .TestCheckResourceAttr ("stackit_modelserving_token.token" , "description" , tokenResource ["description_updated" ]),
84+ resource .TestCheckResourceAttrSet ("stackit_modelserving_token.token" , "token_id" ),
85+ resource .TestCheckResourceAttrSet ("stackit_modelserving_token.token" , "state" ),
86+ resource .TestCheckResourceAttrSet ("stackit_modelserving_token.token" , "valid_until" ),
14287 ),
14388 },
14489 // Deletion is done by the framework implicitly
@@ -148,36 +93,66 @@ func TestAccModelServingTokenResource(t *testing.T) {
14893
14994func testAccCheckModelServingTokenDestroy (s * terraform.State ) error {
15095 ctx := context .Background ()
151-
15296 var client * modelserving.APIClient
15397 var err error
98+
15499 if testutil .ModelServingCustomEndpoint == "" {
155100 client , err = modelserving .NewAPIClient ()
156101 } else {
157102 client , err = modelserving .NewAPIClient (
158103 config .WithEndpoint (testutil .ModelServingCustomEndpoint ),
159104 )
160105 }
106+
161107 if err != nil {
162108 return fmt .Errorf ("creating client: %w" , err )
163109 }
164110
111+ tokensToDestroy := []string {}
165112 for _ , rs := range s .RootModule ().Resources {
166113 if rs .Type != "stackit_modelserving_token" {
167114 continue
168115 }
169- // Token terraform ID: "[projectId],[region],[tokenId]"
116+
117+ // Token terraform ID: "[project_id],[region],[token_id]"
170118 idParts := strings .Split (rs .Primary .ID , core .Separator )
171119 if len (idParts ) != 3 {
172120 return fmt .Errorf ("invalid ID: %s" , rs .Primary .ID )
173121 }
174- tokenId := idParts [2 ]
175-
176- _ , err := client .GetToken (ctx , testutil .Region , testutil .ProjectId , tokenId ).Execute ()
177- if err != nil {
178- return fmt .Errorf ("token %s still exists" , tokenId )
122+ if len (idParts [2 ]) != 0 {
123+ tokensToDestroy = append (tokensToDestroy , idParts [2 ])
179124 }
180125 }
181126
127+ if len (tokensToDestroy ) == 0 {
128+ return nil
129+ }
130+
131+ tokensResp , err := client .ListTokens (ctx , testutil .Region , testutil .ProjectId ).Execute ()
132+ if err != nil {
133+ return fmt .Errorf ("getting tokensResp: %w" , err )
134+ }
135+
136+ if tokensResp .Tokens == nil || (tokensResp .Tokens != nil && len (* tokensResp .Tokens ) == 0 ) {
137+ fmt .Print ("No tokens found for project \n " )
138+ return nil
139+ }
140+
141+ items := * tokensResp .Tokens
142+ for i := range items {
143+ if items [i ].Name == nil {
144+ continue
145+ }
146+ if utils .Contains (tokensToDestroy , * items [i ].Name ) {
147+ _ , err := client .DeleteToken (ctx , testutil .Region , testutil .ProjectId , * items [i ].Id ).Execute ()
148+ if err != nil {
149+ return fmt .Errorf ("destroying token %s during CheckDestroy: %w" , * items [i ].Name , err )
150+ }
151+ _ , err = wait .DeleteModelServingWaitHandler (ctx , client , testutil .Region , testutil .ProjectId , * items [i ].Id ).WaitWithContext (ctx )
152+ if err != nil {
153+ return fmt .Errorf ("destroying token %s during CheckDestroy: waiting for deletion %w" , * items [i ].Name , err )
154+ }
155+ }
156+ }
182157 return nil
183158}
0 commit comments