github.com/askholme/packer@v0.7.2-0.20140924152349-70d9566a6852/packer/rpc/build_test.go (about)

     1  package rpc
     2  
     3  import (
     4  	"errors"
     5  	"github.com/mitchellh/packer/packer"
     6  	"reflect"
     7  	"testing"
     8  )
     9  
    10  var testBuildArtifact = &packer.MockArtifact{}
    11  
    12  type testBuild struct {
    13  	nameCalled      bool
    14  	prepareCalled   bool
    15  	prepareWarnings []string
    16  	runCalled       bool
    17  	runCache        packer.Cache
    18  	runUi           packer.Ui
    19  	setDebugCalled  bool
    20  	setForceCalled  bool
    21  	cancelCalled    bool
    22  
    23  	errRunResult bool
    24  }
    25  
    26  func (b *testBuild) Name() string {
    27  	b.nameCalled = true
    28  	return "name"
    29  }
    30  
    31  func (b *testBuild) Prepare() ([]string, error) {
    32  	b.prepareCalled = true
    33  	return b.prepareWarnings, nil
    34  }
    35  
    36  func (b *testBuild) Run(ui packer.Ui, cache packer.Cache) ([]packer.Artifact, error) {
    37  	b.runCalled = true
    38  	b.runCache = cache
    39  	b.runUi = ui
    40  
    41  	if b.errRunResult {
    42  		return nil, errors.New("foo")
    43  	} else {
    44  		return []packer.Artifact{testBuildArtifact}, nil
    45  	}
    46  }
    47  
    48  func (b *testBuild) SetDebug(bool) {
    49  	b.setDebugCalled = true
    50  }
    51  
    52  func (b *testBuild) SetForce(bool) {
    53  	b.setForceCalled = true
    54  }
    55  
    56  func (b *testBuild) Cancel() {
    57  	b.cancelCalled = true
    58  }
    59  
    60  func TestBuild(t *testing.T) {
    61  	b := new(testBuild)
    62  	client, server := testClientServer(t)
    63  	defer client.Close()
    64  	defer server.Close()
    65  	server.RegisterBuild(b)
    66  	bClient := client.Build()
    67  
    68  	// Test Name
    69  	bClient.Name()
    70  	if !b.nameCalled {
    71  		t.Fatal("name should be called")
    72  	}
    73  
    74  	// Test Prepare
    75  	bClient.Prepare()
    76  	if !b.prepareCalled {
    77  		t.Fatal("prepare should be called")
    78  	}
    79  
    80  	// Test Run
    81  	cache := new(testCache)
    82  	ui := new(testUi)
    83  	artifacts, err := bClient.Run(ui, cache)
    84  	if !b.runCalled {
    85  		t.Fatal("run should be called")
    86  	}
    87  
    88  	if err != nil {
    89  		t.Fatalf("err: %s", err)
    90  	}
    91  
    92  	if len(artifacts) != 1 {
    93  		t.Fatalf("bad: %#v", artifacts)
    94  	}
    95  
    96  	if artifacts[0].BuilderId() != "bid" {
    97  		t.Fatalf("bad: %#v", artifacts)
    98  	}
    99  
   100  	// Test run with an error
   101  	b.errRunResult = true
   102  	_, err = bClient.Run(ui, cache)
   103  	if err == nil {
   104  		t.Fatal("should error")
   105  	}
   106  
   107  	// Test SetDebug
   108  	bClient.SetDebug(true)
   109  	if !b.setDebugCalled {
   110  		t.Fatal("should be called")
   111  	}
   112  
   113  	// Test SetForce
   114  	bClient.SetForce(true)
   115  	if !b.setForceCalled {
   116  		t.Fatal("should be called")
   117  	}
   118  
   119  	// Test Cancel
   120  	bClient.Cancel()
   121  	if !b.cancelCalled {
   122  		t.Fatal("should be called")
   123  	}
   124  }
   125  
   126  func TestBuildPrepare_Warnings(t *testing.T) {
   127  	b := new(testBuild)
   128  	client, server := testClientServer(t)
   129  	defer client.Close()
   130  	defer server.Close()
   131  	server.RegisterBuild(b)
   132  	bClient := client.Build()
   133  
   134  	expected := []string{"foo"}
   135  	b.prepareWarnings = expected
   136  
   137  	warnings, err := bClient.Prepare()
   138  	if err != nil {
   139  		t.Fatalf("err: %s", err)
   140  	}
   141  	if !reflect.DeepEqual(warnings, expected) {
   142  		t.Fatalf("bad: %#v", warnings)
   143  	}
   144  }
   145  
   146  func TestBuild_ImplementsBuild(t *testing.T) {
   147  	var _ packer.Build = new(build)
   148  }