github.com/sams1990/dockerrepo@v17.12.1-ce-rc2+incompatible/pkg/term/proxy_test.go (about) 1 package term 2 3 import ( 4 "bytes" 5 "fmt" 6 "reflect" 7 "testing" 8 9 "github.com/stretchr/testify/require" 10 ) 11 12 func TestEscapeProxyRead(t *testing.T) { 13 escapeKeys, _ := ToBytes("DEL") 14 keys, _ := ToBytes("a,b,c,+") 15 reader := NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 16 buf := make([]byte, len(keys)) 17 nr, err := reader.Read(buf) 18 require.NoError(t, err) 19 require.EqualValues(t, nr, len(keys), fmt.Sprintf("nr %d should be equal to the number of %d", nr, len(keys))) 20 require.Equal(t, keys, buf, "keys & the read buffer should be equal") 21 22 keys, _ = ToBytes("") 23 reader = NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 24 buf = make([]byte, len(keys)) 25 nr, err = reader.Read(buf) 26 require.Error(t, err, "Should throw error when no keys are to read") 27 require.EqualValues(t, nr, 0, "nr should be zero") 28 require.Condition(t, func() (success bool) { return len(keys) == 0 && len(buf) == 0 }, "keys & the read buffer size should be zero") 29 30 escapeKeys, _ = ToBytes("ctrl-x,ctrl-@") 31 keys, _ = ToBytes("DEL") 32 reader = NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 33 buf = make([]byte, len(keys)) 34 nr, err = reader.Read(buf) 35 require.NoError(t, err) 36 require.EqualValues(t, nr, 1, fmt.Sprintf("nr %d should be equal to the number of 1", nr)) 37 require.Equal(t, keys, buf, "keys & the read buffer should be equal") 38 39 escapeKeys, _ = ToBytes("ctrl-c") 40 keys, _ = ToBytes("ctrl-c") 41 reader = NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 42 buf = make([]byte, len(keys)) 43 nr, err = reader.Read(buf) 44 require.Condition(t, func() (success bool) { 45 return reflect.TypeOf(err).Name() == "EscapeError" 46 }, err) 47 require.EqualValues(t, nr, 0, "nr should be equal to 0") 48 require.Equal(t, keys, buf, "keys & the read buffer should be equal") 49 50 escapeKeys, _ = ToBytes("ctrl-c,ctrl-z") 51 keys, _ = ToBytes("ctrl-c,ctrl-z") 52 reader = NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 53 buf = make([]byte, 1) 54 nr, err = reader.Read(buf) 55 require.NoError(t, err) 56 require.EqualValues(t, nr, 0, "nr should be equal to 0") 57 require.Equal(t, keys[0:1], buf, "keys & the read buffer should be equal") 58 nr, err = reader.Read(buf) 59 require.Condition(t, func() (success bool) { 60 return reflect.TypeOf(err).Name() == "EscapeError" 61 }, err) 62 require.EqualValues(t, nr, 0, "nr should be equal to 0") 63 require.Equal(t, keys[1:], buf, "keys & the read buffer should be equal") 64 65 escapeKeys, _ = ToBytes("ctrl-c,ctrl-z") 66 keys, _ = ToBytes("ctrl-c,DEL,+") 67 reader = NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 68 buf = make([]byte, 1) 69 nr, err = reader.Read(buf) 70 require.NoError(t, err) 71 require.EqualValues(t, nr, 0, "nr should be equal to 0") 72 require.Equal(t, keys[0:1], buf, "keys & the read buffer should be equal") 73 buf = make([]byte, len(keys)) 74 nr, err = reader.Read(buf) 75 require.NoError(t, err) 76 require.EqualValues(t, nr, len(keys), fmt.Sprintf("nr should be equal to %d", len(keys))) 77 require.Equal(t, keys, buf, "keys & the read buffer should be equal") 78 79 escapeKeys, _ = ToBytes("ctrl-c,ctrl-z") 80 keys, _ = ToBytes("ctrl-c,DEL") 81 reader = NewEscapeProxy(bytes.NewReader(keys), escapeKeys) 82 buf = make([]byte, 1) 83 nr, err = reader.Read(buf) 84 require.NoError(t, err) 85 require.EqualValues(t, nr, 0, "nr should be equal to 0") 86 require.Equal(t, keys[0:1], buf, "keys & the read buffer should be equal") 87 buf = make([]byte, len(keys)) 88 nr, err = reader.Read(buf) 89 require.NoError(t, err) 90 require.EqualValues(t, nr, len(keys), fmt.Sprintf("nr should be equal to %d", len(keys))) 91 require.Equal(t, keys, buf, "keys & the read buffer should be equal") 92 }