Skip to content

Commit

Permalink
feat(testing): API tests for cluster add/update CLI
Browse files Browse the repository at this point in the history
  • Loading branch information
karol-kokoszka committed Feb 14, 2024
1 parent 79bbe42 commit bdac817
Show file tree
Hide file tree
Showing 2 changed files with 235 additions and 0 deletions.
117 changes: 117 additions & 0 deletions pkg/command/cluster/clusteradd/cmd_integration_api_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
// Copyright (C) 2024 ScyllaDB

//go:build all || api_integration
// +build all api_integration

package clusteradd

import (
"bytes"
"context"
"fmt"
"os/exec"
"strings"
"testing"

"github.com/scylladb/scylla-manager/v3/pkg/managerclient"
"github.com/scylladb/scylla-manager/v3/swagger/gen/scylla-manager/models"
)

const (
authToken = "token"
clusterIntroHost = "192.168.200.11"
testUsername = "cassandra"
testPass = "cassandra"
)

func TestSctoolClusterAddIntegrationAPITest(t *testing.T) {
for _, tc := range []struct {
name string
args []string
expectedCluster *models.Cluster
}{
{
name: "create cluster, default TLS enablement",
args: []string{"cluster", "add", "--auth-token", authToken, "--host", clusterIntroHost,
"--password", testPass, "--username", testUsername},
expectedCluster: &models.Cluster{
ForceTLSDisabled: false,
ForceNonSslSessionPort: false,
Name: "",
Port: 0,
},
},
{
name: "create cluster, force TLS enabled",
args: []string{"cluster", "add", "--auth-token", authToken, "--host", clusterIntroHost,
"--password", testPass, "--username", testUsername, "--force-tls-disabled=false",
"--force-non-ssl-session-port"},
expectedCluster: &models.Cluster{
ForceTLSDisabled: false,
ForceNonSslSessionPort: true,
Name: "",
Port: 0,
},
},
{
name: "create cluster, force TLS disabled",
args: []string{"cluster", "add", "--auth-token", authToken, "--host", clusterIntroHost,
"--password", testPass, "--username", testUsername, "--force-tls-disabled",
"--force-non-ssl-session-port=false"},
expectedCluster: &models.Cluster{
ForceTLSDisabled: true,
ForceNonSslSessionPort: false,
Name: "",
Port: 0,
},
},
} {
t.Run(tc.name, func(t *testing.T) {
// given
client, err := managerclient.NewClient("http://localhost:5080/api/v1")
if err != nil {
t.Fatalf("Unable to create managerclient to consume managet HTTP API, err = {%v}", err)
}
cmd := exec.Command("./sctool.api-tests", tc.args...)
var stderr bytes.Buffer
cmd.Stderr = &stderr
cmd.Dir = "/scylla-manager"

// when
output, err := cmd.Output()
fmt.Println(string(output))
if err != nil {
t.Fatalf("Unable to create cluster with sctool cluster add, err = {%v}, stderr = {%v}", err, stderr.String())
}
clusterID := strings.Split(string(output), "\n")[0]

defer func() {
if err != client.DeleteCluster(context.Background(), clusterID) {
t.Logf("Failed to delete cluster, err = {%v}", err)
}
}()

// then
c, err := client.GetCluster(context.Background(), clusterID)
if err != nil {
t.Fatalf("Unable to retrieve cluster data using managerclient, err = {%v}", err)
}

if c.ID != clusterID {
t.Fatalf("ClusterID mismatch {%v} != {%v}, output={%v}", c.ID, clusterID, string(output))
}
if c.ForceTLSDisabled != tc.expectedCluster.ForceTLSDisabled {
t.Fatalf("ForceTLSDisabled mismatch {%v} != {%v}, output={%v}", c.ForceTLSDisabled,
tc.expectedCluster.ForceTLSDisabled, string(output))
}
if c.ForceNonSslSessionPort != tc.expectedCluster.ForceNonSslSessionPort {
t.Fatalf("ForceNonSslSessionPort mismatch {%v} != {%v}, output={%v}", c.ForceNonSslSessionPort,
tc.expectedCluster.ForceNonSslSessionPort, string(output))
}
if c.Port != tc.expectedCluster.Port {
t.Fatalf("Port mismatch {%v} != {%v}, output={%v}", c.Port, tc.expectedCluster.Port, string(output))
}
})
}

}
118 changes: 118 additions & 0 deletions pkg/command/cluster/clusterupdate/cmd_integration_api_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
// Copyright (C) 2024 ScyllaDB

