github.com/hernad/nomad@v1.6.112/command/ui/log_ui_test.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: MPL-2.0 3 4 package ui 5 6 import ( 7 "bytes" 8 "io" 9 "testing" 10 11 "github.com/mitchellh/cli" 12 "github.com/shoenig/test/must" 13 ) 14 15 func TestLogUI_Implements(t *testing.T) { 16 var _ cli.Ui = new(LogUI) 17 } 18 19 func TestLogUI_Ask(t *testing.T) { 20 testCases := []struct { 21 name string 22 query string 23 input string 24 expectedQuery string 25 expectedResult string 26 }{ 27 { 28 name: "EmptyString", 29 query: "Middle Name?", 30 input: "\n", 31 expectedQuery: "Middle Name? ", 32 expectedResult: "", 33 }, 34 { 35 name: "NonEmptyString", 36 query: "Name?", 37 input: "foo bar\nbaz\n", 38 expectedQuery: "Name? ", 39 expectedResult: "foo bar", 40 }, 41 } 42 43 for _, tc := range testCases { 44 t.Run(tc.name, func(t *testing.T) { 45 inReader, inWriter := io.Pipe() 46 defer inReader.Close() 47 defer inWriter.Close() 48 49 writer := new(bytes.Buffer) 50 51 logUI, err := NewLogUI(&cli.BasicUi{ 52 Reader: inReader, 53 Writer: writer, 54 }) 55 must.NoError(t, err) 56 57 go inWriter.Write([]byte(tc.input)) 58 59 result, err := logUI.Ask(tc.query) 60 must.NoError(t, err) 61 must.Eq(t, writer.String(), tc.expectedQuery) 62 must.Eq(t, result, tc.expectedResult) 63 }) 64 } 65 } 66 67 func TestLogUI_AskSecret(t *testing.T) { 68 inReader, inWriter := io.Pipe() 69 defer inReader.Close() 70 defer inWriter.Close() 71 72 writer := new(bytes.Buffer) 73 logUI, err := NewLogUI(&cli.BasicUi{ 74 Reader: inReader, 75 Writer: writer, 76 }) 77 must.NoError(t, err) 78 79 go inWriter.Write([]byte("foo bar\nbaz\n")) 80 81 result, err := logUI.AskSecret("Name?") 82 must.NoError(t, err) 83 must.Eq(t, writer.String(), "Name? ") 84 must.Eq(t, result, "foo bar") 85 } 86 87 func TestLogUI_Error(t *testing.T) { 88 writer := new(bytes.Buffer) 89 logUI, err := NewLogUI(&cli.BasicUi{Writer: writer}) 90 must.NoError(t, err) 91 logUI.Error("ERROR") 92 must.Eq(t, writer.String(), "ERROR") 93 94 writer = new(bytes.Buffer) 95 logUI, err = NewLogUI(&cli.ColoredUi{Ui: &cli.BasicUi{Writer: writer}}) 96 must.NoError(t, err) 97 logUI.Error("ERROR") 98 must.Eq(t, writer.String(), "ERROR") 99 } 100 101 func TestLogUI_Output(t *testing.T) { 102 writer := new(bytes.Buffer) 103 logUI, err := NewLogUI(&cli.BasicUi{Writer: writer}) 104 must.NoError(t, err) 105 logUI.Error("OUTPUT") 106 must.Eq(t, writer.String(), "OUTPUT") 107 108 writer = new(bytes.Buffer) 109 logUI, err = NewLogUI(&cli.ColoredUi{Ui: &cli.BasicUi{Writer: writer}}) 110 must.NoError(t, err) 111 logUI.Error("OUTPUT") 112 must.Eq(t, writer.String(), "OUTPUT") 113 } 114 115 func TestLogUI_Warn(t *testing.T) { 116 writer := new(bytes.Buffer) 117 logUI, err := NewLogUI(&cli.BasicUi{Writer: writer}) 118 must.NoError(t, err) 119 logUI.Error("WARN") 120 must.Eq(t, writer.String(), "WARN") 121 122 writer = new(bytes.Buffer) 123 logUI, err = NewLogUI(&cli.ColoredUi{Ui: &cli.BasicUi{Writer: writer}}) 124 must.NoError(t, err) 125 logUI.Error("WARN") 126 must.Eq(t, writer.String(), "WARN") 127 }