178 lines
4.3 KiB
Go
178 lines
4.3 KiB
Go
|
package jsonprovider
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/google/go-cmp/cmp"
|
||
|
"github.com/zclconf/go-cty/cty"
|
||
|
|
||
|
"github.com/hashicorp/terraform/configs/configschema"
|
||
|
"github.com/hashicorp/terraform/terraform"
|
||
|
)
|
||
|
|
||
|
func TestMarshalProvider(t *testing.T) {
|
||
|
tests := []struct {
|
||
|
Input *terraform.ProviderSchema
|
||
|
Want Provider
|
||
|
}{
|
||
|
{
|
||
|
nil,
|
||
|
Provider{},
|
||
|
},
|
||
|
{
|
||
|
testProvider(),
|
||
|
Provider{
|
||
|
Provider: &schema{
|
||
|
Block: &block{
|
||
|
Attributes: map[string]*attribute{
|
||
|
"region": {
|
||
|
AttributeType: json.RawMessage(`"string"`),
|
||
|
Required: true,
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
ResourceSchemas: map[string]*schema{
|
||
|
"test_instance": {
|
||
|
Version: 42,
|
||
|
Block: &block{
|
||
|
Attributes: map[string]*attribute{
|
||
|
"id": {
|
||
|
AttributeType: json.RawMessage(`"string"`),
|
||
|
Optional: true,
|
||
|
Computed: true,
|
||
|
},
|
||
|
"ami": {
|
||
|
AttributeType: json.RawMessage(`"string"`),
|
||
|
Optional: true,
|
||
|
},
|
||
|
},
|
||
|
BlockTypes: map[string]*blockType{
|
||
|
"network_interface": {
|
||
|
Block: &block{
|
||
|
Attributes: map[string]*attribute{
|
||
|
"device_index": {
|
||
|
AttributeType: json.RawMessage(`"string"`),
|
||
|
Optional: true,
|
||
|
},
|
||
|
"description": {
|
||
|
AttributeType: json.RawMessage(`"string"`),
|
||
|
Optional: true,
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
NestingMode: "list",
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
DataSourceSchemas: map[string]*schema{
|
||
|
"test_data_source": {
|
||
|
Version: 3,
|
||
|
Block: &block{
|
||
|
Attributes: map[string]*attribute{
|
||
|
"id": {
|
||
|
AttributeType: json.RawMessage(`"string"`),
|
||
|
Optional: true,
|
||
|
Computed: true,
|
||
|
},
|
||
|
"ami": {
|
||
|
AttributeType: json.RawMessage(`"string"`),
|
||
|
Optional: true,
|
||
|
},
|
||
|
},
|
||
|
BlockTypes: map[string]*blockType{
|
||
|
"network_interface": {
|
||
|
Block: &block{
|
||
|
Attributes: map[string]*attribute{
|
||
|
"device_index": {
|
||
|
AttributeType: json.RawMessage(`"string"`),
|
||
|
Optional: true,
|
||
|
},
|
||
|
"description": {
|
||
|
AttributeType: json.RawMessage(`"string"`),
|
||
|
Optional: true,
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
NestingMode: "list",
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
for _, test := range tests {
|
||
|
got := marshalProvider(test.Input)
|
||
|
if !cmp.Equal(got, test.Want) {
|
||
|
t.Fatalf("wrong result:\n %v\n", cmp.Diff(got, test.Want))
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func testProviders() *terraform.Schemas {
|
||
|
return &terraform.Schemas{
|
||
|
Providers: map[string]*terraform.ProviderSchema{
|
||
|
"test": testProvider(),
|
||
|
},
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func testProvider() *terraform.ProviderSchema {
|
||
|
return &terraform.ProviderSchema{
|
||
|
Provider: &configschema.Block{
|
||
|
Attributes: map[string]*configschema.Attribute{
|
||
|
"region": {Type: cty.String, Required: true},
|
||
|
},
|
||
|
},
|
||
|
ResourceTypes: map[string]*configschema.Block{
|
||
|
"test_instance": {
|
||
|
Attributes: map[string]*configschema.Attribute{
|
||
|
"id": {Type: cty.String, Optional: true, Computed: true},
|
||
|
"ami": {Type: cty.String, Optional: true},
|
||
|
},
|
||
|
BlockTypes: map[string]*configschema.NestedBlock{
|
||
|
"network_interface": {
|
||
|
Nesting: configschema.NestingList,
|
||
|
Block: configschema.Block{
|
||
|
Attributes: map[string]*configschema.Attribute{
|
||
|
"device_index": {Type: cty.String, Optional: true},
|
||
|
"description": {Type: cty.String, Optional: true},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
DataSources: map[string]*configschema.Block{
|
||
|
"test_data_source": {
|
||
|
Attributes: map[string]*configschema.Attribute{
|
||
|
"id": {Type: cty.String, Optional: true, Computed: true},
|
||
|
"ami": {Type: cty.String, Optional: true},
|
||
|
},
|
||
|
BlockTypes: map[string]*configschema.NestedBlock{
|
||
|
"network_interface": {
|
||
|
Nesting: configschema.NestingList,
|
||
|
Block: configschema.Block{
|
||
|
Attributes: map[string]*configschema.Attribute{
|
||
|
"device_index": {Type: cty.String, Optional: true},
|
||
|
"description": {Type: cty.String, Optional: true},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
|
||
|
ResourceTypeSchemaVersions: map[string]uint64{
|
||
|
"test_instance": 42,
|
||
|
"test_data_source": 3,
|
||
|
},
|
||
|
}
|
||
|
}
|