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  }