Add repro test case for bug #2892

This commit is contained in:
Radek Simko 2015-09-30 15:50:21 -07:00
parent c4a6a8f09a
commit 2b60d0c6b6
3 changed files with 95 additions and 0 deletions

View File

@ -10,6 +10,8 @@ import (
"sync/atomic" "sync/atomic"
"testing" "testing"
"time" "time"
"github.com/hashicorp/terraform/config/module"
) )
func TestContext2Apply(t *testing.T) { func TestContext2Apply(t *testing.T) {
@ -298,6 +300,88 @@ func TestContext2Apply_destroyComputed(t *testing.T) {
} }
} }
// https://github.com/hashicorp/terraform/issues/2892
func TestContext2Apply_destroyCrossProviders(t *testing.T) {
m := testModule(t, "apply-destroy-cross-providers")
p_aws := testProvider("aws")
p_aws.ApplyFn = testApplyFn
p_aws.DiffFn = testDiffFn
p_tf := testProvider("terraform")
p_tf.ApplyFn = testApplyFn
p_tf.DiffFn = testDiffFn
providers := map[string]ResourceProviderFactory{
"aws": testProviderFuncFixed(p_aws),
"terraform": testProviderFuncFixed(p_tf),
}
// Bug only appears from time to time,
// so we run this test multiple times
// to check for the race-condition
for i := 0; i <= 10; i++ {
ctx := getContextForApply_destroyCrossProviders(
t, m, providers)
if p, err := ctx.Plan(); err != nil {
t.Fatalf("err: %s", err)
} else {
t.Logf(p.String())
}
if _, err := ctx.Apply(); err != nil {
t.Fatalf("err: %s", err)
}
}
}
func getContextForApply_destroyCrossProviders(
t *testing.T,
m *module.Tree,
providers map[string]ResourceProviderFactory) *Context {
state := &State{
Modules: []*ModuleState{
&ModuleState{
Path: rootModulePath,
Resources: map[string]*ResourceState{
"terraform_remote_state.shared": &ResourceState{
Type: "terraform_remote_state",
Primary: &InstanceState{
ID: "remote-2652591293",
Attributes: map[string]string{
"output.env_name": "test",
},
},
},
},
},
&ModuleState{
Path: []string{"root", "example"},
Resources: map[string]*ResourceState{
"aws_vpc.bar": &ResourceState{
Type: "aws_vpc",
Primary: &InstanceState{
ID: "vpc-aaabbb12",
Attributes: map[string]string{
"value": "test",
},
},
},
},
},
},
}
ctx := testContext2(t, &ContextOpts{
Module: m,
Providers: providers,
State: state,
Destroy: true,
})
return ctx
}
func TestContext2Apply_minimal(t *testing.T) { func TestContext2Apply_minimal(t *testing.T) {
m := testModule(t, "apply-minimal") m := testModule(t, "apply-minimal")
p := testProvider("aws") p := testProvider("aws")

View File

@ -0,0 +1,5 @@
variable "value" {}
resource "aws_vpc" "bar" {
value = "${var.value}"
}

View File

@ -0,0 +1,6 @@
resource "terraform_remote_state" "shared" {}
module "child" {
source = "./child"
value = "${terraform_remote_state.shared.output.env_name}"
}