blob: fcb8b80d2f295cc5d841c03f97281af411bb3cf3 [file] [log] [blame]
package profiler
import (
"testing"
"github.com/google/go-cmp/cmp"
)
func TestRun(t *testing.T) {
tests := []struct {
name string
fakeCmd Command
opts Options
want map[string][]string
wantErr bool
}{
{
name: "vmstat",
fakeCmd: &vmstat{"testdata/vmstat.sh"},
opts: Options{
Delay: 1,
Count: 3,
Titles: []string{"us", "st", "sy"},
},
want: map[string][]string{
"us": {"1", "2", "7"},
"sy": {"0", "1", "3"},
"st": {"0", "0", "0"},
},
},
{
name: "lscpu",
fakeCmd: &lscpu{"testdata/lscpu.sh"},
opts: Options{
Titles: []string{"CPU(s)"},
},
want: map[string][]string{
"CPU(s)": {"8"},
},
},
{
name: "no titles",
fakeCmd: &vmstat{"testdata/vmstat.sh"},
opts: Options{
Delay: 1,
Count: 2,
},
want: map[string][]string{
"r": {"3", "1"},
"us": {"1", "2"},
"sy": {"0", "1"},
"id": {"96", "98"},
"wa": {"3", "0"},
"st": {"0", "0"},
},
},
{
name: "spaced rows",
fakeCmd: &vmstat{"testdata/vmstat.sh"},
opts: Options{
Delay: 1,
Count: 4,
Titles: []string{"us", "st", "sy"},
},
want: map[string][]string{
"us": {"7", "3", "1", "1"},
"sy": {"2", "2", "2", "0"},
"st": {"0", "0", "0", "0"},
},
},
}
for _, test := range tests {
got, err := test.fakeCmd.Run(test.opts)
if gotErr := err != nil; gotErr != test.wantErr {
t.Fatalf("Run(%v) err %q, wantErr %v", test.opts, err, test.wantErr)
}
if diff := cmp.Diff(test.want, got); diff != "" {
t.Errorf("Ran Run(%v), but got mismatch between got and want (-got, +want): \n diff %s", test.opts, diff)
}
}
}