mirror of https://github.com/pulumi/pulumi.git
90 lines
2.7 KiB
Go
90 lines
2.7 KiB
Go
// Copyright 2016-2020, 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 importer
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"io"
|
|
"testing"
|
|
|
|
"github.com/pulumi/pulumi/pkg/v3/codegen/pcl"
|
|
"github.com/pulumi/pulumi/pkg/v3/codegen/schema"
|
|
"github.com/pulumi/pulumi/pkg/v3/codegen/testing/utils"
|
|
"github.com/pulumi/pulumi/pkg/v3/resource/stack"
|
|
"github.com/pulumi/pulumi/sdk/v3/go/common/resource"
|
|
"github.com/pulumi/pulumi/sdk/v3/go/common/resource/config"
|
|
"github.com/pulumi/pulumi/sdk/v3/go/common/util/contract"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestGenerateLanguageDefinition(t *testing.T) {
|
|
t.Parallel()
|
|
loader := schema.NewPluginLoader(utils.NewHost(testdataPath))
|
|
|
|
cases, err := readTestCases("testdata/cases.json")
|
|
if !assert.NoError(t, err) {
|
|
t.Fatal()
|
|
}
|
|
|
|
//nolint:paralleltest // false positive because range var isn't used directly in t.Run(name) arg
|
|
for _, s := range cases.Resources {
|
|
s := s
|
|
t.Run(string(s.URN), func(t *testing.T) {
|
|
t.Parallel()
|
|
state, err := stack.DeserializeResource(s, config.NopDecrypter, config.NopEncrypter)
|
|
if !assert.NoError(t, err) {
|
|
t.Fatal()
|
|
}
|
|
|
|
var actualState *resource.State
|
|
err = GenerateLanguageDefinitions(io.Discard, loader, func(_ io.Writer, p *pcl.Program) error {
|
|
if !assert.Len(t, p.Nodes, 1) {
|
|
t.Fatal()
|
|
}
|
|
|
|
res, isResource := p.Nodes[0].(*pcl.Resource)
|
|
if !assert.True(t, isResource) {
|
|
t.Fatal()
|
|
}
|
|
|
|
actualState = renderResource(t, res)
|
|
return nil
|
|
}, []*resource.State{state}, names)
|
|
if !assert.NoError(t, err) {
|
|
t.Fatal()
|
|
}
|
|
|
|
assert.Equal(t, state.Type, actualState.Type)
|
|
assert.Equal(t, state.URN, actualState.URN)
|
|
assert.Equal(t, state.Parent, actualState.Parent)
|
|
assert.Equal(t, state.Provider, actualState.Provider)
|
|
assert.Equal(t, state.Protect, actualState.Protect)
|
|
if !assert.True(t, actualState.Inputs.DeepEquals(state.Inputs)) {
|
|
actual, err := stack.SerializeResource(context.Background(), actualState, config.NopEncrypter, false)
|
|
contract.IgnoreError(err)
|
|
|
|
sb, err := json.MarshalIndent(s, "", " ")
|
|
contract.IgnoreError(err)
|
|
|
|
ab, err := json.MarshalIndent(actual, "", " ")
|
|
contract.IgnoreError(err)
|
|
|
|
t.Logf("%v\n\n%v\n", string(sb), string(ab))
|
|
}
|
|
})
|
|
}
|
|
}
|