99 lines
2.8 KiB
Go
99 lines
2.8 KiB
Go
|
package globalref
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"path/filepath"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/hashicorp/terraform/internal/addrs"
|
||
|
"github.com/hashicorp/terraform/internal/configs/configload"
|
||
|
"github.com/hashicorp/terraform/internal/configs/configschema"
|
||
|
"github.com/hashicorp/terraform/internal/initwd"
|
||
|
"github.com/hashicorp/terraform/internal/providers"
|
||
|
"github.com/hashicorp/terraform/internal/registry"
|
||
|
"github.com/zclconf/go-cty/cty"
|
||
|
)
|
||
|
|
||
|
func testAnalyzer(t *testing.T, fixtureName string) *Analyzer {
|
||
|
configDir := filepath.Join("testdata", fixtureName)
|
||
|
|
||
|
loader, cleanup := configload.NewLoaderForTests(t)
|
||
|
defer cleanup()
|
||
|
|
||
|
inst := initwd.NewModuleInstaller(loader.ModulesDir(), registry.NewClient(nil, nil))
|
||
|
_, instDiags := inst.InstallModules(context.Background(), configDir, true, initwd.ModuleInstallHooksImpl{})
|
||
|
if instDiags.HasErrors() {
|
||
|
t.Fatalf("unexpected module installation errors: %s", instDiags.Err().Error())
|
||
|
}
|
||
|
if err := loader.RefreshModules(); err != nil {
|
||
|
t.Fatalf("failed to refresh modules after install: %s", err)
|
||
|
}
|
||
|
|
||
|
cfg, loadDiags := loader.LoadConfig(configDir)
|
||
|
if loadDiags.HasErrors() {
|
||
|
t.Fatalf("unexpected configuration errors: %s", loadDiags.Error())
|
||
|
}
|
||
|
|
||
|
resourceTypeSchema := &configschema.Block{
|
||
|
Attributes: map[string]*configschema.Attribute{
|
||
|
"string": {Type: cty.String, Optional: true},
|
||
|
"number": {Type: cty.Number, Optional: true},
|
||
|
"any": {Type: cty.DynamicPseudoType, Optional: true},
|
||
|
},
|
||
|
BlockTypes: map[string]*configschema.NestedBlock{
|
||
|
"single": {
|
||
|
Nesting: configschema.NestingSingle,
|
||
|
Block: configschema.Block{
|
||
|
Attributes: map[string]*configschema.Attribute{
|
||
|
"z": {Type: cty.String, Optional: true},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
"group": {
|
||
|
Nesting: configschema.NestingGroup,
|
||
|
Block: configschema.Block{
|
||
|
Attributes: map[string]*configschema.Attribute{
|
||
|
"z": {Type: cty.String, Optional: true},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
"list": {
|
||
|
Nesting: configschema.NestingList,
|
||
|
Block: configschema.Block{
|
||
|
Attributes: map[string]*configschema.Attribute{
|
||
|
"z": {Type: cty.String, Optional: true},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
"map": {
|
||
|
Nesting: configschema.NestingMap,
|
||
|
Block: configschema.Block{
|
||
|
Attributes: map[string]*configschema.Attribute{
|
||
|
"z": {Type: cty.String, Optional: true},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
"set": {
|
||
|
Nesting: configschema.NestingSet,
|
||
|
Block: configschema.Block{
|
||
|
Attributes: map[string]*configschema.Attribute{
|
||
|
"z": {Type: cty.String, Optional: true},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
schemas := map[addrs.Provider]*providers.Schemas{
|
||
|
addrs.MustParseProviderSourceString("hashicorp/test"): {
|
||
|
ResourceTypes: map[string]*configschema.Block{
|
||
|
"test_thing": resourceTypeSchema,
|
||
|
},
|
||
|
DataSources: map[string]*configschema.Block{
|
||
|
"test_thing": resourceTypeSchema,
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
return NewAnalyzer(cfg, schemas)
|
||
|
}
|