2018-05-22 21:43:36 +02:00
|
|
|
// Copyright 2016-2018, 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.
|
2017-07-17 19:38:57 +02:00
|
|
|
|
|
|
|
package plugin
|
|
|
|
|
|
|
|
import (
|
2017-10-22 22:39:21 +02:00
|
|
|
"fmt"
|
2017-07-17 19:38:57 +02:00
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
|
2017-09-22 04:18:21 +02:00
|
|
|
"github.com/pulumi/pulumi/pkg/resource"
|
2017-07-17 19:38:57 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestAssetSerialize(t *testing.T) {
|
|
|
|
// Ensure that asset and archive serialization round trips.
|
|
|
|
text := "a test asset"
|
2017-10-22 22:39:21 +02:00
|
|
|
asset, err := resource.NewTextAsset(text)
|
|
|
|
assert.Nil(t, err)
|
|
|
|
assert.Equal(t, text, asset.Text)
|
|
|
|
assert.Equal(t, "e34c74529110661faae4e121e57165ff4cb4dbdde1ef9770098aa3695e6b6704", asset.Hash)
|
2017-09-15 01:40:44 +02:00
|
|
|
assetProps, err := MarshalPropertyValue(resource.NewAssetProperty(asset), MarshalOptions{})
|
|
|
|
assert.Nil(t, err)
|
2017-10-22 22:39:21 +02:00
|
|
|
fmt.Printf("%v\n", assetProps)
|
2017-09-15 01:40:44 +02:00
|
|
|
assetValue, err := UnmarshalPropertyValue(assetProps, MarshalOptions{})
|
|
|
|
assert.Nil(t, err)
|
2017-07-17 19:38:57 +02:00
|
|
|
assert.True(t, assetValue.IsAsset())
|
|
|
|
assetDes := assetValue.AssetValue()
|
|
|
|
assert.True(t, assetDes.IsText())
|
|
|
|
assert.Equal(t, text, assetDes.Text)
|
2017-10-22 22:39:21 +02:00
|
|
|
assert.Equal(t, "e34c74529110661faae4e121e57165ff4cb4dbdde1ef9770098aa3695e6b6704", assetDes.Hash)
|
2017-07-17 19:38:57 +02:00
|
|
|
|
2017-10-22 22:39:21 +02:00
|
|
|
arch, err := resource.NewAssetArchive(map[string]interface{}{"foo": asset})
|
|
|
|
assert.Nil(t, err)
|
|
|
|
assert.Equal(t, "d8ce0142b3b10300c7c76487fad770f794c1e84e1b0c73a4b2e1503d4fbac093", arch.Hash)
|
2017-09-15 01:40:44 +02:00
|
|
|
archProps, err := MarshalPropertyValue(resource.NewArchiveProperty(arch), MarshalOptions{})
|
|
|
|
assert.Nil(t, err)
|
|
|
|
archValue, err := UnmarshalPropertyValue(archProps, MarshalOptions{})
|
|
|
|
assert.Nil(t, err)
|
2017-07-17 19:38:57 +02:00
|
|
|
assert.True(t, archValue.IsArchive())
|
|
|
|
archDes := archValue.ArchiveValue()
|
|
|
|
assert.True(t, archDes.IsAssets())
|
|
|
|
assert.Equal(t, 1, len(archDes.Assets))
|
2017-10-22 22:39:21 +02:00
|
|
|
assert.True(t, archDes.Assets["foo"].(*resource.Asset).IsText())
|
|
|
|
assert.Equal(t, text, archDes.Assets["foo"].(*resource.Asset).Text)
|
|
|
|
assert.Equal(t, "d8ce0142b3b10300c7c76487fad770f794c1e84e1b0c73a4b2e1503d4fbac093", archDes.Hash)
|
2017-07-17 19:38:57 +02:00
|
|
|
}
|
2017-07-31 20:38:31 +02:00
|
|
|
|
|
|
|
func TestComputedSerialize(t *testing.T) {
|
|
|
|
// Ensure that computed properties survive round trips.
|
2017-11-03 21:40:15 +01:00
|
|
|
opts := MarshalOptions{KeepUnknowns: true}
|
2017-07-31 20:38:31 +02:00
|
|
|
{
|
2017-09-15 01:40:44 +02:00
|
|
|
cprop, err := MarshalPropertyValue(
|
2017-07-31 20:38:31 +02:00
|
|
|
resource.NewComputedProperty(
|
|
|
|
resource.Computed{Element: resource.NewStringProperty("")}), opts)
|
2017-09-15 01:40:44 +02:00
|
|
|
assert.Nil(t, err)
|
|
|
|
cpropU, err := UnmarshalPropertyValue(cprop, opts)
|
|
|
|
assert.Nil(t, err)
|
2017-07-31 20:38:31 +02:00
|
|
|
assert.True(t, cpropU.IsComputed())
|
2018-02-05 23:44:23 +01:00
|
|
|
assert.True(t, cpropU.Input().Element.IsString())
|
2017-07-31 20:38:31 +02:00
|
|
|
}
|
|
|
|
{
|
2017-09-15 01:40:44 +02:00
|
|
|
cprop, err := MarshalPropertyValue(
|
2017-07-31 20:38:31 +02:00
|
|
|
resource.NewComputedProperty(
|
|
|
|
resource.Computed{Element: resource.NewNumberProperty(0)}), opts)
|
2017-09-15 01:40:44 +02:00
|
|
|
assert.Nil(t, err)
|
|
|
|
cpropU, err := UnmarshalPropertyValue(cprop, opts)
|
|
|
|
assert.Nil(t, err)
|
2017-07-31 20:38:31 +02:00
|
|
|
assert.True(t, cpropU.IsComputed())
|
2018-02-05 23:44:23 +01:00
|
|
|
assert.True(t, cpropU.Input().Element.IsNumber())
|
2017-07-31 20:38:31 +02:00
|
|
|
}
|
|
|
|
}
|
2017-11-03 21:40:15 +01:00
|
|
|
|
|
|
|
func TestComputedSkip(t *testing.T) {
|
|
|
|
// Ensure that computed properties are skipped when KeepUnknowns == false.
|
|
|
|
opts := MarshalOptions{KeepUnknowns: false}
|
|
|
|
{
|
|
|
|
cprop, err := MarshalPropertyValue(
|
|
|
|
resource.NewComputedProperty(
|
|
|
|
resource.Computed{Element: resource.NewStringProperty("")}), opts)
|
|
|
|
assert.Nil(t, err)
|
|
|
|
assert.Nil(t, cprop)
|
|
|
|
}
|
|
|
|
{
|
|
|
|
cprop, err := MarshalPropertyValue(
|
|
|
|
resource.NewComputedProperty(
|
|
|
|
resource.Computed{Element: resource.NewNumberProperty(0)}), opts)
|
|
|
|
assert.Nil(t, err)
|
|
|
|
assert.Nil(t, cprop)
|
|
|
|
}
|
|
|
|
}
|
2018-01-09 21:21:47 +01:00
|
|
|
|
|
|
|
func TestComputedReject(t *testing.T) {
|
|
|
|
// Ensure that computed properties produce errors when RejectUnknowns == true.
|
|
|
|
opts := MarshalOptions{RejectUnknowns: true}
|
|
|
|
{
|
|
|
|
cprop, err := MarshalPropertyValue(
|
|
|
|
resource.NewComputedProperty(
|
|
|
|
resource.Computed{Element: resource.NewStringProperty("")}), opts)
|
|
|
|
assert.NotNil(t, err)
|
|
|
|
assert.Nil(t, cprop)
|
|
|
|
}
|
|
|
|
{
|
|
|
|
cprop, err := MarshalPropertyValue(
|
|
|
|
resource.NewComputedProperty(
|
|
|
|
resource.Computed{Element: resource.NewStringProperty("")}), MarshalOptions{KeepUnknowns: true})
|
|
|
|
assert.Nil(t, err)
|
|
|
|
cpropU, err := UnmarshalPropertyValue(cprop, opts)
|
|
|
|
assert.NotNil(t, err)
|
|
|
|
assert.Nil(t, cpropU)
|
|
|
|
}
|
|
|
|
}
|