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  }