github.com/daniellockard/packer@v0.7.6-0.20141210173435-5a9390934716/packer/rpc/environment_test.go (about)

     1  package rpc
     2  
     3  import (
     4  	"github.com/mitchellh/packer/packer"
     5  	"testing"
     6  )
     7  
     8  var testEnvBuilder = &packer.MockBuilder{}
     9  var testEnvCache = &testCache{}
    10  var testEnvUi = &testUi{}
    11  
    12  type testEnvironment struct {
    13  	builderCalled bool
    14  	builderName   string
    15  	cliCalled     bool
    16  	cliArgs       []string
    17  	hookCalled    bool
    18  	hookName      string
    19  	ppCalled      bool
    20  	ppName        string
    21  	provCalled    bool
    22  	provName      string
    23  	uiCalled      bool
    24  }
    25  
    26  func (e *testEnvironment) Builder(name string) (packer.Builder, error) {
    27  	e.builderCalled = true
    28  	e.builderName = name
    29  	return testEnvBuilder, nil
    30  }
    31  
    32  func (e *testEnvironment) Cache() packer.Cache {
    33  	return testEnvCache
    34  }
    35  
    36  func (e *testEnvironment) Cli(args []string) (int, error) {
    37  	e.cliCalled = true
    38  	e.cliArgs = args
    39  	return 42, nil
    40  }
    41  
    42  func (e *testEnvironment) Hook(name string) (packer.Hook, error) {
    43  	e.hookCalled = true
    44  	e.hookName = name
    45  	return nil, nil
    46  }
    47  
    48  func (e *testEnvironment) PostProcessor(name string) (packer.PostProcessor, error) {
    49  	e.ppCalled = true
    50  	e.ppName = name
    51  	return nil, nil
    52  }
    53  
    54  func (e *testEnvironment) Provisioner(name string) (packer.Provisioner, error) {
    55  	e.provCalled = true
    56  	e.provName = name
    57  	return nil, nil
    58  }
    59  
    60  func (e *testEnvironment) Ui() packer.Ui {
    61  	e.uiCalled = true
    62  	return testEnvUi
    63  }
    64  
    65  func TestEnvironmentRPC(t *testing.T) {
    66  	// Create the interface to test
    67  	e := &testEnvironment{}
    68  
    69  	// Start the server
    70  	client, server := testClientServer(t)
    71  	defer client.Close()
    72  	defer server.Close()
    73  	server.RegisterEnvironment(e)
    74  	eClient := client.Environment()
    75  
    76  	// Test Builder
    77  	builder, _ := eClient.Builder("foo")
    78  	if !e.builderCalled {
    79  		t.Fatal("builder should be called")
    80  	}
    81  	if e.builderName != "foo" {
    82  		t.Fatalf("bad: %#v", e.builderName)
    83  	}
    84  
    85  	builder.Prepare(nil)
    86  	if !testEnvBuilder.PrepareCalled {
    87  		t.Fatal("should be called")
    88  	}
    89  
    90  	// Test Cache
    91  	cache := eClient.Cache()
    92  	cache.Lock("foo")
    93  	if !testEnvCache.lockCalled {
    94  		t.Fatal("should be called")
    95  	}
    96  
    97  	// Test Provisioner
    98  	_, _ = eClient.Provisioner("foo")
    99  	if !e.provCalled {
   100  		t.Fatal("should be called")
   101  	}
   102  	if e.provName != "foo" {
   103  		t.Fatalf("bad: %s", e.provName)
   104  	}
   105  
   106  	// Test Ui
   107  	ui := eClient.Ui()
   108  	if !e.uiCalled {
   109  		t.Fatal("should be called")
   110  	}
   111  
   112  	// Test calls on the Ui
   113  	ui.Say("format")
   114  	if !testEnvUi.sayCalled {
   115  		t.Fatal("should be called")
   116  	}
   117  	if testEnvUi.sayMessage != "format" {
   118  		t.Fatalf("bad: %#v", testEnvUi.sayMessage)
   119  	}
   120  }
   121  
   122  func TestEnvironment_ImplementsEnvironment(t *testing.T) {
   123  	var _ packer.Environment = new(Environment)
   124  }