github.com/myhau/pulumi/pkg/v3@v3.70.2-0.20221116134521-f2775972e587/resource/deploy/deployment_test.go (about)

     1  package deploy
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/pulumi/pulumi/pkg/v3/secrets/b64"
     8  	"github.com/pulumi/pulumi/pkg/v3/version"
     9  	"github.com/pulumi/pulumi/sdk/v3/go/common/resource"
    10  	"github.com/pulumi/pulumi/sdk/v3/go/common/resource/plugin"
    11  	"github.com/pulumi/pulumi/sdk/v3/go/common/tokens"
    12  	"github.com/stretchr/testify/assert"
    13  )
    14  
    15  func newResource(name string) *resource.State {
    16  	ty := tokens.Type("test")
    17  	return &resource.State{
    18  		Type:    ty,
    19  		URN:     resource.NewURN(tokens.QName("teststack"), tokens.PackageName("pkg"), ty, ty, tokens.QName(name)),
    20  		Inputs:  make(resource.PropertyMap),
    21  		Outputs: make(resource.PropertyMap),
    22  	}
    23  }
    24  
    25  func newSnapshot(resources []*resource.State, ops []resource.Operation) *Snapshot {
    26  	return NewSnapshot(Manifest{
    27  		Time:    time.Now(),
    28  		Version: version.Version,
    29  		Plugins: nil,
    30  	}, b64.NewBase64SecretsManager(), resources, ops)
    31  }
    32  
    33  func TestPendingOperationsDeployment(t *testing.T) {
    34  	t.Parallel()
    35  
    36  	resourceA := newResource("a")
    37  	resourceB := newResource("b")
    38  	snap := newSnapshot([]*resource.State{
    39  		resourceA,
    40  	}, []resource.Operation{
    41  		{
    42  			Type:     resource.OperationTypeCreating,
    43  			Resource: resourceB,
    44  		},
    45  	})
    46  
    47  	_, err := NewDeployment(&plugin.Context{}, &Target{}, snap, nil, NewNullSource("test"), nil, false, nil)
    48  	assert.NoError(t, err)
    49  }
    50  
    51  func TestGlobUrn(t *testing.T) {
    52  	t.Parallel()
    53  
    54  	globs := []struct {
    55  		input      string
    56  		expected   []resource.URN
    57  		unexpected []resource.URN
    58  	}{
    59  		{
    60  			input: "**",
    61  			expected: []resource.URN{
    62  				"urn:pulumi:stack::test::typ$aws:resource::aname",
    63  				"urn:pulumi:stack::test::typ$aws:resource::bar",
    64  				"urn:pulumi:stack::test::typ$azure:resource::bar",
    65  			},
    66  		},
    67  		{
    68  			input: "urn:pulumi:stack::test::typ*:resource::bar",
    69  			expected: []resource.URN{
    70  				"urn:pulumi:stack::test::typ$aws:resource::bar",
    71  				"urn:pulumi:stack::test::typ$azure:resource::bar",
    72  			},
    73  			unexpected: []resource.URN{
    74  				"urn:pulumi:stack::test::ty:resource::bar",
    75  				"urn:pulumi:stack::test::type:resource::foobar",
    76  			},
    77  		},
    78  		{
    79  			input:      "**:aname",
    80  			expected:   []resource.URN{"urn:pulumi:stack::test::typ$aws:resource::aname"},
    81  			unexpected: []resource.URN{"urn:pulumi:stack::test::typ$aws:resource::somename"},
    82  		},
    83  		{
    84  			input: "*:*:stack::test::typ$aws:resource::*",
    85  			expected: []resource.URN{
    86  				"urn:pulumi:stack::test::typ$aws:resource::aname",
    87  				"urn:pulumi:stack::test::typ$aws:resource::bar",
    88  			},
    89  			unexpected: []resource.URN{
    90  				"urn:pulumi:stack::test::typ$azure:resource::aname",
    91  			},
    92  		},
    93  		{
    94  			input:    "stack::test::typ$aws:resource::none",
    95  			expected: []resource.URN{"stack::test::typ$aws:resource::none"},
    96  			unexpected: []resource.URN{
    97  				"stack::test::typ$aws:resource::nonee",
    98  			},
    99  		},
   100  	}
   101  	for _, tt := range globs {
   102  		tt := tt
   103  		t.Run(tt.input, func(t *testing.T) {
   104  			t.Parallel()
   105  
   106  			targets := NewUrnTargets([]string{tt.input})
   107  			for _, urn := range tt.expected {
   108  				assert.True(t, targets.Contains(urn))
   109  			}
   110  		})
   111  	}
   112  }