mirror of
https://github.com/opentofu/opentofu.git
synced 2025-01-01 11:47:07 -06:00
d40085f374
They still aren't passing, but this is just enough updating to make the test program compile successfully after the refactoring related to provider installation. They are now using the mock provider source offered by the getproviders package, which is similar but not totally identical to the idea of mocking the entire installer as these tests used to do, and so many of them need further adjustment to still be testing what they intended to test under this new architecture. Subsequent commits will gradually repair the failing tests.
114 lines
2.8 KiB
Go
114 lines
2.8 KiB
Go
package command
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
"github.com/mitchellh/cli"
|
|
|
|
"github.com/hashicorp/terraform/helper/copy"
|
|
)
|
|
|
|
func TestProvidersSchema_error(t *testing.T) {
|
|
ui := new(cli.MockUi)
|
|
c := &ProvidersSchemaCommand{
|
|
Meta: Meta{
|
|
testingOverrides: metaOverridesForProvider(testProvider()),
|
|
Ui: ui,
|
|
},
|
|
}
|
|
|
|
if code := c.Run(nil); code != 1 {
|
|
fmt.Println(ui.OutputWriter.String())
|
|
t.Fatalf("expected error: \n%s", ui.OutputWriter.String())
|
|
}
|
|
}
|
|
|
|
func TestProvidersSchema_output(t *testing.T) {
|
|
// there's only one test at this time. This can be refactored to have
|
|
// multiple test cases in individual directories as needed.
|
|
fixtureDir := "testdata/providers-schema"
|
|
testDirs, err := ioutil.ReadDir(fixtureDir)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
for _, entry := range testDirs {
|
|
if !entry.IsDir() {
|
|
continue
|
|
}
|
|
t.Run(entry.Name(), func(t *testing.T) {
|
|
td := tempDir(t)
|
|
inputDir := filepath.Join(fixtureDir, entry.Name())
|
|
copy.CopyDir(inputDir, td)
|
|
defer os.RemoveAll(td)
|
|
defer testChdir(t, td)()
|
|
|
|
providerSource, close := newMockProviderSource(t, map[string][]string{
|
|
"test": []string{"1.2.3"},
|
|
})
|
|
defer close()
|
|
|
|
p := showFixtureProvider()
|
|
ui := new(cli.MockUi)
|
|
m := Meta{
|
|
testingOverrides: metaOverridesForProvider(p),
|
|
Ui: ui,
|
|
ProviderSource: providerSource,
|
|
}
|
|
|
|
// `terrafrom init`
|
|
ic := &InitCommand{
|
|
Meta: m,
|
|
}
|
|
if code := ic.Run([]string{}); code != 0 {
|
|
t.Fatalf("init failed\n%s", ui.ErrorWriter)
|
|
}
|
|
|
|
// flush the init output from the mock ui
|
|
ui.OutputWriter.Reset()
|
|
|
|
// `terraform provider schemas` command
|
|
pc := &ProvidersSchemaCommand{Meta: m}
|
|
if code := pc.Run([]string{"-json"}); code != 0 {
|
|
t.Fatalf("wrong exit status %d; want 0\nstderr: %s", code, ui.ErrorWriter.String())
|
|
}
|
|
var got, want providerSchemas
|
|
|
|
gotString := ui.OutputWriter.String()
|
|
json.Unmarshal([]byte(gotString), &got)
|
|
|
|
wantFile, err := os.Open("output.json")
|
|
if err != nil {
|
|
t.Fatalf("err: %s", err)
|
|
}
|
|
defer wantFile.Close()
|
|
byteValue, err := ioutil.ReadAll(wantFile)
|
|
if err != nil {
|
|
t.Fatalf("err: %s", err)
|
|
}
|
|
json.Unmarshal([]byte(byteValue), &want)
|
|
|
|
if !cmp.Equal(got, want) {
|
|
t.Fatalf("wrong result:\n %v\n", cmp.Diff(got, want))
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
type providerSchemas struct {
|
|
FormatVersion string `json:"format_version"`
|
|
Schemas map[string]providerSchema `json:"provider_schemas"`
|
|
}
|
|
|
|
type providerSchema struct {
|
|
Provider interface{} `json:"provider,omitempty"`
|
|
ResourceSchemas map[string]interface{} `json:"resource_schemas,omitempty"`
|
|
DataSourceSchemas map[string]interface{} `json:"data_source_schemas,omitempty"`
|
|
}
|