9fans.net/go@v0.0.7/plumb/plumb_test.go (about) 1 package plumb 2 3 import ( 4 "bytes" 5 "fmt" 6 "reflect" 7 "testing" 8 ) 9 10 func TestBasic(t *testing.T) { 11 attr := &Attribute{ 12 Name: "addr", 13 Value: "/root/", 14 } 15 message := &Message{ 16 Src: "plumb", 17 Dst: "edit", 18 Dir: "/Users/r", 19 Type: "text", 20 Attr: attr, 21 Data: []byte("/etc/passwd"), 22 } 23 var buf bytes.Buffer 24 buf.Reset() 25 message.Send(&buf) 26 m := new(Message) 27 err := m.Recv(&buf) 28 if err != nil { 29 t.Fatalf("recv: %s", err) 30 } 31 if !reflect.DeepEqual(message, m) { 32 t.Fatalf("difference:\n%+v\n%+v", message, m) 33 } 34 } 35 36 type quoteTest struct { 37 unquoted, quoted string 38 } 39 40 var quoteTests = []quoteTest{ 41 {"", ""}, 42 {"abc", "abc"}, 43 {" ", "' '"}, 44 {"'", "''''"}, 45 {"''", "''''''"}, 46 {"abc def", "'abc def'"}, 47 {"abc'def", "'abc''def'"}, 48 {"abc'' ''def", "'abc'''' ''''def'"}, 49 } 50 51 func TestQuoting(t *testing.T) { 52 for _, test := range quoteTests { 53 q := quoteAttribute(test.unquoted) 54 if q != test.quoted { 55 t.Errorf("quoting failed: for %q expected %q got %q", test.unquoted, test.quoted, q) 56 } 57 u, err := unquoteAttribute(test.quoted) 58 if err != nil { 59 t.Errorf("unquoting error for %q: %s", test.quoted, err) 60 continue 61 } 62 if u != test.unquoted { 63 t.Errorf("unquoting failed: for %q expected %q got %q", test.quoted, test.unquoted, u) 64 } 65 } 66 } 67 68 func TestMultipleAttributes(t *testing.T) { 69 // Make up a list of attributes from the quoting tests. 70 var attr *Attribute 71 for i, test := range quoteTests { 72 attr = &Attribute{ 73 Name: fmt.Sprintf("attr%d", i), 74 Value: test.unquoted, 75 Next: attr, 76 } 77 } 78 message := &Message{ 79 Src: "plumb", 80 Dst: "edit", 81 Dir: "/Users/r", 82 Type: "text", 83 Attr: attr, 84 Data: []byte("/etc/passwd"), 85 } 86 var buf bytes.Buffer 87 buf.Reset() 88 message.Send(&buf) 89 m := new(Message) 90 err := m.Recv(&buf) 91 if err != nil { 92 t.Fatalf("recv: %s", err) 93 } 94 if !reflect.DeepEqual(message, m) { 95 t.Fatalf("difference:\n%+v\n%+v", message, m) 96 } 97 }