//go:build all || api_integration
// +build all api_integration

package clusterupdate

import (
"bytes"
"context"
"os/exec"
"testing"

"github.com/scylladb/scylla-manager/v3/pkg/managerclient"
"github.com/scylladb/scylla-manager/v3/swagger/gen/scylla-manager/models"
)

const (
authToken = "token"
clusterIntroHost = "192.168.200.11"
testUsername = "cassandra"
testPass = "cassandra"
)

func TestSctoolClusterUpdateIntegrationAPITest(t *testing.T) {
for _, tc := range []struct {
name string
args []string
expectedCluster *models.Cluster
}{
{
name: "update cluster, no-changes",
args: []string{"cluster", "update", "--auth-token", authToken},
expectedCluster: &models.Cluster{
ForceTLSDisabled: true,
ForceNonSslSessionPort: false,
},
},
{
name: "update cluster, force TLS enabled",
args: []string{"cluster", "update", "--force-non-ssl-session-port"},
expectedCluster: &models.Cluster{
ForceTLSDisabled: true,
ForceNonSslSessionPort: true,
},
},
{
name: "update cluster, force TLS disabled",
args: []string{"cluster", "update", "--force-tls-disabled=false"},
expectedCluster: &models.Cluster{
ForceTLSDisabled: false,
ForceNonSslSessionPort: false,
},
},
{
name: "update cluster, clean TLS flag",
args: []string{"cluster", "update", "--force-tls-disabled=false", "--force-non-ssl-session-port"},
expectedCluster: &models.Cluster{
ForceTLSDisabled: false,
ForceNonSslSessionPort: true,
},
},
} {
t.Run(tc.name, func(t *testing.T) {
// given
client, err := managerclient.NewClient("http://localhost:5080/api/v1")
if err != nil {
t.Fatalf("Unable to create managerclient to consume managet HTTP API, err = {%v}", err)
}
clusterID, err := client.CreateCluster(context.Background(), &models.Cluster{
AuthToken: authToken,
Host: clusterIntroHost,
Password: testPass,
Username: testUsername,
ForceTLSDisabled: true,
})
if err != nil {
t.Fatalf("Unable to create cluster for further updates, err = {%v}", err)
}

cmd := exec.Command("./sctool.api-tests", append([]string{"--cluster", clusterID}, tc.args...)...)
var stderr bytes.Buffer
cmd.Stderr = &stderr
cmd.Dir = "/scylla-manager"

// when
output, err := cmd.Output()
if err != nil {
t.Fatalf("Unable to update cluster with sctool cluster update, err = {%v}, stderr = {%v}", err, stderr.String())
}

defer func() {
if err != client.DeleteCluster(context.Background(), clusterID) {
t.Logf("Failed to delete cluster, err = {%v}", err)
}
}()

// then
c, err := client.GetCluster(context.Background(), clusterID)
if err != nil {
t.Fatalf("Unable to retrieve cluster data using managerclient, err = {%v}", err)
}

if c.ID != clusterID {
t.Fatalf("ClusterID mismatch {%v} != {%v}, output={%v}", c.ID, clusterID, string(output))
}
if c.ForceTLSDisabled != tc.expectedCluster.ForceTLSDisabled {
t.Fatalf("ForceTLSDisabled mismatch {%v} != {%v}, output={%v}", c.ForceTLSDisabled,
tc.expectedCluster.ForceTLSDisabled, string(output))
}
if c.ForceNonSslSessionPort != tc.expectedCluster.ForceNonSslSessionPort {
t.Fatalf("ForceNonSslPort mismatch {%v} != {%v}, output={%v}", c.ForceNonSslSessionPort,
tc.expectedCluster.ForceNonSslSessionPort, string(output))
}
})
}

}

0 comments on commit bdac817

Please sign in to comment.