| package profiler | |
| import ( | |
| "testing" | |
| "github.com/google/go-cmp/cmp" | |
| ) | |
| func TestRun(t *testing.T) { | |
| tests := []struct { | |
| name string | |
| fakeCmd Command | |
| want map[string][]string | |
| wantErr bool | |
| }{ | |
| { | |
| name: "vmstat", | |
| fakeCmd: &vmstat{ | |
| name: "testdata/vmstat.sh", | |
| 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{ | |
| name: "testdata/lscpu.sh", | |
| titles: []string{"CPU(s)"}, | |
| }, | |
| want: map[string][]string{ | |
| "CPU(s)": {"8"}, | |
| }, | |
| }, | |
| { | |
| name: "free", | |
| fakeCmd: &free{ | |
| name: "testdata/free.sh", | |
| titles: []string{"Mem:used", "Mem:total", | |
| "Swap:used", "Swap:total"}, | |
| }, | |
| want: map[string][]string{ | |
| "Mem:used": {"13"}, | |
| "Mem:total": {"14520"}, | |
| "Swap:used": {"0"}, | |
| "Swap:total": {"0"}, | |
| }, | |
| }, | |
| { | |
| name: "iostat", | |
| fakeCmd: &iostat{ | |
| name: "testdata/iostat.sh", | |
| flags: "-dxz", | |
| titles: []string{"%util"}, | |
| }, | |
| want: map[string][]string{ | |
| "%util": {"5.59", "0.00"}, | |
| }, | |
| }, | |
| { | |
| name: "iostat ignoring first report", | |
| fakeCmd: &iostat{ | |
| name: "testdata/iostat.sh", | |
| flags: "-dxyz", | |
| titles: []string{"%util"}, | |
| }, | |
| want: map[string][]string{ | |
| "%util": {"100.00", "100.00", "100.00", "100.00", "100.00", "100.00"}, | |
| }, | |
| }, | |
| { | |
| name: "df", | |
| fakeCmd: &df{ | |
| name: "testdata/df.sh", | |
| flags: "-k", | |
| titles: []string{"Use%"}, | |
| }, | |
| want: map[string][]string{ | |
| "Use%": {"76%", "0%", "1%", "100%"}, | |
| }, | |
| }, | |
| { | |
| name: "df's output with column titles mixed up", | |
| fakeCmd: &df{ | |
| name: "testdata/df.sh", | |
| flags: "-h", | |
| titles: []string{"Mounted on"}, | |
| }, | |
| want: map[string][]string{ | |
| "Mounted on": {"/", "/dev", "/dev/tty", "/dev/kvm", "/dev/.ssh/sshd_config"}, | |
| }, | |
| }, | |
| { | |
| name: "no titles", | |
| fakeCmd: &vmstat{ | |
| name: "testdata/vmstat.sh", | |
| 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{ | |
| name: "testdata/vmstat.sh", | |
| 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"}, | |
| }, | |
| }, | |
| { | |
| name: "illegal argument", | |
| fakeCmd: &vmstat{ | |
| name: "testdata/vmstat.sh", | |
| count: -4, | |
| }, | |
| wantErr: true, | |
| }, | |
| } | |
| for _, test := range tests { | |
| got, err := test.fakeCmd.Run() | |
| if gotErr := err != nil; gotErr != test.wantErr { | |
| t.Fatalf("Run() err %v, wantErr %t", err, test.wantErr) | |
| } | |
| if diff := cmp.Diff(test.want, got); diff != "" { | |
| t.Errorf("Ran Run(), but got mismatch between got and want (-got, +want): \n diff %s", diff) | |
| } | |
| } | |
| } |