github.com/u-root/u-root@v7.0.1-0.20200915234505-ad7babab0a8e+incompatible/pkg/pty/pty_test.go (about) 1 // Copyright 2015-2020 the u-root Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // This test is flaky AF under the race detector. 6 7 // +build !race 8 9 package pty 10 11 import ( 12 "encoding/json" 13 "os" 14 "reflect" 15 "testing" 16 ) 17 18 func TestNew(t *testing.T) { 19 if _, err := New(); os.IsNotExist(err) { 20 t.Skipf("Failed allocate /dev/pts device") 21 } else if err != nil { 22 t.Errorf("New pty: want nil, got %v", err) 23 } 24 } 25 26 func TestRunRestoreTTYMode(t *testing.T) { 27 p, err := New() 28 if os.IsNotExist(err) { 29 t.Skipf("Failed to allocate /dev/pts device") 30 } else if err != nil { 31 t.Fatalf("TestStart New pty: want nil, got %v", err) 32 } 33 34 p.Command("echo", "hi") 35 if err := p.Start(); err != nil { 36 t.Fatalf("TestStart Start: want nil, got %v", err) 37 } 38 if err := p.Wait(); err != nil { 39 t.Error(err) 40 } 41 ti, err := p.TTY.Get() 42 if err != nil { 43 t.Fatalf("TestStart Get: want nil, got %v", err) 44 } 45 if !reflect.DeepEqual(ti, p.Restorer) { 46 tt, err := json.Marshal(ti) 47 if err != nil { 48 t.Fatalf("Can't marshall %v: %v", ti, err) 49 } 50 r, err := json.Marshal(p.Restorer) 51 if err != nil { 52 t.Fatalf("Can't marshall %v: %v", p.Restorer, err) 53 } 54 t.Errorf("TestStart: want termios from Get %s to be the same as termios from Start (%s) to be the same, they differ", tt, r) 55 } 56 b := make([]byte, 1024) 57 n, err := p.Ptm.Read(b) 58 t.Logf("ptm read is %d bytes, b is %q", n, b[:n]) 59 if err != nil { 60 t.Fatalf("Error reading from process: %v", err) 61 } 62 if n != 4 { 63 t.Errorf("Bogus returned amount: got %d, want 4", n) 64 } 65 if string(b[:n]) != "hi\r\n" { 66 t.Errorf("bogus returned data: got %q, want %q", string(b[:n]), "hi\r\n") 67 } 68 }