blob: e768d469acf43e727851dbc3038e80617abbaaf0 [file] [log] [blame]
Serge Bazanskid4438d62021-05-23 13:37:30 +02001package ident
2
3import (
4 "testing"
5
6 "github.com/go-test/deep"
7)
8
9// TestResponseDecode exercises the response decode implementation.
10func TestResponseDecode(t *testing.T) {
11 for i, te := range []struct {
12 data string
13 want *Response
14 }{
15 // 0: Everything okay, server returned error.
16 {"123, 234 : ERROR : INVALID-PORT", &Response{
17 ServerPort: 123,
18 ClientPort: 234,
19 Error: InvalidPort,
20 }},
21 // 1: Everything okay, server returned error but also added some weird
22 // whitespace.
23 {" 123\t ,234 :ERROR: NO-USER ", &Response{
24 ServerPort: 123,
25 ClientPort: 234,
26 Error: NoUser,
27 }},
28 // 2: Everything okay, server returned a simple ident response.
29 {"123,234 : USERID : UNIX :q3k", &Response{
30 ServerPort: 123,
31 ClientPort: 234,
32 Ident: &IdentResponse{
33 OperatingSystem: "UNIX",
34 CharacterSet: "US-ASCII",
35 UserID: "q3k",
36 },
37 }},
38 // 3: Everything okay, server returned an ident response with a
39 // charset.
40 {"123,234 : USERID : UNIX, PETSCII :q3k", &Response{
41 ServerPort: 123,
42 ClientPort: 234,
43 Ident: &IdentResponse{
44 OperatingSystem: "UNIX",
45 CharacterSet: "PETSCII",
46 UserID: "q3k",
47 },
48 }},
49 } {
50 res, err := decodeResponse([]byte(te.data))
51 if err != nil {
52 if te.want != nil {
53 t.Errorf("%d: wanted result, got err %v", i, err)
54 }
55 } else {
56 if diff := deep.Equal(te.want, res); diff != nil {
57 t.Errorf("%d: %s", i, diff)
58 }
59 }
60 }
61}