Skip to content

Commit f7893cf

Browse files
committed
[+] add tests for "pgwatch metric print" commands
1 parent eedeac8 commit f7893cf

3 files changed

Lines changed: 81 additions & 4 deletions

File tree

internal/cmdopts/cmdmetric.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ func (cmd *MetricPrintInitCommand) Execute(args []string) error {
3636
if err != nil {
3737
return err
3838
}
39+
w := cmd.owner.OutputWriter
3940
for _, name := range args {
4041
if preset, ok := metrics.PresetDefs[name]; ok {
4142
args = append(args, maps.Keys(preset.Metrics)...)
@@ -45,8 +46,9 @@ func (cmd *MetricPrintInitCommand) Execute(args []string) error {
4546
args = slices.Compact(args)
4647
for _, mname := range args {
4748
if m, ok := metrics.MetricDefs[mname]; ok && m.InitSQL != "" {
48-
fmt.Println("-- ", mname)
49-
fmt.Println(m.InitSQL)
49+
50+
fmt.Fprintln(w, "--", mname)
51+
fmt.Fprintln(w, m.InitSQL)
5052
}
5153
}
5254
cmd.owner.CompleteCommand(ExitCodeOK)
@@ -67,13 +69,15 @@ func (cmd *MetricPrintSQLCommand) Execute(args []string) error {
6769
if err != nil {
6870
return err
6971
}
72+
w := cmd.owner.OutputWriter
7073
if cmd.Version == 0 {
7174
cmd.Version = math.MaxInt32
7275
}
7376
for _, name := range args {
7477
if m, ok := metrics.MetricDefs[name]; ok {
75-
fmt.Println("-- ", name)
76-
fmt.Println(m.GetSQL(cmd.Version))
78+
if v := m.GetSQL(cmd.Version); v > "" {
79+
fmt.Fprintln(w, "--", name, v)
80+
}
7781
}
7882
}
7983
cmd.owner.CompleteCommand(ExitCodeOK)

internal/cmdopts/cmdmetric_test.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package cmdopts
2+
3+
import (
4+
"os"
5+
"strings"
6+
"testing"
7+
8+
"github.com/stretchr/testify/assert"
9+
)
10+
11+
func TestMetricPrintInit_Execute(t *testing.T) {
12+
13+
var err error
14+
15+
w := &strings.Builder{}
16+
os.Args = []string{0: "config_test", "metric", "print-init", "test1"}
17+
_, err = New(w)
18+
assert.Empty(t, w.String())
19+
assert.NoError(t, err, "should not error when no metrics found")
20+
21+
w.Reset()
22+
os.Args = []string{0: "config_test", "metric", "print-init", "cpu_load"}
23+
_, err = New(w)
24+
assert.Contains(t, w.String(), "-- cpu_load")
25+
assert.NoError(t, err)
26+
27+
w.Reset()
28+
os.Args = []string{0: "config_test", "metric", "print-init", "standard"}
29+
_, err = New(w)
30+
assert.Contains(t, w.String(), "-- cpu_load")
31+
assert.NoError(t, err)
32+
33+
os.Args = []string{0: "config_test", "--metrics=foo", "metric", "print-init", "standard"}
34+
_, err = New(w)
35+
assert.Error(t, err, "should error when no metric definitions found")
36+
37+
os.Args = []string{0: "config_test", "--metrics=postgresql://foo@bar/fail", "metric", "print-init", "standard"}
38+
_, err = New(w)
39+
assert.Error(t, err, "should error when no config database found")
40+
}
41+
42+
func TestMetricPrintSQL_Execute(t *testing.T) {
43+
var err error
44+
45+
w := &strings.Builder{}
46+
os.Args = []string{0: "config_test", "metric", "print-sql", "test1"}
47+
_, err = New(w)
48+
assert.Empty(t, w.String())
49+
assert.NoError(t, err, "should not error when no metrics found")
50+
51+
w.Reset()
52+
os.Args = []string{0: "config_test", "metric", "print-sql", "cpu_load"}
53+
_, err = New(w)
54+
assert.Contains(t, w.String(), "get_load_average()")
55+
assert.NoError(t, err)
56+
57+
w.Reset()
58+
os.Args = []string{0: "config_test", "metric", "print-sql", "cpu_load", "--version=10"}
59+
_, err = New(w)
60+
assert.Empty(t, w.String(), "should not print anything for deprecated version")
61+
assert.NoError(t, err)
62+
63+
os.Args = []string{0: "config_test", "--metrics=foo", "metric", "print-sql", "foo"}
64+
_, err = New(w)
65+
assert.Error(t, err, "should error when no metric definitions found")
66+
67+
os.Args = []string{0: "config_test", "--metrics=postgresql://foo@bar/fail", "metric", "print-sql", "foo"}
68+
_, err = New(w)
69+
assert.Error(t, err, "should error when no config database found")
70+
}

internal/cmdopts/cmdoptions.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ type Options struct {
5252

5353
ExitCode int32
5454
CommandCompleted bool
55+
56+
OutputWriter io.Writer
5557
}
5658

5759
func addCommands(parser *flags.Parser, opts *Options) {
@@ -69,6 +71,7 @@ func New(writer io.Writer) (cmdOpts *Options, err error) {
6971
cmdOpts = new(Options)
7072
parser := flags.NewParser(cmdOpts, flags.HelpFlag)
7173
parser.SubcommandsOptional = true // if not command specified, start monitoring
74+
cmdOpts.OutputWriter = writer
7275
addCommands(parser, cmdOpts)
7376
nonParsedArgs, err := parser.Parse() // parse and execute subcommand if any
7477
if err != nil {

0 commit comments

Comments
 (0)