github.com/devdivbcp/moby@v17.12.0-ce-rc1.0.20200726071732-2d4bfdc789ad+incompatible/pkg/term/proxy_test.go (about) 1 package term // import "github.com/docker/docker/pkg/term" 2 3 import ( 4 "bytes" 5 "testing" 6 7 "gotest.tools/assert" 8 is "gotest.tools/assert/cmp" 9 ) 10 11 func TestEscapeProxyRead(t *testing.T) { 12 t.Run("no escape keys, keys a", func(t *testing.T) { 13 escapeKeys, _ := ToBytes("") 14 keys, _ := ToBytes("a") 15 reader := NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 16 17 buf := make([]byte, len(keys)) 18 nr, err := reader.Read(buf) 19 assert.NilError(t, err) 20 assert.Equal(t, nr, len(keys)) 21 assert.DeepEqual(t, keys, buf) 22 }) 23 24 t.Run("no escape keys, keys a,b,c", func(t *testing.T) { 25 escapeKeys, _ := ToBytes("") 26 keys, _ := ToBytes("a,b,c") 27 reader := NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 28 29 buf := make([]byte, len(keys)) 30 nr, err := reader.Read(buf) 31 assert.NilError(t, err) 32 assert.Equal(t, nr, len(keys)) 33 assert.DeepEqual(t, keys, buf) 34 }) 35 36 t.Run("no escape keys, no keys", func(t *testing.T) { 37 escapeKeys, _ := ToBytes("") 38 keys, _ := ToBytes("") 39 reader := NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 40 41 buf := make([]byte, len(keys)) 42 nr, err := reader.Read(buf) 43 assert.Assert(t, is.ErrorContains(err, ""), "Should throw error when no keys are to read") 44 assert.Equal(t, nr, 0) 45 assert.Check(t, is.Len(keys, 0)) 46 assert.Check(t, is.Len(buf, 0)) 47 }) 48 49 t.Run("DEL escape key, keys a,b,c,+", func(t *testing.T) { 50 escapeKeys, _ := ToBytes("DEL") 51 keys, _ := ToBytes("a,b,c,+") 52 reader := NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 53 54 buf := make([]byte, len(keys)) 55 nr, err := reader.Read(buf) 56 assert.NilError(t, err) 57 assert.Equal(t, nr, len(keys)) 58 assert.DeepEqual(t, keys, buf) 59 }) 60 61 t.Run("DEL escape key, no keys", func(t *testing.T) { 62 escapeKeys, _ := ToBytes("DEL") 63 keys, _ := ToBytes("") 64 reader := NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 65 66 buf := make([]byte, len(keys)) 67 nr, err := reader.Read(buf) 68 assert.Assert(t, is.ErrorContains(err, ""), "Should throw error when no keys are to read") 69 assert.Equal(t, nr, 0) 70 assert.Check(t, is.Len(keys, 0)) 71 assert.Check(t, is.Len(buf, 0)) 72 }) 73 74 t.Run("ctrl-x,ctrl-@ escape key, keys DEL", func(t *testing.T) { 75 escapeKeys, _ := ToBytes("ctrl-x,ctrl-@") 76 keys, _ := ToBytes("DEL") 77 reader := NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 78 79 buf := make([]byte, len(keys)) 80 nr, err := reader.Read(buf) 81 assert.NilError(t, err) 82 assert.Equal(t, nr, 1) 83 assert.DeepEqual(t, keys, buf) 84 }) 85 86 t.Run("ctrl-c escape key, keys ctrl-c", func(t *testing.T) { 87 escapeKeys, _ := ToBytes("ctrl-c") 88 keys, _ := ToBytes("ctrl-c") 89 reader := NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 90 91 buf := make([]byte, len(keys)) 92 nr, err := reader.Read(buf) 93 assert.Error(t, err, "read escape sequence") 94 assert.Equal(t, nr, 0) 95 assert.DeepEqual(t, keys, buf) 96 }) 97 98 t.Run("ctrl-c,ctrl-z escape key, keys ctrl-c,ctrl-z", func(t *testing.T) { 99 escapeKeys, _ := ToBytes("ctrl-c,ctrl-z") 100 keys, _ := ToBytes("ctrl-c,ctrl-z") 101 reader := NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 102 103 buf := make([]byte, 1) 104 nr, err := reader.Read(buf) 105 assert.NilError(t, err) 106 assert.Equal(t, nr, 0) 107 assert.DeepEqual(t, keys[0:1], buf) 108 109 nr, err = reader.Read(buf) 110 assert.Error(t, err, "read escape sequence") 111 assert.Equal(t, nr, 0) 112 assert.DeepEqual(t, keys[1:], buf) 113 }) 114 115 t.Run("ctrl-c,ctrl-z escape key, keys ctrl-c,DEL,+", func(t *testing.T) { 116 escapeKeys, _ := ToBytes("ctrl-c,ctrl-z") 117 keys, _ := ToBytes("ctrl-c,DEL,+") 118 reader := NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 119 120 buf := make([]byte, 1) 121 nr, err := reader.Read(buf) 122 assert.NilError(t, err) 123 assert.Equal(t, nr, 0) 124 assert.DeepEqual(t, keys[0:1], buf) 125 126 buf = make([]byte, len(keys)) 127 nr, err = reader.Read(buf) 128 assert.NilError(t, err) 129 assert.Equal(t, nr, len(keys)) 130 assert.DeepEqual(t, keys, buf) 131 }) 132 133 t.Run("ctrl-c,ctrl-z escape key, keys ctrl-c,DEL", func(t *testing.T) { 134 escapeKeys, _ := ToBytes("ctrl-c,ctrl-z") 135 keys, _ := ToBytes("ctrl-c,DEL") 136 reader := NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 137 138 buf := make([]byte, 1) 139 nr, err := reader.Read(buf) 140 assert.NilError(t, err) 141 assert.Equal(t, nr, 0) 142 assert.DeepEqual(t, keys[0:1], buf) 143 144 buf = make([]byte, len(keys)) 145 nr, err = reader.Read(buf) 146 assert.NilError(t, err) 147 assert.Equal(t, nr, len(keys)) 148 assert.DeepEqual(t, keys, buf) 149 }) 150 151 }