From dc631530d26660077294e61edf000d27a0905a96 Mon Sep 17 00:00:00 2001 From: Adrien Delorme Date: Fri, 24 May 2019 17:56:27 +0200 Subject: [PATCH 1/2] stop using goroutines in TestPausedProvisionerProvision_waits to render the test less flaky. this should fix #7684 --- packer/provisioner_test.go | 40 +++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/packer/provisioner_test.go b/packer/provisioner_test.go index ac6ab591e..d4b34e067 100644 --- a/packer/provisioner_test.go +++ b/packer/provisioner_test.go @@ -2,6 +2,7 @@ package packer import ( "context" + "fmt" "testing" "time" ) @@ -126,30 +127,29 @@ func TestPausedProvisionerProvision(t *testing.T) { } func TestPausedProvisionerProvision_waits(t *testing.T) { - mock := new(MockProvisioner) - prov := &PausedProvisioner{ - PauseBefore: 50 * time.Millisecond, - Provisioner: mock, - } + startTime := time.Now() + waitTime := 50 * time.Millisecond - dataCh := make(chan struct{}) - mock.ProvFunc = func(context.Context) error { - close(dataCh) - return nil + prov := &PausedProvisioner{ + PauseBefore: waitTime, + Provisioner: &MockProvisioner{ + ProvFunc: func(context.Context) error { + timeSinceStartTime := time.Since(startTime) + if timeSinceStartTime < waitTime { + return fmt.Errorf("Spent not enough time waiting: %s", timeSinceStartTime) + } + if timeSinceStartTime > waitTime+10*time.Millisecond { + return fmt.Errorf("Spent too much time waiting: %s", timeSinceStartTime) + } + return nil + }, + }, } - go prov.Provision(context.Background(), testUi(), new(MockCommunicator)) - - select { - case <-time.After(10 * time.Millisecond): - case <-dataCh: - t.Fatal("should not be called") - } + err := prov.Provision(context.Background(), testUi(), new(MockCommunicator)) - select { - case <-time.After(100 * time.Millisecond): - t.Fatal("never called") - case <-dataCh: + if err != nil { + t.Fatalf("prov failed: %v", err) } } From ce15617d056df6804f301059a93e6202e12ff425 Mon Sep 17 00:00:00 2001 From: Adrien Delorme Date: Fri, 24 May 2019 18:21:53 +0200 Subject: [PATCH 2/2] TestPausedProvisionerProvision_waits: don't fail when we spend too much time. --- packer/provisioner_test.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/packer/provisioner_test.go b/packer/provisioner_test.go index d4b34e067..641702428 100644 --- a/packer/provisioner_test.go +++ b/packer/provisioner_test.go @@ -138,9 +138,6 @@ func TestPausedProvisionerProvision_waits(t *testing.T) { if timeSinceStartTime < waitTime { return fmt.Errorf("Spent not enough time waiting: %s", timeSinceStartTime) } - if timeSinceStartTime > waitTime+10*time.Millisecond { - return fmt.Errorf("Spent too much time waiting: %s", timeSinceStartTime) - } return nil }, },