mirror of https://github.com/pulumi/pulumi.git
111 lines
3.3 KiB
Go
111 lines
3.3 KiB
Go
// Copyright 2020-2024, Pulumi Corporation.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package engine
|
|
|
|
import (
|
|
"context"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/pulumi/pulumi/pkg/v3/resource/deploy"
|
|
"github.com/pulumi/pulumi/pkg/v3/util/cancel"
|
|
"github.com/pulumi/pulumi/sdk/v3/go/common/resource"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestAbbreviateFilePath(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tests := []struct {
|
|
path string
|
|
expected string
|
|
}{
|
|
{
|
|
path: "/Users/username/test-policy",
|
|
expected: "/Users/username/test-policy",
|
|
},
|
|
{
|
|
path: "./..//test-policy",
|
|
expected: "../test-policy",
|
|
},
|
|
{
|
|
path: `/Users/username/averylongpath/one/two/three/four/` +
|
|
`five/six/seven/eight/nine/ten/eleven/twelve/test-policy`,
|
|
expected: "/Users/.../twelve/test-policy",
|
|
},
|
|
{
|
|
path: `nonrootdir/username/averylongpath/one/two/three/four/` +
|
|
`five/six/seven/eight/nine/ten/eleven/twelve/test-policy`,
|
|
expected: "nonrootdir/username/.../twelve/test-policy",
|
|
},
|
|
{
|
|
path: `C:/Documents and Settings/username/My Documents/averylongpath/` +
|
|
`one/two/three/four/five/six/seven/eight/test-policy`,
|
|
expected: "C:/Documents and Settings/.../eight/test-policy",
|
|
},
|
|
{
|
|
path: `C:\Documents and Settings\username\My Documents\averylongpath\` +
|
|
`one\two\three\four\five\six\seven\eight\test-policy`,
|
|
expected: `C:\Documents and Settings\...\eight\test-policy`,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
actual := abbreviateFilePath(tt.path)
|
|
assert.Equal(t, filepath.ToSlash(tt.expected), filepath.ToSlash(actual))
|
|
}
|
|
}
|
|
|
|
func TestDeletingComponentResourceProducesResourceOutputsEvent(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
cancelCtx, _ := cancel.NewContext(context.Background())
|
|
|
|
acts := newUpdateActions(&Context{
|
|
Cancel: cancelCtx,
|
|
}, nil, &deploymentOptions{})
|
|
eventsChan := make(chan Event, 10)
|
|
acts.Opts.Events.ch = eventsChan
|
|
|
|
step := deploy.NewDeleteStep(&deploy.Deployment{}, map[resource.URN]bool{}, &resource.State{
|
|
URN: resource.URN("urn:pulumi:stack::project::my:example:Foo::foo"),
|
|
ID: "foo",
|
|
Custom: false,
|
|
Provider: "unimportant",
|
|
})
|
|
acts.Seen[resource.URN("urn:pulumi:stack::project::my:example:Foo::foo")] = step
|
|
|
|
err := acts.OnResourceStepPost(
|
|
&mockSnapshotMutation{}, step, resource.StatusOK,
|
|
nil, /* err */
|
|
)
|
|
require.NoError(t, err)
|
|
|
|
//nolint:exhaustive // the default case is for test failures
|
|
switch e := <-eventsChan; e.Type {
|
|
case ResourceOutputsEvent:
|
|
e, ok := e.Payload().(ResourceOutputsEventPayload)
|
|
assert.True(t, ok)
|
|
assert.True(t, e.Metadata.URN == "urn:pulumi:stack::project::my:example:Foo::foo")
|
|
default:
|
|
assert.Fail(t, "unexpected event type")
|
|
}
|
|
}
|
|
|
|
type mockSnapshotMutation struct{}
|
|
|
|
func (msm *mockSnapshotMutation) End(step deploy.Step, successful bool) error { return nil }
|