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  }