github.com/HashDataInc/packer@v1.3.2/packer/rpc/ui_test.go (about) 1 package rpc 2 3 import ( 4 "io" 5 "reflect" 6 "testing" 7 8 "github.com/hashicorp/packer/packer" 9 ) 10 11 type testUi struct { 12 askCalled bool 13 askQuery string 14 errorCalled bool 15 errorMessage string 16 machineCalled bool 17 machineType string 18 machineArgs []string 19 messageCalled bool 20 messageMessage string 21 sayCalled bool 22 sayMessage string 23 24 progressBarCalled bool 25 progressBarStartCalled bool 26 progressBarAddCalled bool 27 progressBarFinishCalled bool 28 progressBarNewProxyReaderCalled bool 29 } 30 31 func (u *testUi) Ask(query string) (string, error) { 32 u.askCalled = true 33 u.askQuery = query 34 return "foo", nil 35 } 36 37 func (u *testUi) Error(message string) { 38 u.errorCalled = true 39 u.errorMessage = message 40 } 41 42 func (u *testUi) Machine(t string, args ...string) { 43 u.machineCalled = true 44 u.machineType = t 45 u.machineArgs = args 46 } 47 48 func (u *testUi) Message(message string) { 49 u.messageCalled = true 50 u.messageMessage = message 51 } 52 53 func (u *testUi) Say(message string) { 54 u.sayCalled = true 55 u.sayMessage = message 56 } 57 58 func (u *testUi) ProgressBar() packer.ProgressBar { 59 u.progressBarCalled = true 60 return u 61 } 62 63 func (u *testUi) Start(int64) { 64 u.progressBarStartCalled = true 65 } 66 67 func (u *testUi) Add(int64) { 68 u.progressBarAddCalled = true 69 } 70 71 func (u *testUi) Finish() { 72 u.progressBarFinishCalled = true 73 } 74 75 func (u *testUi) NewProxyReader(r io.Reader) io.Reader { 76 u.progressBarNewProxyReaderCalled = true 77 return r 78 } 79 80 func TestUiRPC(t *testing.T) { 81 // Create the UI to test 82 ui := new(testUi) 83 84 // Start the RPC server 85 client, server := testClientServer(t) 86 defer client.Close() 87 defer server.Close() 88 server.RegisterUi(ui) 89 90 uiClient := client.Ui() 91 92 // Basic error and say tests 93 result, err := uiClient.Ask("query") 94 if err != nil { 95 t.Fatalf("err: %s", err) 96 } 97 if !ui.askCalled { 98 t.Fatal("should be called") 99 } 100 if ui.askQuery != "query" { 101 t.Fatalf("bad: %s", ui.askQuery) 102 } 103 if result != "foo" { 104 t.Fatalf("bad: %#v", result) 105 } 106 107 uiClient.Error("message") 108 if ui.errorMessage != "message" { 109 t.Fatalf("bad: %#v", ui.errorMessage) 110 } 111 112 uiClient.Message("message") 113 if ui.messageMessage != "message" { 114 t.Fatalf("bad: %#v", ui.errorMessage) 115 } 116 117 uiClient.Say("message") 118 if ui.sayMessage != "message" { 119 t.Fatalf("bad: %#v", ui.errorMessage) 120 } 121 122 bar := uiClient.ProgressBar() 123 if ui.progressBarCalled != true { 124 t.Errorf("ProgressBar not called.") 125 } 126 127 bar.Start(100) 128 if ui.progressBarStartCalled != true { 129 t.Errorf("progressBar.Start not called.") 130 } 131 132 bar.Add(1) 133 if ui.progressBarAddCalled != true { 134 t.Errorf("progressBar.Add not called.") 135 } 136 137 bar.Finish() 138 if ui.progressBarFinishCalled != true { 139 t.Errorf("progressBar.Finish not called.") 140 } 141 142 uiClient.Machine("foo", "bar", "baz") 143 if !ui.machineCalled { 144 t.Fatal("machine should be called") 145 } 146 147 if ui.machineType != "foo" { 148 t.Fatalf("bad type: %#v", ui.machineType) 149 } 150 151 expected := []string{"bar", "baz"} 152 if !reflect.DeepEqual(ui.machineArgs, expected) { 153 t.Fatalf("bad: %#v", ui.machineArgs) 154 } 155 }