package aghos import ( "bytes" "testing" "github.com/AdguardTeam/AdGuardHome/internal/aghio" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestLargestLabeled(t *testing.T) { const ( comm = `command-name` nl = "\n" ) testCases := []struct { name string data []byte wantPID int wantInstNum int }{{ name: "success", data: []byte(nl + ` 123 not-a-` + comm + nl + ` 321 ` + comm + nl, ), wantPID: 321, wantInstNum: 1, }, { name: "several", data: []byte(nl + `1 ` + comm + nl + `5 /` + comm + nl + `2 /some/path/` + comm + nl + `4 ./` + comm + nl + `3 ` + comm + nl + `10 .` + comm + nl, ), wantPID: 5, wantInstNum: 5, }, { name: "no_any", data: []byte(nl + `1 ` + `not-a-` + comm + nl + `2 ` + `not-a-` + comm + nl + `3 ` + `not-a-` + comm + nl, ), wantPID: 0, wantInstNum: 0, }, { name: "weird_input", data: []byte(nl + `abc ` + comm + nl + `-1 ` + comm + nl, ), wantPID: 0, wantInstNum: 0, }} for _, tc := range testCases { r := bytes.NewReader(tc.data) t.Run(tc.name, func(t *testing.T) { pid, instNum, err := parsePSOutput(r, comm, nil) require.NoError(t, err) assert.Equal(t, tc.wantPID, pid) assert.Equal(t, tc.wantInstNum, instNum) }) } t.Run("scanner_fail", func(t *testing.T) { lr, err := aghio.LimitReader(bytes.NewReader([]byte{1, 2, 3}), 0) require.NoError(t, err) target := &aghio.LimitReachedError{} _, _, err = parsePSOutput(lr, "", nil) require.ErrorAs(t, err, &target) assert.EqualValues(t, 0, target.Limit) }) t.Run("ignore", func(t *testing.T) { r := bytes.NewReader([]byte(nl + `1 ` + comm + nl + `2 ` + comm + nl + `3` + comm + nl, )) pid, instances, err := parsePSOutput(r, comm, []int{1, 3}) require.NoError(t, err) assert.Equal(t, 2, pid) assert.Equal(t, 1, instances) }) }