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  }