github.com/jbronn/packer@v0.1.6-0.20140120165540-8a1364dbd817/packer/rpc/ui_test.go (about)

     1  package rpc
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  )
     7  
     8  type testUi struct {
     9  	askCalled      bool
    10  	askQuery       string
    11  	errorCalled    bool
    12  	errorMessage   string
    13  	machineCalled  bool
    14  	machineType    string
    15  	machineArgs    []string
    16  	messageCalled  bool
    17  	messageMessage string
    18  	sayCalled      bool
    19  	sayMessage     string
    20  }
    21  
    22  func (u *testUi) Ask(query string) (string, error) {
    23  	u.askCalled = true
    24  	u.askQuery = query
    25  	return "foo", nil
    26  }
    27  
    28  func (u *testUi) Error(message string) {
    29  	u.errorCalled = true
    30  	u.errorMessage = message
    31  }
    32  
    33  func (u *testUi) Machine(t string, args ...string) {
    34  	u.machineCalled = true
    35  	u.machineType = t
    36  	u.machineArgs = args
    37  }
    38  
    39  func (u *testUi) Message(message string) {
    40  	u.messageCalled = true
    41  	u.messageMessage = message
    42  }
    43  
    44  func (u *testUi) Say(message string) {
    45  	u.sayCalled = true
    46  	u.sayMessage = message
    47  }
    48  
    49  func TestUiRPC(t *testing.T) {
    50  	// Create the UI to test
    51  	ui := new(testUi)
    52  
    53  	// Start the RPC server
    54  	client, server := testClientServer(t)
    55  	defer client.Close()
    56  	defer server.Close()
    57  	server.RegisterUi(ui)
    58  
    59  	uiClient := client.Ui()
    60  
    61  	// Basic error and say tests
    62  	result, err := uiClient.Ask("query")
    63  	if err != nil {
    64  		t.Fatalf("err: %s", err)
    65  	}
    66  	if !ui.askCalled {
    67  		t.Fatal("should be called")
    68  	}
    69  	if ui.askQuery != "query" {
    70  		t.Fatalf("bad: %s", ui.askQuery)
    71  	}
    72  	if result != "foo" {
    73  		t.Fatalf("bad: %#v", result)
    74  	}
    75  
    76  	uiClient.Error("message")
    77  	if ui.errorMessage != "message" {
    78  		t.Fatalf("bad: %#v", ui.errorMessage)
    79  	}
    80  
    81  	uiClient.Message("message")
    82  	if ui.messageMessage != "message" {
    83  		t.Fatalf("bad: %#v", ui.errorMessage)
    84  	}
    85  
    86  	uiClient.Say("message")
    87  	if ui.sayMessage != "message" {
    88  		t.Fatalf("bad: %#v", ui.errorMessage)
    89  	}
    90  
    91  	uiClient.Machine("foo", "bar", "baz")
    92  	if !ui.machineCalled {
    93  		t.Fatal("machine should be called")
    94  	}
    95  
    96  	if ui.machineType != "foo" {
    97  		t.Fatalf("bad type: %#v", ui.machineType)
    98  	}
    99  
   100  	expected := []string{"bar", "baz"}
   101  	if !reflect.DeepEqual(ui.machineArgs, expected) {
   102  		t.Fatalf("bad: %#v", ui.machineArgs)
   103  	}
   104  }