github.com/rita33cool1/iot-system-gateway@v0.0.0-20200911033302-e65bde238cc5/docker-engine/pkg/term/term_linux_test.go (about) 1 //+build linux 2 3 package term // import "github.com/docker/docker/pkg/term" 4 5 import ( 6 "io/ioutil" 7 "os" 8 "testing" 9 10 "github.com/google/go-cmp/cmp" 11 "github.com/gotestyourself/gotestyourself/assert" 12 ) 13 14 // RequiresRoot skips tests that require root, unless the test.root flag has 15 // been set 16 func RequiresRoot(t *testing.T) { 17 if os.Getuid() != 0 { 18 t.Skip("skipping test that requires root") 19 return 20 } 21 } 22 23 func newTtyForTest(t *testing.T) (*os.File, error) { 24 RequiresRoot(t) 25 return os.OpenFile("/dev/tty", os.O_RDWR, os.ModeDevice) 26 } 27 28 func newTempFile() (*os.File, error) { 29 return ioutil.TempFile(os.TempDir(), "temp") 30 } 31 32 func TestGetWinsize(t *testing.T) { 33 tty, err := newTtyForTest(t) 34 defer tty.Close() 35 assert.NilError(t, err) 36 winSize, err := GetWinsize(tty.Fd()) 37 assert.NilError(t, err) 38 assert.Assert(t, winSize != nil) 39 40 newSize := Winsize{Width: 200, Height: 200, x: winSize.x, y: winSize.y} 41 err = SetWinsize(tty.Fd(), &newSize) 42 assert.NilError(t, err) 43 winSize, err = GetWinsize(tty.Fd()) 44 assert.NilError(t, err) 45 assert.DeepEqual(t, *winSize, newSize, cmpWinsize) 46 } 47 48 var cmpWinsize = cmp.AllowUnexported(Winsize{}) 49 50 func TestSetWinsize(t *testing.T) { 51 tty, err := newTtyForTest(t) 52 defer tty.Close() 53 assert.NilError(t, err) 54 winSize, err := GetWinsize(tty.Fd()) 55 assert.NilError(t, err) 56 assert.Assert(t, winSize != nil) 57 newSize := Winsize{Width: 200, Height: 200, x: winSize.x, y: winSize.y} 58 err = SetWinsize(tty.Fd(), &newSize) 59 assert.NilError(t, err) 60 winSize, err = GetWinsize(tty.Fd()) 61 assert.NilError(t, err) 62 assert.DeepEqual(t, *winSize, newSize, cmpWinsize) 63 } 64 65 func TestGetFdInfo(t *testing.T) { 66 tty, err := newTtyForTest(t) 67 defer tty.Close() 68 assert.NilError(t, err) 69 inFd, isTerminal := GetFdInfo(tty) 70 assert.Equal(t, inFd, tty.Fd()) 71 assert.Equal(t, isTerminal, true) 72 tmpFile, err := newTempFile() 73 assert.NilError(t, err) 74 defer tmpFile.Close() 75 inFd, isTerminal = GetFdInfo(tmpFile) 76 assert.Equal(t, inFd, tmpFile.Fd()) 77 assert.Equal(t, isTerminal, false) 78 } 79 80 func TestIsTerminal(t *testing.T) { 81 tty, err := newTtyForTest(t) 82 defer tty.Close() 83 assert.NilError(t, err) 84 isTerminal := IsTerminal(tty.Fd()) 85 assert.Equal(t, isTerminal, true) 86 tmpFile, err := newTempFile() 87 assert.NilError(t, err) 88 defer tmpFile.Close() 89 isTerminal = IsTerminal(tmpFile.Fd()) 90 assert.Equal(t, isTerminal, false) 91 } 92 93 func TestSaveState(t *testing.T) { 94 tty, err := newTtyForTest(t) 95 defer tty.Close() 96 assert.NilError(t, err) 97 state, err := SaveState(tty.Fd()) 98 assert.NilError(t, err) 99 assert.Assert(t, state != nil) 100 tty, err = newTtyForTest(t) 101 assert.NilError(t, err) 102 defer tty.Close() 103 err = RestoreTerminal(tty.Fd(), state) 104 assert.NilError(t, err) 105 } 106 107 func TestDisableEcho(t *testing.T) { 108 tty, err := newTtyForTest(t) 109 defer tty.Close() 110 assert.NilError(t, err) 111 state, err := SetRawTerminal(tty.Fd()) 112 defer RestoreTerminal(tty.Fd(), state) 113 assert.NilError(t, err) 114 assert.Assert(t, state != nil) 115 err = DisableEcho(tty.Fd(), state) 116 assert.NilError(t, err) 117 }