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.
This commit is contained in:
James Bardin 2017-12-02 22:36:43 -05:00
parent df38c2e3ea
commit 2941ed464c
5 changed files with 18 additions and 37 deletions

View File

@ -171,6 +171,7 @@ func (c *ApplyCommand) Run(args []string) int {
// Perform the operation // Perform the operation
ctx, ctxCancel := context.WithCancel(context.Background()) ctx, ctxCancel := context.WithCancel(context.Background())
defer ctxCancel() defer ctxCancel()
op, err := b.Operation(ctx, opReq) op, err := b.Operation(ctx, opReq)
if err != nil { if err != nil {
c.Ui.Error(fmt.Sprintf("Error starting operation: %s", err)) 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 // Cancel our context so we can start gracefully exiting
ctxCancel() ctxCancel()
// notify tests that the command context was canceled
if testShutdownHook != nil {
testShutdownHook()
}
// Notify the user // Notify the user
c.Ui.Output(outputInterrupt) c.Ui.Output(outputInterrupt)

View File

@ -825,14 +825,7 @@ func TestApply_refresh(t *testing.T) {
func TestApply_shutdown(t *testing.T) { func TestApply_shutdown(t *testing.T) {
cancelled := false cancelled := false
cancelDone := make(chan struct{}) stopped := make(chan struct{})
testShutdownHook = func() {
cancelled = true
close(cancelDone)
}
defer func() {
testShutdownHook = nil
}()
statePath := testTempFile(t) statePath := testTempFile(t)
p := testProvider() 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( p.DiffFn = func(
*terraform.InstanceInfo, *terraform.InstanceInfo,
*terraform.InstanceState, *terraform.InstanceState,
@ -864,11 +863,11 @@ func TestApply_shutdown(t *testing.T) {
*terraform.InstanceState, *terraform.InstanceState,
*terraform.InstanceDiff) (*terraform.InstanceState, error) { *terraform.InstanceDiff) (*terraform.InstanceState, error) {
// only cancel once
if !cancelled { if !cancelled {
shutdownCh <- struct{}{} shutdownCh <- struct{}{}
<-cancelDone <-stopped
} }
return &terraform.InstanceState{ return &terraform.InstanceState{
ID: "foo", ID: "foo",
Attributes: map[string]string{ Attributes: map[string]string{
@ -898,10 +897,6 @@ func TestApply_shutdown(t *testing.T) {
if state == nil { if state == nil {
t.Fatal("state should not be 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) { func TestApply_state(t *testing.T) {

View File

@ -641,7 +641,3 @@ func isAutoVarFile(path string) bool {
return strings.HasSuffix(path, ".auto.tfvars") || return strings.HasSuffix(path, ".auto.tfvars") ||
strings.HasSuffix(path, ".auto.tfvars.json") strings.HasSuffix(path, ".auto.tfvars.json")
} }
// testShutdownHook is used by tests to verify that a command context has been
// canceled
var testShutdownHook func()

View File

@ -118,11 +118,6 @@ func (c *PlanCommand) Run(args []string) int {
// Cancel our context so we can start gracefully exiting // Cancel our context so we can start gracefully exiting
ctxCancel() ctxCancel()
// notify tests that the command context was canceled
if testShutdownHook != nil {
testShutdownHook()
}
// Notify the user // Notify the user
c.Ui.Output(outputInterrupt) c.Ui.Output(outputInterrupt)

View File

@ -833,14 +833,7 @@ func TestPlan_detailedExitcode_emptyDiff(t *testing.T) {
func TestPlan_shutdown(t *testing.T) { func TestPlan_shutdown(t *testing.T) {
cancelled := false cancelled := false
cancelDone := make(chan struct{}) stopped := make(chan struct{})
testShutdownHook = func() {
cancelled = true
close(cancelDone)
}
defer func() {
testShutdownHook = nil
}()
shutdownCh := make(chan struct{}) shutdownCh := make(chan struct{})
p := testProvider() 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( p.DiffFn = func(
*terraform.InstanceInfo, *terraform.InstanceInfo,
*terraform.InstanceState, *terraform.InstanceState,
@ -860,7 +859,7 @@ func TestPlan_shutdown(t *testing.T) {
if !cancelled { if !cancelled {
shutdownCh <- struct{}{} shutdownCh <- struct{}{}
<-cancelDone <-stopped
} }
return &terraform.InstanceDiff{ return &terraform.InstanceDiff{