From 349dd0d2efbc26fd68a6d76c261f95fe0ca9fb15 Mon Sep 17 00:00:00 2001 From: Pavel Sviderski Date: Fri, 29 Nov 2024 20:40:49 +1000 Subject: [PATCH] add basic e2e cluster lifecycle test --- internal/ucind/cluster.go | 3 +++ test/e2e/cluster_test.go | 53 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 test/e2e/cluster_test.go diff --git a/internal/ucind/cluster.go b/internal/ucind/cluster.go index 1c679f4d..1c1c7709 100644 --- a/internal/ucind/cluster.go +++ b/internal/ucind/cluster.go @@ -193,6 +193,9 @@ func (p *Provisioner) InspectCluster(ctx context.Context, name string) (Cluster, func (p *Provisioner) RemoveCluster(ctx context.Context, name string) error { if _, err := p.InspectCluster(ctx, name); err != nil { + if errors.Is(err, ErrNotFound) { + return nil + } return err } diff --git a/test/e2e/cluster_test.go b/test/e2e/cluster_test.go new file mode 100644 index 00000000..16f2cdd2 --- /dev/null +++ b/test/e2e/cluster_test.go @@ -0,0 +1,53 @@ +package e2e + +import ( + "context" + "github.com/docker/docker/client" + "github.com/stretchr/testify/require" + "testing" + "uncloud/internal/ucind" +) + +func createTestCluster(t *testing.T, name string, opts ucind.CreateClusterOptions) (*ucind.Provisioner, ucind.Cluster) { + dockerCli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation()) + require.NoError(t, err) + + p := ucind.NewProvisioner(dockerCli, nil) + + ctx := context.Background() + c, err := p.CreateCluster(ctx, name, opts) + require.NoError(t, err) + + t.Cleanup(func() { + err = p.RemoveCluster(ctx, name) + require.NoError(t, err) + }) + + return p, c +} + +func TestClusterLifecycle(t *testing.T) { + t.Parallel() + + var ( + name = "test-cluster-lifecycle" + ctx = context.Background() + p *ucind.Provisioner + c ucind.Cluster + ) + + t.Run("create", func(t *testing.T) { + p, c = createTestCluster(t, name, ucind.CreateClusterOptions{Machines: 3}) + + require.Equal(t, name, c.Name) + require.Len(t, c.Machines, 3) + }) + + t.Run("remove", func(t *testing.T) { + err := p.RemoveCluster(ctx, name) + require.NoError(t, err) + + _, err = p.InspectCluster(ctx, name) + require.ErrorIs(t, err, ucind.ErrNotFound) + }) +}