diff --git a/coreweave/networking/common_test.go b/coreweave/networking/common_test.go new file mode 100644 index 00000000..2844264e --- /dev/null +++ b/coreweave/networking/common_test.go @@ -0,0 +1,5 @@ +package networking_test + +const ( + AcceptanceTestPrefix = "test-acc-vpc-" +) diff --git a/coreweave/networking/resource_vpc_test.go b/coreweave/networking/resource_vpc_test.go index a2e8c1d9..8269d5a4 100644 --- a/coreweave/networking/resource_vpc_test.go +++ b/coreweave/networking/resource_vpc_test.go @@ -1,17 +1,13 @@ package networking_test import ( - "context" "fmt" - "log" "math/rand/v2" "regexp" "slices" "strings" "testing" - "time" - "connectrpc.com/connect" "github.com/coreweave/terraform-provider-coreweave/coreweave/networking" "github.com/coreweave/terraform-provider-coreweave/internal/provider" "github.com/coreweave/terraform-provider-coreweave/internal/testutil" @@ -31,71 +27,9 @@ import ( ) const ( - AcceptanceTestPrefix = "test-acc-vpc-" - defaultPrimaryHostPrefixName = "host primary" ) -func init() { - resource.AddTestSweepers("coreweave_vpc", &resource.Sweeper{ - Name: "coreweave_networking_vpc", - Dependencies: []string{}, - F: func(r string) error { - ctx, cancel := context.WithTimeout(context.Background(), 30*time.Minute) - defer cancel() - - testutil.SetEnvDefaults() - client, err := provider.BuildClient(ctx, provider.CoreweaveProviderModel{}, "", "") - if err != nil { - return fmt.Errorf("failed to build client: %w", err) - } - - listResp, err := client.ListVPCs(ctx, &connect.Request[networkingv1beta1.ListVPCsRequest]{}) - if err != nil { - return fmt.Errorf("failed to list VPCs: %w", err) - } - for _, vpc := range listResp.Msg.Items { - if !strings.HasPrefix(vpc.Name, AcceptanceTestPrefix) { - log.Printf("skipping VPC %s because it does not have prefix %s", vpc.Name, AcceptanceTestPrefix) - continue - } - - if vpc.GetZone() != r { - log.Printf("skipping VPC %s in zone %s because it does not match sweep zone %s", vpc.Name, vpc.Zone, r) - continue - } - - log.Printf("sweeping VPC %s", vpc.Name) - if testutil.SweepDryRun() { - log.Printf("skipping VPC %s because of dry-run mode", vpc.Name) - continue - } - - deleteReq := connect.NewRequest(&networkingv1beta1.DeleteVPCRequest{ - Id: vpc.Id, - }) - - deleteResp, err := client.DeleteVPC(ctx, deleteReq) - if connect.CodeOf(err) == connect.CodeNotFound { - log.Printf("VPC %s already deleted", vpc.Name) - continue - } else if err != nil { - return fmt.Errorf("failed to delete VPC %s: %w", vpc.Name, err) - } - deletedVpc := deleteResp.Msg.Vpc - - if err := testutil.WaitForDelete(ctx, 5*time.Minute, 15*time.Second, client.GetVPC, &networkingv1beta1.GetVPCRequest{ - Id: deletedVpc.Id, - }); err != nil { - return fmt.Errorf("failed to wait for VPC %s to be deleted: %w", deletedVpc.Name, err) - } - } - - return nil - }, - }) -} - // with is a helper function that creates a shallow copy of the given object, passes it to the given function, and returns the modified object. func with[T any](t *testing.T, obj T, fn func(t *testing.T, obj *T)) T { t.Helper() diff --git a/coreweave/networking/sweeper_test.go b/coreweave/networking/sweeper_test.go index 72521d19..48ca5828 100644 --- a/coreweave/networking/sweeper_test.go +++ b/coreweave/networking/sweeper_test.go @@ -1,11 +1,74 @@ package networking_test import ( + "context" + "fmt" "testing" + "time" + "connectrpc.com/connect" "github.com/hashicorp/terraform-plugin-testing/helper/resource" + + networkingv1beta1 "buf.build/gen/go/coreweave/networking/protocolbuffers/go/coreweave/networking/v1beta1" + "github.com/coreweave/terraform-provider-coreweave/coreweave" + "github.com/coreweave/terraform-provider-coreweave/internal/provider" + "github.com/coreweave/terraform-provider-coreweave/internal/testutil" ) +func init() { + resource.AddTestSweepers("coreweave_networking_vpc", &resource.Sweeper{ + Name: "coreweave_networking_vpc", + Dependencies: []string{}, + F: func(zone string) error { + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Minute) + defer cancel() + + testutil.SetEnvDefaults() + client, err := provider.BuildClient(ctx, provider.CoreweaveProviderModel{}, "", "") + if err != nil { + return fmt.Errorf("failed to build client: %w", err) + } + + return testutil.SweepSequential(ctx, testutil.SweeperConfig[*networkingv1beta1.VPC]{ + Lister: func(ctx context.Context) ([]*networkingv1beta1.VPC, error) { + listResp, err := client.ListVPCs(ctx, &connect.Request[networkingv1beta1.ListVPCsRequest]{}) + if err != nil { + return nil, err + } + return listResp.Msg.Items, nil + }, + NameGetter: func(vpc *networkingv1beta1.VPC) string { + return vpc.Name + }, + ZoneGetter: func(vpc *networkingv1beta1.VPC) string { + return vpc.Zone + }, + Deleter: func(ctx context.Context, vpc *networkingv1beta1.VPC) error { + _, err := client.DeleteVPC(ctx, connect.NewRequest(&networkingv1beta1.DeleteVPCRequest{ + Id: vpc.Id, + })) + if coreweave.IsNotFoundError(err) { + return nil + } else if err != nil { + return fmt.Errorf("failed to delete VPC: %w", err) + } + + if err := testutil.WaitForDelete(ctx, 5*time.Minute, 15*time.Second, client.GetVPC, &networkingv1beta1.GetVPCRequest{ + Id: vpc.Id, + }); err != nil { + return fmt.Errorf("failed to wait for VPC deletion: %w", err) + } + + return nil + }, + Prefix: AcceptanceTestPrefix, + Zone: zone, + Timeout: 30 * time.Minute, + }) + }, + }) +} + func TestMain(m *testing.M) { resource.TestMain(m) }