Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/praefect/subcmd_list_storages_test.go')
-rw-r--r--cmd/praefect/subcmd_list_storages_test.go186
1 files changed, 186 insertions, 0 deletions
diff --git a/cmd/praefect/subcmd_list_storages_test.go b/cmd/praefect/subcmd_list_storages_test.go
new file mode 100644
index 000000000..fda7446c8
--- /dev/null
+++ b/cmd/praefect/subcmd_list_storages_test.go
@@ -0,0 +1,186 @@
+package main
+
+import (
+ "bytes"
+ "testing"
+
+ "github.com/olekukonko/tablewriter"
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+ "gitlab.com/gitlab-org/gitaly/v15/internal/praefect/config"
+)
+
+func TestListStorages_FlagSet(t *testing.T) {
+ t.Parallel()
+ cmd := &listStorages{}
+ fs := cmd.FlagSet()
+ require.NoError(t, fs.Parse([]string{"--virtual-storage", "vs"}))
+ require.Equal(t, "vs", cmd.virtualStorage)
+}
+
+func TestListStorages_Exec(t *testing.T) {
+ t.Parallel()
+
+ testCases := []struct {
+ desc string
+ virtualStorages []*config.VirtualStorage
+ args []string
+ expectedOutput func(*tablewriter.Table)
+ }{
+ {
+ desc: "one virtual storage",
+ virtualStorages: []*config.VirtualStorage{
+ {
+ Name: "vs-1",
+ Nodes: []*config.Node{
+ {
+ Storage: "storage-1",
+ Address: "tcp://1.2.3.4",
+ },
+ {
+ Storage: "storage-2",
+ Address: "tcp://4.3.2.1",
+ },
+ },
+ },
+ },
+ args: []string{},
+ expectedOutput: func(t *tablewriter.Table) {
+ t.Append([]string{"vs-1", "storage-1", "tcp://1.2.3.4"})
+ t.Append([]string{"vs-1", "storage-2", "tcp://4.3.2.1"})
+ },
+ },
+ {
+ desc: "multiple virtual storages but only show one",
+ virtualStorages: []*config.VirtualStorage{
+ {
+ Name: "vs-1",
+ Nodes: []*config.Node{
+ {
+ Storage: "storage-1",
+ Address: "tcp://1.2.3.4",
+ },
+ {
+ Storage: "storage-2",
+ Address: "tcp://4.3.2.1",
+ },
+ },
+ },
+ {
+ Name: "vs-2",
+ Nodes: []*config.Node{
+ {
+ Storage: "storage-3",
+ Address: "tcp://1.1.3.4",
+ },
+ {
+ Storage: "storage-4",
+ Address: "tcp://1.3.2.1",
+ },
+ },
+ },
+ {
+ Name: "vs-3",
+ Nodes: []*config.Node{
+ {
+ Storage: "storage-5",
+ Address: "tcp://2.1.3.4",
+ },
+ {
+ Storage: "storage-6",
+ Address: "tcp://2.3.2.1",
+ },
+ },
+ },
+ },
+ args: []string{"-virtual-storage", "vs-2"},
+ expectedOutput: func(t *tablewriter.Table) {
+ t.Append([]string{"vs-2", "storage-3", "tcp://1.1.3.4"})
+ t.Append([]string{"vs-2", "storage-4", "tcp://1.3.2.1"})
+ },
+ },
+ {
+ desc: "one virtual storage with virtual storage arg",
+ virtualStorages: []*config.VirtualStorage{
+ {
+ Name: "vs-1",
+ Nodes: []*config.Node{
+ {
+ Storage: "storage-1",
+ Address: "tcp://1.2.3.4",
+ },
+ {
+ Storage: "storage-2",
+ Address: "tcp://4.3.2.1",
+ },
+ },
+ },
+ },
+ args: []string{"-virtual-storage", "vs-1"},
+ expectedOutput: func(t *tablewriter.Table) {
+ t.Append([]string{"vs-1", "storage-1", "tcp://1.2.3.4"})
+ t.Append([]string{"vs-1", "storage-2", "tcp://4.3.2.1"})
+ },
+ },
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc.desc, func(t *testing.T) {
+ var expectedOutput bytes.Buffer
+ table := tablewriter.NewWriter(&expectedOutput)
+ table.SetHeader([]string{"VIRTUAL_STORAGE", "NODE", "ADDRESS"})
+ table.SetHeaderAlignment(tablewriter.ALIGN_LEFT)
+ table.SetAutoFormatHeaders(false)
+ table.SetAlignment(tablewriter.ALIGN_LEFT)
+ table.SetCenterSeparator("")
+ table.SetColumnSeparator("")
+ table.SetRowSeparator("")
+ table.SetHeaderLine(false)
+ table.SetBorder(false)
+ table.SetTablePadding("\t") // pad with tabs
+ table.SetNoWhiteSpace(true)
+ tc.expectedOutput(table)
+ table.Render()
+
+ var out bytes.Buffer
+ cmd := &listStorages{
+ w: &out,
+ }
+
+ fs := cmd.FlagSet()
+ require.NoError(t, fs.Parse(tc.args))
+ require.NoError(t, cmd.Exec(fs, config.Config{
+ VirtualStorages: tc.virtualStorages,
+ }))
+ assert.Equal(t, expectedOutput.String(), out.String())
+ })
+ }
+
+ t.Run("virtual storage arg matches no virtual storages", func(t *testing.T) {
+ var out bytes.Buffer
+ cmd := &listStorages{
+ w: &out,
+ }
+
+ fs := cmd.FlagSet()
+ require.NoError(t, fs.Parse([]string{"-virtual-storage", "vs-2"}))
+ require.NoError(t, cmd.Exec(fs, config.Config{
+ VirtualStorages: []*config.VirtualStorage{
+ {
+ Name: "vs-1",
+ Nodes: []*config.Node{
+ {
+ Storage: "storage-1",
+ Address: "tcp://1.2.3.4",
+ },
+ {
+ Storage: "storage-2",
+ Address: "tcp://4.3.2.1",
+ },
+ },
+ },
+ },
+ }))
+ assert.Equal(t, "No virtual storages named vs-2.\n", out.String())
+ })
+}