github.com/phobos182/packer@v0.2.3-0.20130819023704-c84d2aeffc68/packer/rpc/provisioner_test.go (about) 1 package rpc 2 3 import ( 4 "cgl.tideland.biz/asserts" 5 "github.com/mitchellh/packer/packer" 6 "net/rpc" 7 "testing" 8 ) 9 10 type testProvisioner struct { 11 prepareCalled bool 12 prepareConfigs []interface{} 13 provCalled bool 14 provComm packer.Communicator 15 provUi packer.Ui 16 } 17 18 func (p *testProvisioner) Prepare(configs ...interface{}) error { 19 p.prepareCalled = true 20 p.prepareConfigs = configs 21 return nil 22 } 23 24 func (p *testProvisioner) Provision(ui packer.Ui, comm packer.Communicator) error { 25 p.provCalled = true 26 p.provComm = comm 27 p.provUi = ui 28 return nil 29 } 30 31 func TestProvisionerRPC(t *testing.T) { 32 assert := asserts.NewTestingAsserts(t, true) 33 34 // Create the interface to test 35 p := new(testProvisioner) 36 37 // Start the server 38 server := rpc.NewServer() 39 RegisterProvisioner(server, p) 40 address := serveSingleConn(server) 41 42 // Create the client over RPC and run some methods to verify it works 43 client, err := rpc.Dial("tcp", address) 44 assert.Nil(err, "should be able to connect") 45 46 // Test Prepare 47 config := 42 48 pClient := Provisioner(client) 49 pClient.Prepare(config) 50 assert.True(p.prepareCalled, "prepare should be called") 51 assert.Equal(p.prepareConfigs, []interface{}{42}, "prepare should be called with right arg") 52 53 // Test Provision 54 ui := &testUi{} 55 comm := &testCommunicator{} 56 pClient.Provision(ui, comm) 57 assert.True(p.provCalled, "provision should be called") 58 59 p.provUi.Say("foo") 60 assert.True(ui.sayCalled, "say should be called") 61 } 62 63 func TestProvisioner_Implements(t *testing.T) { 64 assert := asserts.NewTestingAsserts(t, true) 65 66 var r packer.Provisioner 67 p := Provisioner(nil) 68 69 assert.Implementor(p, &r, "should be a provisioner") 70 }