github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/ngaut/go-zookeeper/zk/structs_test.go (about) 1 package zk 2 3 import ( 4 "reflect" 5 "testing" 6 ) 7 8 func TestEncodeDecodePacket(t *testing.T) { 9 encodeDecodeTest(t, &requestHeader{-2, 5}) 10 encodeDecodeTest(t, &connectResponse{1, 2, 3, nil}) 11 encodeDecodeTest(t, &connectResponse{1, 2, 3, []byte{4, 5, 6}}) 12 encodeDecodeTest(t, &getAclResponse{[]ACL{{12, "s", "anyone"}}, zkstat{}}) 13 encodeDecodeTest(t, &getChildrenResponse{[]string{"foo", "bar"}}) 14 encodeDecodeTest(t, &pathWatchRequest{"path", true}) 15 encodeDecodeTest(t, &pathWatchRequest{"path", false}) 16 encodeDecodeTest(t, &CheckVersionRequest{"/", -1}) 17 encodeDecodeTest(t, &multiRequest{Ops: []multiRequestOp{{multiHeader{opCheck, false, -1}, &CheckVersionRequest{"/", -1}}}}) 18 } 19 20 func encodeDecodeTest(t *testing.T, r interface{}) { 21 buf := make([]byte, 1024) 22 n, err := encodePacket(buf, r) 23 if err != nil { 24 t.Errorf("encodePacket returned non-nil error %+v\n", err) 25 return 26 } 27 t.Logf("%+v %x", r, buf[:n]) 28 r2 := reflect.New(reflect.ValueOf(r).Elem().Type()).Interface() 29 n2, err := decodePacket(buf[:n], r2) 30 if err != nil { 31 t.Errorf("decodePacket returned non-nil error %+v\n", err) 32 return 33 } 34 if n != n2 { 35 t.Errorf("sizes don't match: %d != %d", n, n2) 36 return 37 } 38 if !reflect.DeepEqual(r, r2) { 39 t.Errorf("results don't match: %+v != %+v", r, r2) 40 return 41 } 42 } 43 44 func TestEncodeShortBuffer(t *testing.T) { 45 buf := make([]byte, 0) 46 _, err := encodePacket(buf, &requestHeader{1, 2}) 47 if err != ErrShortBuffer { 48 t.Errorf("encodePacket should return ErrShortBuffer on a short buffer instead of '%+v'", err) 49 return 50 } 51 } 52 53 func TestDecodeShortBuffer(t *testing.T) { 54 buf := make([]byte, 0) 55 _, err := decodePacket(buf, &responseHeader{}) 56 if err != ErrShortBuffer { 57 t.Errorf("decodePacket should return ErrShortBuffer on a short buffer instead of '%+v'", err) 58 return 59 } 60 }