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  }