| 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) |
| } |
| } |
| } |
| } |