Skip to content

Commit 8425dc2

Browse files
authored
Update org_clean_test.go to delete stream instances & private endpoint services
1 parent b202323 commit 8425dc2

File tree

1 file changed

+77
-6
lines changed

1 file changed

+77
-6
lines changed

internal/testutil/clean/org_clean_test.go

+77-6
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@ import (
1111
"testing"
1212
"time"
1313

14+
"go.mongodb.org/atlas-sdk/v20250312001/admin"
15+
16+
"github.com/stretchr/testify/require"
17+
1418
"github.com/mongodb/terraform-provider-mongodbatlas/internal/common/constant"
1519
"github.com/mongodb/terraform-provider-mongodbatlas/internal/common/dsschema"
1620
"github.com/mongodb/terraform-provider-mongodbatlas/internal/testutil/acc"
17-
"github.com/stretchr/testify/require"
18-
"go.mongodb.org/atlas-sdk/v20250312002/admin"
1921
)
2022

2123
const (
@@ -40,6 +42,8 @@ var (
4042
"CANNOT_CLOSE_GROUP_ACTIVE_PEERING_CONNECTIONS",
4143
"CANNOT_CLOSE_GROUP_ACTIVE_ATLAS_DATA_LAKES",
4244
"CANNOT_CLOSE_GROUP_ACTIVE_ATLAS_DATA_FEDERATION_PRIVATE_ENDPOINTS",
45+
"CANNOT_CLOSE_GROUP_ACTIVE_STREAMS_RESOURCE",
46+
"CANNOT_CLOSE_GROUP_ACTIVE_ATLAS_PRIVATE_ENDPOINT_SERVICES",
4347
}
4448
)
4549

@@ -153,7 +157,7 @@ func findRetryErrorCode(err error) string {
153157
return ""
154158
}
155159
func deleteProject(ctx context.Context, client *admin.APIClient, projectID string) error {
156-
_, err := client.ProjectsApi.DeleteProject(ctx, projectID).Execute()
160+
_, _, err := client.ProjectsApi.DeleteProject(ctx, projectID).Execute()
157161
if err == nil || admin.IsErrorCode(err, "PROJECT_NOT_FOUND") {
158162
return nil
159163
}
@@ -187,6 +191,14 @@ func removeProjectResources(ctx context.Context, t *testing.T, dryRun bool, clie
187191
if federatedDatabasesRemoved > 0 {
188192
changes = append(changes, fmt.Sprintf("removed %d federated databases", federatedDatabasesRemoved))
189193
}
194+
streamInstancesRemoved := removeStreamInstances(ctx, t, dryRun, client, projectID)
195+
if streamInstancesRemoved > 0 {
196+
changes = append(changes, fmt.Sprintf("removed %d stream instances", streamInstancesRemoved))
197+
}
198+
privateEndpointServicesRemoved := removePrivateEndpointServices(ctx, t, dryRun, client, projectID)
199+
if privateEndpointServicesRemoved > 0 {
200+
changes = append(changes, fmt.Sprintf("removed %d private endpoint services", privateEndpointServicesRemoved))
201+
}
190202
return strings.Join(changes, ", ")
191203
}
192204

@@ -296,13 +308,72 @@ func removeDataLakePipelines(ctx context.Context, t *testing.T, dryRun bool, cli
296308
pipelineID := p.GetId()
297309
t.Logf("delete pipeline %s", pipelineID)
298310
if !dryRun {
299-
_, err = client.DataLakePipelinesApi.DeletePipeline(ctx, projectID, pipelineID).Execute()
311+
_, _, err = client.DataLakePipelinesApi.DeletePipeline(ctx, projectID, pipelineID).Execute()
300312
require.NoError(t, err)
301313
}
302314
}
303315
return len(datalakeResults)
304316
}
305317

