Fix hacky way to serve fake tf provider schema in tests
parent
b02f9e09a9
commit
bfc1f5618e
|
@ -179,6 +179,6 @@ Then, add a call to this function in the `remote/<provider>/init.go` file you cr
|
||||||
|
|
||||||
You also need to create a test schema for upcoming tests.
|
You also need to create a test schema for upcoming tests.
|
||||||
|
|
||||||
Please use `TestCreateNewSchema` located in `test/schemas/schemas_test.go` to generate a schema file that will be used for the mocked provider.
|
Please use `TestCreateNewSchema` located in `test/terraform/schemas_test.go` to generate a schema file that will be used for the mocked provider.
|
||||||
|
|
||||||
Everything is now ready, you should [start adding new resources](new-resource.md)!
|
Everything is now ready, you should [start adding new resources](new-resource.md)!
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package schemas
|
package schemas
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"embed"
|
||||||
gojson "encoding/json"
|
gojson "encoding/json"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
@ -11,7 +12,10 @@ import (
|
||||||
"github.com/hashicorp/terraform/providers"
|
"github.com/hashicorp/terraform/providers"
|
||||||
)
|
)
|
||||||
|
|
||||||
func writeTestSchema(schema map[string]providers.Schema, provider, version string) error {
|
//go:embed */*/schema.json
|
||||||
|
var fakeSchemaFS embed.FS
|
||||||
|
|
||||||
|
func WriteTestSchema(schema map[string]providers.Schema, provider, version string) error {
|
||||||
_, relativeFilePath, _, _ := runtime.Caller(0)
|
_, relativeFilePath, _, _ := runtime.Caller(0)
|
||||||
fileName := path.Join(path.Dir(relativeFilePath), provider, version, "schema.json")
|
fileName := path.Join(path.Dir(relativeFilePath), provider, version, "schema.json")
|
||||||
content, _ := gojson.Marshal(schema)
|
content, _ := gojson.Marshal(schema)
|
||||||
|
@ -27,8 +31,7 @@ func writeTestSchema(schema map[string]providers.Schema, provider, version strin
|
||||||
}
|
}
|
||||||
|
|
||||||
func ReadTestSchema(provider, version string) (map[string]providers.Schema, error) {
|
func ReadTestSchema(provider, version string) (map[string]providers.Schema, error) {
|
||||||
_, filename, _, _ := runtime.Caller(0)
|
content, err := fakeSchemaFS.ReadFile(path.Join(provider, version, "schema.json"))
|
||||||
content, err := ioutil.ReadFile(path.Join(path.Dir(filename), provider, version, "schema.json"))
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,9 +6,9 @@ import (
|
||||||
"sort"
|
"sort"
|
||||||
|
|
||||||
"github.com/cloudskiff/driftctl/pkg/terraform"
|
"github.com/cloudskiff/driftctl/pkg/terraform"
|
||||||
"github.com/cloudskiff/driftctl/test"
|
|
||||||
"github.com/cloudskiff/driftctl/test/goldenfile"
|
"github.com/cloudskiff/driftctl/test/goldenfile"
|
||||||
"github.com/cloudskiff/driftctl/test/mocks"
|
"github.com/cloudskiff/driftctl/test/mocks"
|
||||||
|
"github.com/cloudskiff/driftctl/test/schemas"
|
||||||
"github.com/hashicorp/terraform/providers"
|
"github.com/hashicorp/terraform/providers"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/zclconf/go-cty/cty"
|
"github.com/zclconf/go-cty/cty"
|
||||||
|
@ -51,14 +51,10 @@ func (p *FakeTerraformProvider) ReadResource(args terraform.ReadResourceArgs) (*
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *FakeTerraformProvider) readSchema() map[string]providers.Schema {
|
func (p *FakeTerraformProvider) readSchema() map[string]providers.Schema {
|
||||||
content, err := test.ReadTestFile(fmt.Sprintf("../schemas/%s/%s/schema.json", p.realProvider.Name(), p.realProvider.Version()))
|
schema, err := schemas.ReadTestSchema(p.realProvider.Name(), p.realProvider.Version())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
var schema map[string]providers.Schema
|
|
||||||
if err := gojson.Unmarshal(content, &schema); err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return schema
|
return schema
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,19 +1,19 @@
|
||||||
package schemas
|
package terraform
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/cloudskiff/driftctl/pkg/terraform"
|
"github.com/cloudskiff/driftctl/pkg/terraform"
|
||||||
terraformtest "github.com/cloudskiff/driftctl/test/terraform"
|
"github.com/cloudskiff/driftctl/test/schemas"
|
||||||
)
|
)
|
||||||
|
|
||||||
// You can use this test function to create a schema file for a given provider in a given version
|
// You can use this test function to create a schema file for a given provider in a given version
|
||||||
// You may want to update part of this code to change provider and version to generate desired schema
|
// You may want to update part of this code to change provider and version to generate desired schema
|
||||||
// To use this test you should run this command from the repository root
|
// To use this test you should run this command from the repository root
|
||||||
// DCTL_UPDATE_TEST_SCHEMA=true go test ./test/schemas
|
// DCTL_UPDATE_TEST_SCHEMA=true go test ./test/terraform
|
||||||
// You may need to setup proper environment variable to make the terraform provider work
|
// You may need to setup proper environment variable to make the terraform provider work
|
||||||
// DCTL_UPDATE_TEST_SCHEMA=true AWS_PROFILE=myprofile go test ./test/schemas
|
// DCTL_UPDATE_TEST_SCHEMA=true AWS_PROFILE=myprofile go test ./test/terraform
|
||||||
func TestCreateNewSchema(t *testing.T) {
|
func TestCreateNewSchema(t *testing.T) {
|
||||||
|
|
||||||
if os.Getenv("DCTL_UPDATE_TEST_SCHEMA") != "true" {
|
if os.Getenv("DCTL_UPDATE_TEST_SCHEMA") != "true" {
|
||||||
|
@ -23,13 +23,13 @@ func TestCreateNewSchema(t *testing.T) {
|
||||||
providerLibrary := terraform.NewProviderLibrary()
|
providerLibrary := terraform.NewProviderLibrary()
|
||||||
|
|
||||||
// Replace this with provider you want to create schema
|
// Replace this with provider you want to create schema
|
||||||
realProvider, _ := terraformtest.InitTestAwsProvider(providerLibrary, "3.19.0")
|
realProvider, _ := InitTestAwsProvider(providerLibrary, "3.19.0")
|
||||||
|
|
||||||
err := realProvider.Init()
|
err := realProvider.Init()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
err = writeTestSchema(realProvider.Schema(), realProvider.Name(), realProvider.Version())
|
err = schemas.WriteTestSchema(realProvider.Schema(), realProvider.Name(), realProvider.Version())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
Loading…
Reference in New Issue