From 2941ed464ca09f804c05b22149a6f74c152bcd54 Mon Sep 17 00:00:00 2001 From: James Bardin Date: Sat, 2 Dec 2017 22:36:43 -0500 Subject: [PATCH] replace the testShutdownHook with a check for Stop Now that the local backend can be cancelled during plan and refresh, we don't really need the testShutdownHook. Simplify the tests by just checking for Stop being called on the provider. --- command/apply.go | 6 +----- command/apply_test.go | 23 +++++++++-------------- command/meta.go | 4 ---- command/plan.go | 5 ----- command/plan_test.go | 17 ++++++++--------- 5 files changed, 18 insertions(+), 37 deletions(-) diff --git a/command/apply.go b/command/apply.go index 3c3d2a189..84b16ce17 100644 --- a/command/apply.go +++ b/command/apply.go @@ -171,6 +171,7 @@ func (c *ApplyCommand) Run(args []string) int { // Perform the operation ctx, ctxCancel := context.WithCancel(context.Background()) defer ctxCancel() + op, err := b.Operation(ctx, opReq) if err != nil { c.Ui.Error(fmt.Sprintf("Error starting operation: %s", err)) @@ -183,11 +184,6 @@ func (c *ApplyCommand) Run(args []string) int { // Cancel our context so we can start gracefully exiting ctxCancel() - // notify tests that the command context was canceled - if testShutdownHook != nil { - testShutdownHook() - } - // Notify the user c.Ui.Output(outputInterrupt) diff --git a/command/apply_test.go b/command/apply_test.go index 2707f293c..3ae4d7adb 100644 --- a/command/apply_test.go +++ b/command/apply_test.go @@ -825,14 +825,7 @@ func TestApply_refresh(t *testing.T) { func TestApply_shutdown(t *testing.T) { cancelled := false - cancelDone := make(chan struct{}) - testShutdownHook = func() { - cancelled = true - close(cancelDone) - } - defer func() { - testShutdownHook = nil - }() + stopped := make(chan struct{}) statePath := testTempFile(t) p := testProvider() @@ -847,6 +840,12 @@ func TestApply_shutdown(t *testing.T) { }, } + p.StopFn = func() error { + close(stopped) + cancelled = true + return nil + } + p.DiffFn = func( *terraform.InstanceInfo, *terraform.InstanceState, @@ -864,11 +863,11 @@ func TestApply_shutdown(t *testing.T) { *terraform.InstanceState, *terraform.InstanceDiff) (*terraform.InstanceState, error) { + // only cancel once if !cancelled { shutdownCh <- struct{}{} - <-cancelDone + <-stopped } - return &terraform.InstanceState{ ID: "foo", Attributes: map[string]string{ @@ -898,10 +897,6 @@ func TestApply_shutdown(t *testing.T) { if state == nil { t.Fatal("state should not be nil") } - - if len(state.RootModule().Resources) != 1 { - t.Fatalf("bad: %d", len(state.RootModule().Resources)) - } } func TestApply_state(t *testing.T) { diff --git a/command/meta.go b/command/meta.go index 729020b2b..27f7765f9 100644 --- a/command/meta.go +++ b/command/meta.go @@ -641,7 +641,3 @@ func isAutoVarFile(path string) bool { return strings.HasSuffix(path, ".auto.tfvars") || strings.HasSuffix(path, ".auto.tfvars.json") } - -// testShutdownHook is used by tests to verify that a command context has been -// canceled -var testShutdownHook func() diff --git a/command/plan.go b/command/plan.go index f6f4f8f2f..bef831e16 100644 --- a/command/plan.go +++ b/command/plan.go @@ -118,11 +118,6 @@ func (c *PlanCommand) Run(args []string) int { // Cancel our context so we can start gracefully exiting ctxCancel() - // notify tests that the command context was canceled - if testShutdownHook != nil { - testShutdownHook() - } - // Notify the user c.Ui.Output(outputInterrupt) diff --git a/command/plan_test.go b/command/plan_test.go index 152486c7f..04390ab5b 100644 --- a/command/plan_test.go +++ b/command/plan_test.go @@ -833,14 +833,7 @@ func TestPlan_detailedExitcode_emptyDiff(t *testing.T) { func TestPlan_shutdown(t *testing.T) { cancelled := false - cancelDone := make(chan struct{}) - testShutdownHook = func() { - cancelled = true - close(cancelDone) - } - defer func() { - testShutdownHook = nil - }() + stopped := make(chan struct{}) shutdownCh := make(chan struct{}) p := testProvider() @@ -853,6 +846,12 @@ func TestPlan_shutdown(t *testing.T) { }, } + p.StopFn = func() error { + close(stopped) + cancelled = true + return nil + } + p.DiffFn = func( *terraform.InstanceInfo, *terraform.InstanceState, @@ -860,7 +859,7 @@ func TestPlan_shutdown(t *testing.T) { if !cancelled { shutdownCh <- struct{}{} - <-cancelDone + <-stopped } return &terraform.InstanceDiff{