318+
func removeStreamInstances(ctx context.Context, t *testing.T, dryRun bool, client *admin.APIClient, projectID string) int {
319+
t.Helper()
320+
streamInstances, _, err := client.StreamsApi.ListStreamInstances(ctx, projectID).Execute()
321+
require.NoError(t, err)
322+
323+
for _, instance := range *streamInstances.Results {
324+
instanceName := *instance.Name
325+
id := instance.GetId()
326+
t.Logf("delete stream instance %s", id)
327+
328+
if !dryRun {
329+
_, _, err = client.StreamsApi.DeleteStreamInstance(ctx, projectID, instanceName).Execute()
330+
if err != nil && admin.IsErrorCode(err, "STREAM_TENANT_HAS_STREAM_PROCESSORS") {
331+
t.Logf("stream instance %s has stream processors, attempting to delete", id)
332+
streamProcessors, _, spErr := client.StreamsApi.ListStreamProcessors(ctx, projectID, instanceName).Execute()
333+
require.NoError(t, spErr)
334+
335+
for _, processor := range *streamProcessors.Results {
336+
t.Logf("delete stream processor %s", processor.Id)
337+
_, err = client.StreamsApi.DeleteStreamProcessor(ctx, projectID, instanceName, processor.Name).Execute()
338+
require.NoError(t, err)
339+
}
340+
t.Logf("retry delete stream instance %s after removing stream processors", id)
341+
_, _, err = client.StreamsApi.DeleteStreamInstance(ctx, projectID, instanceName).Execute()
342+
require.NoError(t, err)
343+
} else {
344+
require.NoError(t, err)
345+
}
346+
}
347+
}
348+
return len(*streamInstances.Results)
349+
}
350+
351+
func removePrivateEndpointServices(ctx context.Context, t *testing.T, dryRun bool, client *admin.APIClient, projectID string) int {
352+
t.Helper()
353+
totalCount := 0
354+
cloudProviders := []string{"AWS", "AZURE", "GCP"}
355+
356+
for _, provider := range cloudProviders {
357+
endpointServices, _, err := client.PrivateEndpointServicesApi.ListPrivateEndpointServices(ctx, projectID, provider).Execute()
358+
if err != nil {
359+
t.Errorf("failed to list private endpoint services for %s: %v", provider, err)
360+
continue
361+
}
362+
363+
for _, service := range endpointServices {
364+
id := service.GetId()
365+
t.Logf("delete private endpoint service %s for provider %s", id, provider)
366+
if !dryRun {
367+
_, _, err := client.PrivateEndpointServicesApi.DeletePrivateEndpointService(ctx, projectID, provider, id).Execute()
368+
require.NoError(t, err)
369+
}
370+
}
371+
totalCount += len(endpointServices)
372+
}
373+
374+
return totalCount
375+
}
376+
306377
func removeFederatedDatabasePrivateEndpoints(ctx context.Context, t *testing.T, dryRun bool, client *admin.APIClient, projectID string) int {
307378
t.Helper()
308379
paginatedResults, _, err := client.DataFederationApi.ListDataFederationPrivateEndpoints(ctx, projectID).Execute()
@@ -312,7 +383,7 @@ func removeFederatedDatabasePrivateEndpoints(ctx context.Context, t *testing.T,
312383
endpointID := f.GetEndpointId()
313384
t.Logf("delete federated private endpoint %s", endpointID)
314385
if !dryRun {
315-
_, err = client.DataFederationApi.DeleteDataFederationPrivateEndpoint(ctx, projectID, endpointID).Execute()
386+
_, _, err = client.DataFederationApi.DeleteDataFederationPrivateEndpoint(ctx, projectID, endpointID).Execute()
316387
require.NoError(t, err)
317388
}
318389
}
@@ -331,7 +402,7 @@ func removeFederatedDatabases(ctx context.Context, t *testing.T, dryRun bool, cl
331402
federatedName := f.GetName()
332403
t.Logf("delete federated %s", federatedName)
333404
if !dryRun {
334-
_, err = client.DataFederationApi.DeleteFederatedDatabase(ctx, projectID, federatedName).Execute()
405+
_, _, err = client.DataFederationApi.DeleteFederatedDatabase(ctx, projectID, federatedName).Execute()
335406
require.NoError(t, err)
336407
}
337408
}

0 commit comments

Comments
 (0)