packer-cn/packer/rpc/ui_test.go

100 lines
2.1 KiB
Go
Raw Normal View History

2013-05-03 18:49:15 -04:00
package rpc
import (
"cgl.tideland.biz/asserts"
"net/rpc"
"reflect"
2013-05-03 18:49:15 -04:00
"testing"
)
type testUi struct {
askCalled bool
askQuery string
2013-06-03 14:30:38 -04:00
errorCalled bool
errorMessage string
2013-08-11 21:16:00 -04:00
machineCalled bool
machineType string
machineArgs []string
2013-06-03 14:30:38 -04:00
messageCalled bool
messageMessage string
sayCalled bool
sayMessage string
2013-05-03 18:49:15 -04:00
}
func (u *testUi) Ask(query string) (string, error) {
u.askCalled = true
u.askQuery = query
return "foo", nil
}
func (u *testUi) Error(message string) {
2013-05-08 18:12:48 -04:00
u.errorCalled = true
u.errorMessage = message
2013-05-08 18:12:48 -04:00
}
2013-08-11 21:16:00 -04:00
func (u *testUi) Machine(t string, args ...string) {
u.machineCalled = true
u.machineType = t
u.machineArgs = args
}
2013-06-03 14:30:38 -04:00
func (u *testUi) Message(message string) {
u.messageCalled = true
u.messageMessage = message
}
func (u *testUi) Say(message string) {
2013-05-03 18:49:15 -04:00
u.sayCalled = true
u.sayMessage = message
2013-05-03 18:49:15 -04:00
}
func TestUiRPC(t *testing.T) {
assert := asserts.NewTestingAsserts(t, true)
// Create the UI to test
ui := new(testUi)
// Start the RPC server
server := rpc.NewServer()
RegisterUi(server, ui)
address := serveSingleConn(server)
2013-05-03 18:49:15 -04:00
// Create the client over RPC and run some methods to verify it works
client, err := rpc.Dial("tcp", address)
2013-05-03 18:49:15 -04:00
if err != nil {
panic(err)
}
uiClient := &Ui{client}
// Basic error and say tests
result, err := uiClient.Ask("query")
assert.Nil(err, "should not error")
assert.True(ui.askCalled, "ask should be called")
assert.Equal(ui.askQuery, "query", "should be correct")
assert.Equal(result, "foo", "should have correct result")
uiClient.Error("message")
assert.Equal(ui.errorMessage, "message", "message should be correct")
2013-05-08 18:12:48 -04:00
2013-06-03 14:30:38 -04:00
uiClient.Message("message")
assert.Equal(ui.messageMessage, "message", "message should be correct")
uiClient.Say("message")
assert.Equal(ui.sayMessage, "message", "message should be correct")
uiClient.Machine("foo", "bar", "baz")
if !ui.machineCalled {
t.Fatal("machine should be called")
}
if ui.machineType != "foo" {
t.Fatalf("bad type: %#v", ui.machineType)
}
expected := []string{"bar", "baz"}
if !reflect.DeepEqual(ui.machineArgs, expected) {
t.Fatalf("bad: %#v", ui.machineArgs)
}
2013-05-03 18:49:15 -04:00
}