Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions coreweave/networking/common_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package networking_test

const (
AcceptanceTestPrefix = "test-acc-vpc-"
)
66 changes: 0 additions & 66 deletions coreweave/networking/resource_vpc_test.go
Original file line number Diff line number Diff line change
@@ -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"
Expand All @@ -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()
Expand Down
63 changes: 63 additions & 0 deletions coreweave/networking/sweeper_test.go
Original file line number Diff line number Diff line change
@@ -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)
}
Loading