github.com/zhouyu0/docker-note@v0.0.0-20190722021225-b8d3825084db/pkg/term/proxy_test.go (about) 1 package term // import "github.com/docker/docker/pkg/term" 2 3 import ( 4 "bytes" 5 "fmt" 6 "testing" 7 8 "gotest.tools/assert" 9 is "gotest.tools/assert/cmp" 10 ) 11 12 func TestEscapeProxyRead(t *testing.T) { 13 escapeKeys, _ := ToBytes("") 14 keys, _ := ToBytes("a") 15 reader := NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 16 buf := make([]byte, len(keys)) 17 nr, err := reader.Read(buf) 18 assert.NilError(t, err) 19 assert.Equal(t, nr, len(keys), fmt.Sprintf("nr %d should be equal to the number of %d", nr, len(keys))) 20 assert.DeepEqual(t, keys, buf) 21 22 keys, _ = ToBytes("a,b,c") 23 reader = NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 24 buf = make([]byte, len(keys)) 25 nr, err = reader.Read(buf) 26 assert.NilError(t, err) 27 assert.Equal(t, nr, len(keys), fmt.Sprintf("nr %d should be equal to the number of %d", nr, len(keys))) 28 assert.DeepEqual(t, keys, buf) 29 30 keys, _ = ToBytes("") 31 reader = NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 32 buf = make([]byte, len(keys)) 33 nr, err = reader.Read(buf) 34 assert.Assert(t, is.ErrorContains(err, ""), "Should throw error when no keys are to read") 35 assert.Equal(t, nr, 0, "nr should be zero") 36 assert.Check(t, is.Len(keys, 0)) 37 assert.Check(t, is.Len(buf, 0)) 38 39 escapeKeys, _ = ToBytes("DEL") 40 keys, _ = ToBytes("a,b,c,+") 41 reader = NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 42 buf = make([]byte, len(keys)) 43 nr, err = reader.Read(buf) 44 assert.NilError(t, err) 45 assert.Equal(t, nr, len(keys), fmt.Sprintf("nr %d should be equal to the number of %d", nr, len(keys))) 46 assert.DeepEqual(t, keys, buf) 47 48 keys, _ = ToBytes("") 49 reader = NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 50 buf = make([]byte, len(keys)) 51 nr, err = reader.Read(buf) 52 assert.Assert(t, is.ErrorContains(err, ""), "Should throw error when no keys are to read") 53 assert.Equal(t, nr, 0, "nr should be zero") 54 assert.Check(t, is.Len(keys, 0)) 55 assert.Check(t, is.Len(buf, 0)) 56 57 escapeKeys, _ = ToBytes("ctrl-x,ctrl-@") 58 keys, _ = ToBytes("DEL") 59 reader = NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 60 buf = make([]byte, len(keys)) 61 nr, err = reader.Read(buf) 62 assert.NilError(t, err) 63 assert.Equal(t, nr, 1, fmt.Sprintf("nr %d should be equal to the number of 1", nr)) 64 assert.DeepEqual(t, keys, buf) 65 66 escapeKeys, _ = ToBytes("ctrl-c") 67 keys, _ = ToBytes("ctrl-c") 68 reader = NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 69 buf = make([]byte, len(keys)) 70 nr, err = reader.Read(buf) 71 assert.Error(t, err, "read escape sequence") 72 assert.Equal(t, nr, 0, "nr should be equal to 0") 73 assert.DeepEqual(t, keys, buf) 74 75 escapeKeys, _ = ToBytes("ctrl-c,ctrl-z") 76 keys, _ = ToBytes("ctrl-c,ctrl-z") 77 reader = NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 78 buf = make([]byte, 1) 79 nr, err = reader.Read(buf) 80 assert.NilError(t, err) 81 assert.Equal(t, nr, 0, "nr should be equal to 0") 82 assert.DeepEqual(t, keys[0:1], buf) 83 nr, err = reader.Read(buf) 84 assert.Error(t, err, "read escape sequence") 85 assert.Equal(t, nr, 0, "nr should be equal to 0") 86 assert.DeepEqual(t, keys[1:], buf) 87 88 escapeKeys, _ = ToBytes("ctrl-c,ctrl-z") 89 keys, _ = ToBytes("ctrl-c,DEL,+") 90 reader = NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 91 buf = make([]byte, 1) 92 nr, err = reader.Read(buf) 93 assert.NilError(t, err) 94 assert.Equal(t, nr, 0, "nr should be equal to 0") 95 assert.DeepEqual(t, keys[0:1], buf) 96 buf = make([]byte, len(keys)) 97 nr, err = reader.Read(buf) 98 assert.NilError(t, err) 99 assert.Equal(t, nr, len(keys), fmt.Sprintf("nr should be equal to %d", len(keys))) 100 assert.DeepEqual(t, keys, buf) 101 102 escapeKeys, _ = ToBytes("ctrl-c,ctrl-z") 103 keys, _ = ToBytes("ctrl-c,DEL") 104 reader = NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 105 buf = make([]byte, 1) 106 nr, err = reader.Read(buf) 107 assert.NilError(t, err) 108 assert.Equal(t, nr, 0, "nr should be equal to 0") 109 assert.DeepEqual(t, keys[0:1], buf) 110 buf = make([]byte, len(keys)) 111 nr, err = reader.Read(buf) 112 assert.NilError(t, err) 113 assert.Equal(t, nr, len(keys), fmt.Sprintf("nr should be equal to %d", len(keys))) 114 assert.DeepEqual(t, keys, buf) 115 }