From 141bcd8d4013d1930afbb722f4605806097bcc48 Mon Sep 17 00:00:00 2001 From: Jonathon Anderson Date: Thu, 7 Nov 2024 21:41:54 -0700 Subject: [PATCH] Refactor ipmi tests as table-driven tests Also prefix each sensor line. Signed-off-by: Jonathon Anderson --- internal/app/wwctl/node/sensors/main.go | 9 ++++- internal/app/wwctl/node/sensors/root_test.go | 40 +++++++++++++------- internal/app/wwctl/power/cycle/root_test.go | 40 +++++++++++++------- internal/app/wwctl/power/off/root_test.go | 38 ++++++++++++------- internal/app/wwctl/power/on/root_test.go | 37 +++++++++++------- internal/app/wwctl/power/reset/root_test.go | 37 +++++++++++------- internal/app/wwctl/power/soft/root_test.go | 38 ++++++++++++------- internal/app/wwctl/power/status/root_test.go | 38 ++++++++++++------- 8 files changed, 182 insertions(+), 95 deletions(-) diff --git a/internal/app/wwctl/node/sensors/main.go b/internal/app/wwctl/node/sensors/main.go index ea1a8db6..c565f0aa 100644 --- a/internal/app/wwctl/node/sensors/main.go +++ b/internal/app/wwctl/node/sensors/main.go @@ -3,6 +3,7 @@ package sensors import ( "fmt" "os" + "strings" "github.com/spf13/cobra" "github.com/warewulf/warewulf/internal/pkg/batch" @@ -75,12 +76,16 @@ func CobraRunE(vars *variables) func(cmd *cobra.Command, args []string) (err err out, err := result.Result() if err != nil { - wwlog.Error("%s: %s", result.Ipaddr, out) + for _, line := range strings.Split(out, "\n") { + wwlog.Error("%s: %s", result.Ipaddr, line) + } returnErr = err continue } - wwlog.Info("%s:\n%s\n", result.Ipaddr, out) + for _, line := range strings.Split(out, "\n") { + wwlog.Info("%s: %s", result.Ipaddr, line) + } } return returnErr diff --git a/internal/app/wwctl/node/sensors/root_test.go b/internal/app/wwctl/node/sensors/root_test.go index d2fcc970..d290563c 100644 --- a/internal/app/wwctl/node/sensors/root_test.go +++ b/internal/app/wwctl/node/sensors/root_test.go @@ -11,10 +11,10 @@ import ( "github.com/warewulf/warewulf/internal/pkg/wwlog" ) -func Test_Power_Status(t *testing.T) { +func Test_Sensors(t *testing.T) { + warewulfd.SetNoDaemon() env := testenv.New(t) defer env.RemoveAll(t) - env.WriteFile(t, "etc/warewulf/nodes.conf", `WW_INTERNAL: 43 nodeprofiles: default: @@ -27,16 +27,28 @@ nodes: - default ipmi: ipaddr: 10.10.10.10`) - warewulfd.SetNoDaemon() - t.Run("ipmitool status test", func(t *testing.T) { - baseCmd := GetCommand() - buf := new(bytes.Buffer) - baseCmd.SetOut(buf) - baseCmd.SetErr(buf) - wwlog.SetLogWriter(buf) - baseCmd.SetArgs([]string{"--show", "n01"}) - err := baseCmd.Execute() - assert.NoError(t, err) - assert.Equal(t, "10.10.10.10:\nipmitool -I lan -H 10.10.10.10 -p 623 -U admin -P admin -e ~ sdr list", strings.TrimSpace(buf.String())) - }) + + tests := map[string]struct { + args []string + expected string + }{ + "sensors": { + args: []string{"--show", "n01"}, + expected: "10.10.10.10: ipmitool -I lan -H 10.10.10.10 -p 623 -U admin -P admin -e ~ sdr list", + }, + } + + for name, tt := range tests { + t.Run(name, func(t *testing.T) { + baseCmd := GetCommand() + buf := new(bytes.Buffer) + baseCmd.SetOut(buf) + baseCmd.SetErr(buf) + wwlog.SetLogWriter(buf) + baseCmd.SetArgs(tt.args) + err := baseCmd.Execute() + assert.NoError(t, err) + assert.Equal(t, strings.TrimSpace(tt.expected), strings.TrimSpace(buf.String())) + }) + } } diff --git a/internal/app/wwctl/power/cycle/root_test.go b/internal/app/wwctl/power/cycle/root_test.go index a3e72186..1aec07fa 100644 --- a/internal/app/wwctl/power/cycle/root_test.go +++ b/internal/app/wwctl/power/cycle/root_test.go @@ -11,10 +11,10 @@ import ( "github.com/warewulf/warewulf/internal/pkg/wwlog" ) -func Test_Power_Status(t *testing.T) { +func Test_PowerCycle(t *testing.T) { + warewulfd.SetNoDaemon() env := testenv.New(t) defer env.RemoveAll(t) - env.WriteFile(t, "etc/warewulf/nodes.conf", `WW_INTERNAL: 43 nodeprofiles: default: @@ -27,16 +27,28 @@ nodes: - default ipmi: ipaddr: 10.10.10.10`) - warewulfd.SetNoDaemon() - t.Run("ipmitool status test", func(t *testing.T) { - baseCmd := GetCommand() - buf := new(bytes.Buffer) - baseCmd.SetOut(buf) - baseCmd.SetErr(buf) - wwlog.SetLogWriter(buf) - baseCmd.SetArgs([]string{"--show", "n01"}) - err := baseCmd.Execute() - assert.NoError(t, err) - assert.Equal(t, "10.10.10.10: ipmitool -I lan -H 10.10.10.10 -p 623 -U admin -P admin -e ~ chassis power cycle", strings.TrimSpace(buf.String())) - }) + + tests := map[string]struct { + args []string + expected string + }{ + "power cycle": { + args: []string{"--show", "n01"}, + expected: "10.10.10.10: ipmitool -I lan -H 10.10.10.10 -p 623 -U admin -P admin -e ~ chassis power cycle", + }, + } + + for name, tt := range tests { + t.Run(name, func(t *testing.T) { + baseCmd := GetCommand() + buf := new(bytes.Buffer) + baseCmd.SetOut(buf) + baseCmd.SetErr(buf) + wwlog.SetLogWriter(buf) + baseCmd.SetArgs(tt.args) + err := baseCmd.Execute() + assert.NoError(t, err) + assert.Equal(t, strings.TrimSpace(tt.expected), strings.TrimSpace(buf.String())) + }) + } } diff --git a/internal/app/wwctl/power/off/root_test.go b/internal/app/wwctl/power/off/root_test.go index ce4adb09..18d5939a 100644 --- a/internal/app/wwctl/power/off/root_test.go +++ b/internal/app/wwctl/power/off/root_test.go @@ -12,9 +12,9 @@ import ( ) func Test_Power_Status(t *testing.T) { + warewulfd.SetNoDaemon() env := testenv.New(t) defer env.RemoveAll(t) - env.WriteFile(t, "etc/warewulf/nodes.conf", `WW_INTERNAL: 43 nodeprofiles: default: @@ -27,16 +27,28 @@ nodes: - default ipmi: ipaddr: 10.10.10.10`) - warewulfd.SetNoDaemon() - t.Run("ipmitool status test", func(t *testing.T) { - baseCmd := GetCommand() - buf := new(bytes.Buffer) - baseCmd.SetOut(buf) - baseCmd.SetErr(buf) - wwlog.SetLogWriter(buf) - baseCmd.SetArgs([]string{"--show", "n01"}) - err := baseCmd.Execute() - assert.NoError(t, err) - assert.Equal(t, "10.10.10.10: ipmitool -I lan -H 10.10.10.10 -p 623 -U admin -P admin -e ~ chassis power off", strings.TrimSpace(buf.String())) - }) + + tests := map[string]struct { + args []string + expected string + }{ + "power off": { + args: []string{"--show", "n01"}, + expected: "10.10.10.10: ipmitool -I lan -H 10.10.10.10 -p 623 -U admin -P admin -e ~ chassis power off", + }, + } + + for name, tt := range tests { + t.Run(name, func(t *testing.T) { + baseCmd := GetCommand() + buf := new(bytes.Buffer) + baseCmd.SetOut(buf) + baseCmd.SetErr(buf) + wwlog.SetLogWriter(buf) + baseCmd.SetArgs(tt.args) + err := baseCmd.Execute() + assert.NoError(t, err) + assert.Equal(t, strings.TrimSpace(tt.expected), strings.TrimSpace(buf.String())) + }) + } } diff --git a/internal/app/wwctl/power/on/root_test.go b/internal/app/wwctl/power/on/root_test.go index b67f0968..b42920de 100644 --- a/internal/app/wwctl/power/on/root_test.go +++ b/internal/app/wwctl/power/on/root_test.go @@ -12,9 +12,9 @@ import ( ) func Test_Power_Status(t *testing.T) { + warewulfd.SetNoDaemon() env := testenv.New(t) defer env.RemoveAll(t) - env.WriteFile(t, "etc/warewulf/nodes.conf", `WW_INTERNAL: 43 nodeprofiles: default: @@ -27,16 +27,27 @@ nodes: - default ipmi: ipaddr: 10.10.10.10`) - warewulfd.SetNoDaemon() - t.Run("ipmitool status test", func(t *testing.T) { - baseCmd := GetCommand() - buf := new(bytes.Buffer) - baseCmd.SetOut(buf) - baseCmd.SetErr(buf) - wwlog.SetLogWriter(buf) - baseCmd.SetArgs([]string{"--show", "n01"}) - err := baseCmd.Execute() - assert.NoError(t, err) - assert.Equal(t, "10.10.10.10: ipmitool -I lan -H 10.10.10.10 -p 623 -U admin -P admin -e ~ chassis power on", strings.TrimSpace(buf.String())) - }) + + tests := map[string]struct { + args []string + expected string + }{ + "power on": { + args: []string{"--show", "n01"}, + expected: "10.10.10.10: ipmitool -I lan -H 10.10.10.10 -p 623 -U admin -P admin -e ~ chassis power on", + }, + } + for name, tt := range tests { + t.Run(name, func(t *testing.T) { + baseCmd := GetCommand() + buf := new(bytes.Buffer) + baseCmd.SetOut(buf) + baseCmd.SetErr(buf) + wwlog.SetLogWriter(buf) + baseCmd.SetArgs(tt.args) + err := baseCmd.Execute() + assert.NoError(t, err) + assert.Equal(t, strings.TrimSpace(tt.expected), strings.TrimSpace(buf.String())) + }) + } } diff --git a/internal/app/wwctl/power/reset/root_test.go b/internal/app/wwctl/power/reset/root_test.go index 013648e0..31c5420b 100644 --- a/internal/app/wwctl/power/reset/root_test.go +++ b/internal/app/wwctl/power/reset/root_test.go @@ -12,9 +12,9 @@ import ( ) func Test_Power_Status(t *testing.T) { + warewulfd.SetNoDaemon() env := testenv.New(t) defer env.RemoveAll(t) - env.WriteFile(t, "etc/warewulf/nodes.conf", `WW_INTERNAL: 43 nodeprofiles: default: @@ -27,16 +27,27 @@ nodes: - default ipmi: ipaddr: 10.10.10.10`) - warewulfd.SetNoDaemon() - t.Run("ipmitool status test", func(t *testing.T) { - baseCmd := GetCommand() - buf := new(bytes.Buffer) - baseCmd.SetOut(buf) - baseCmd.SetErr(buf) - wwlog.SetLogWriter(buf) - baseCmd.SetArgs([]string{"--show", "n01"}) - err := baseCmd.Execute() - assert.NoError(t, err) - assert.Equal(t, "10.10.10.10: ipmitool -I lan -H 10.10.10.10 -p 623 -U admin -P admin -e ~ chassis power reset", strings.TrimSpace(buf.String())) - }) + + tests := map[string]struct { + args []string + expected string + }{ + "power reset": { + args: []string{"--show", "n01"}, + expected: "10.10.10.10: ipmitool -I lan -H 10.10.10.10 -p 623 -U admin -P admin -e ~ chassis power reset", + }, + } + for name, tt := range tests { + t.Run(name, func(t *testing.T) { + baseCmd := GetCommand() + buf := new(bytes.Buffer) + baseCmd.SetOut(buf) + baseCmd.SetErr(buf) + wwlog.SetLogWriter(buf) + baseCmd.SetArgs(tt.args) + err := baseCmd.Execute() + assert.NoError(t, err) + assert.Equal(t, strings.TrimSpace(tt.expected), strings.TrimSpace(buf.String())) + }) + } } diff --git a/internal/app/wwctl/power/soft/root_test.go b/internal/app/wwctl/power/soft/root_test.go index 9c9a28d5..7f214f3f 100644 --- a/internal/app/wwctl/power/soft/root_test.go +++ b/internal/app/wwctl/power/soft/root_test.go @@ -12,9 +12,9 @@ import ( ) func Test_Power_Status(t *testing.T) { + warewulfd.SetNoDaemon() env := testenv.New(t) defer env.RemoveAll(t) - env.WriteFile(t, "etc/warewulf/nodes.conf", `WW_INTERNAL: 43 nodeprofiles: default: @@ -27,16 +27,28 @@ nodes: - default ipmi: ipaddr: 10.10.10.10`) - warewulfd.SetNoDaemon() - t.Run("ipmitool status test", func(t *testing.T) { - baseCmd := GetCommand() - buf := new(bytes.Buffer) - baseCmd.SetOut(buf) - baseCmd.SetErr(buf) - wwlog.SetLogWriter(buf) - baseCmd.SetArgs([]string{"--show", "n01"}) - err := baseCmd.Execute() - assert.NoError(t, err) - assert.Equal(t, "10.10.10.10: ipmitool -I lan -H 10.10.10.10 -p 623 -U admin -P admin -e ~ chassis power soft", strings.TrimSpace(buf.String())) - }) + + tests := map[string]struct { + args []string + expected string + }{ + "power soft": { + args: []string{"--show", "n01"}, + expected: "10.10.10.10: ipmitool -I lan -H 10.10.10.10 -p 623 -U admin -P admin -e ~ chassis power soft", + }, + } + + for name, tt := range tests { + t.Run(name, func(t *testing.T) { + baseCmd := GetCommand() + buf := new(bytes.Buffer) + baseCmd.SetOut(buf) + baseCmd.SetErr(buf) + wwlog.SetLogWriter(buf) + baseCmd.SetArgs(tt.args) + err := baseCmd.Execute() + assert.NoError(t, err) + assert.Equal(t, strings.TrimSpace(tt.expected), strings.TrimSpace(buf.String())) + }) + } } diff --git a/internal/app/wwctl/power/status/root_test.go b/internal/app/wwctl/power/status/root_test.go index 1aa2f52a..d7c55b8b 100644 --- a/internal/app/wwctl/power/status/root_test.go +++ b/internal/app/wwctl/power/status/root_test.go @@ -12,9 +12,9 @@ import ( ) func Test_Power_Status(t *testing.T) { + warewulfd.SetNoDaemon() env := testenv.New(t) defer env.RemoveAll(t) - env.WriteFile(t, "etc/warewulf/nodes.conf", `WW_INTERNAL: 43 nodeprofiles: default: @@ -27,16 +27,28 @@ nodes: - default ipmi: ipaddr: 10.10.10.10`) - warewulfd.SetNoDaemon() - t.Run("ipmitool status test", func(t *testing.T) { - baseCmd := GetCommand() - buf := new(bytes.Buffer) - baseCmd.SetOut(buf) - baseCmd.SetErr(buf) - wwlog.SetLogWriter(buf) - baseCmd.SetArgs([]string{"--show", "n01"}) - err := baseCmd.Execute() - assert.NoError(t, err) - assert.Equal(t, "10.10.10.10: ipmitool -I lan -H 10.10.10.10 -p 623 -U admin -P admin -e ~ chassis power status", strings.TrimSpace(buf.String())) - }) + + tests := map[string]struct { + args []string + expected string + }{ + "sensors": { + args: []string{"--show", "n01"}, + expected: "10.10.10.10: ipmitool -I lan -H 10.10.10.10 -p 623 -U admin -P admin -e ~ chassis power status", + }, + } + + for name, tt := range tests { + t.Run(name, func(t *testing.T) { + baseCmd := GetCommand() + buf := new(bytes.Buffer) + baseCmd.SetOut(buf) + baseCmd.SetErr(buf) + wwlog.SetLogWriter(buf) + baseCmd.SetArgs(tt.args) + err := baseCmd.Execute() + assert.NoError(t, err) + assert.Equal(t, strings.TrimSpace(tt.expected), strings.TrimSpace(buf.String())) + }) + } }