blob: e768d469acf43e727851dbc3038e80617abbaaf0 [file] [log] [blame]
package ident
import (
"testing"
"github.com/go-test/deep"
)
// TestResponseDecode exercises the response decode implementation.
func TestResponseDecode(t *testing.T) {
for i, te := range []struct {
data string
want *Response
}{
// 0: Everything okay, server returned error.
{"123, 234 : ERROR : INVALID-PORT", &Response{
ServerPort: 123,
ClientPort: 234,
Error: InvalidPort,
}},
// 1: Everything okay, server returned error but also added some weird
// whitespace.
{" 123\t ,234 :ERROR: NO-USER ", &Response{
ServerPort: 123,
ClientPort: 234,
Error: NoUser,
}},
// 2: Everything okay, server returned a simple ident response.
{"123,234 : USERID : UNIX :q3k", &Response{
ServerPort: 123,
ClientPort: 234,
Ident: &IdentResponse{
OperatingSystem: "UNIX",
CharacterSet: "US-ASCII",
UserID: "q3k",
},
}},
// 3: Everything okay, server returned an ident response with a
// charset.
{"123,234 : USERID : UNIX, PETSCII :q3k", &Response{
ServerPort: 123,
ClientPort: 234,
Ident: &IdentResponse{
OperatingSystem: "UNIX",
CharacterSet: "PETSCII",
UserID: "q3k",
},
}},
} {
res, err := decodeResponse([]byte(te.data))
if err != nil {
if te.want != nil {
t.Errorf("%d: wanted result, got err %v", i, err)
}
} else {
if diff := deep.Equal(te.want, res); diff != nil {
t.Errorf("%d: %s", i, diff)
}
}
}
}