95 lines
3.1 KiB
Go
95 lines
3.1 KiB
Go
|
// Copyright 2016-2018, Pulumi Corporation. All rights reserved.
|
||
|
|
||
|
package ints
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"github.com/pulumi/pulumi/pkg/resource"
|
||
|
"github.com/pulumi/pulumi/pkg/testing/integration"
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
)
|
||
|
|
||
|
// Test that the engine tolerates two deletions of the same URN in the same plan.
|
||
|
func TestDoublePendingDelete(t *testing.T) {
|
||
|
integration.ProgramTest(t, &integration.ProgramTestOptions{
|
||
|
Dir: "step1",
|
||
|
Dependencies: []string{"@pulumi/pulumi"},
|
||
|
Quick: true,
|
||
|
EditDirs: []integration.EditDir{
|
||
|
{
|
||
|
Dir: "step2",
|
||
|
Additive: true,
|
||
|
ExpectFailure: true,
|
||
|
ExtraRuntimeValidation: func(t *testing.T, stackInfo integration.RuntimeValidationStackInfo) {
|
||
|
assert.NotNil(t, stackInfo.Deployment)
|
||
|
|
||
|
// Four resources in this deployment: the root resource, A, B, and A (pending delete)
|
||
|
assert.Equal(t, 4, len(stackInfo.Deployment.Resources))
|
||
|
stackRes := stackInfo.Deployment.Resources[0]
|
||
|
assert.Equal(t, resource.RootStackType, stackRes.URN.Type())
|
||
|
a := stackInfo.Deployment.Resources[1]
|
||
|
assert.Equal(t, "a", string(a.URN.Name()))
|
||
|
assert.False(t, a.Delete)
|
||
|
|
||
|
aCondemned := stackInfo.Deployment.Resources[2]
|
||
|
assert.Equal(t, "a", string(aCondemned.URN.Name()))
|
||
|
assert.True(t, aCondemned.Delete)
|
||
|
|
||
|
b := stackInfo.Deployment.Resources[3]
|
||
|
assert.Equal(t, "b", string(b.URN.Name()))
|
||
|
assert.False(t, b.Delete)
|
||
|
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
Dir: "step3",
|
||
|
Additive: true,
|
||
|
ExpectFailure: true,
|
||
|
ExtraRuntimeValidation: func(t *testing.T, stackInfo integration.RuntimeValidationStackInfo) {
|
||
|
// Now there are two pending deletes in the deployment.
|
||
|
assert.NotNil(t, stackInfo.Deployment)
|
||
|
|
||
|
assert.Equal(t, 5, len(stackInfo.Deployment.Resources))
|
||
|
stackRes := stackInfo.Deployment.Resources[0]
|
||
|
assert.Equal(t, resource.RootStackType, stackRes.URN.Type())
|
||
|
a := stackInfo.Deployment.Resources[1]
|
||
|
assert.Equal(t, "a", string(a.URN.Name()))
|
||
|
assert.False(t, a.Delete)
|
||
|
|
||
|
aCondemned := stackInfo.Deployment.Resources[2]
|
||
|
assert.Equal(t, "a", string(aCondemned.URN.Name()))
|
||
|
assert.True(t, aCondemned.Delete)
|
||
|
|
||
|
aSecondCondemned := stackInfo.Deployment.Resources[3]
|
||
|
assert.Equal(t, "a", string(aSecondCondemned.URN.Name()))
|
||
|
assert.True(t, aSecondCondemned.Delete)
|
||
|
|
||
|
b := stackInfo.Deployment.Resources[4]
|
||
|
assert.Equal(t, "b", string(b.URN.Name()))
|
||
|
assert.False(t, b.Delete)
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
Dir: "step4",
|
||
|
Additive: true,
|
||
|
ExtraRuntimeValidation: func(t *testing.T, stackInfo integration.RuntimeValidationStackInfo) {
|
||
|
// We should have cleared out all of the pending deletes now.
|
||
|
assert.NotNil(t, stackInfo.Deployment)
|
||
|
|
||
|
assert.Equal(t, 3, len(stackInfo.Deployment.Resources))
|
||
|
stackRes := stackInfo.Deployment.Resources[0]
|
||
|
assert.Equal(t, resource.RootStackType, stackRes.URN.Type())
|
||
|
a := stackInfo.Deployment.Resources[1]
|
||
|
assert.Equal(t, "a", string(a.URN.Name()))
|
||
|
assert.False(t, a.Delete)
|
||
|
|
||
|
b := stackInfo.Deployment.Resources[2]
|
||
|
assert.Equal(t, "b", string(b.URN.Name()))
|
||
|
assert.False(t, b.Delete)
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
})
|
||
|
}
|