From a5f802ec01e75dcf49db495794a2c8ac71d4f6a7 Mon Sep 17 00:00:00 2001 From: Marc Carmier Date: Thu, 16 Mar 2017 23:03:30 +0100 Subject: [PATCH] Add unit tests for DebuggedProvisionner --- packer/provisioner_test.go | 64 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/packer/provisioner_test.go b/packer/provisioner_test.go index 22d34806f..4d370ef39 100644 --- a/packer/provisioner_test.go +++ b/packer/provisioner_test.go @@ -197,3 +197,67 @@ func TestPausedProvisionerCancel(t *testing.T) { t.Fatal("cancel should be called") } } + +func TestDebuggedProvisioner_impl(t *testing.T) { + var _ Provisioner = new(DebuggedProvisioner) +} + +func TestDebuggedProvisionerPrepare(t *testing.T) { + mock := new(MockProvisioner) + prov := &DebuggedProvisioner{ + Provisioner: mock, + } + + prov.Prepare(42) + if !mock.PrepCalled { + t.Fatal("prepare should be called") + } + if mock.PrepConfigs[0] != 42 { + t.Fatal("should have proper configs") + } +} + +func TestDebuggedProvisionerProvision(t *testing.T) { + mock := new(MockProvisioner) + prov := &DebuggedProvisioner{ + Provisioner: mock, + } + + ui := testUi() + comm := new(MockCommunicator) + writeReader(ui, "\n") + prov.Provision(ui, comm) + if !mock.ProvCalled { + t.Fatal("prov should be called") + } + if mock.ProvUi != ui { + t.Fatal("should have proper ui") + } + if mock.ProvCommunicator != comm { + t.Fatal("should have proper comm") + } +} + +func TestDebuggedProvisionerCancel(t *testing.T) { + mock := new(MockProvisioner) + prov := &DebuggedProvisioner{ + Provisioner: mock, + } + + provCh := make(chan struct{}) + mock.ProvFunc = func() error { + close(provCh) + time.Sleep(10 * time.Millisecond) + return nil + } + + // Start provisioning and wait for it to start + go prov.Provision(testUi(), new(MockCommunicator)) + <-provCh + + // Cancel it + prov.Cancel() + if !mock.CancelCalled { + t.Fatal("cancel should be called") + } +}