mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-30 10:47:14 -06:00
110 lines
2.8 KiB
Go
110 lines
2.8 KiB
Go
|
package terraform
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/hashicorp/terraform/addrs"
|
||
|
"github.com/hashicorp/terraform/configs"
|
||
|
)
|
||
|
|
||
|
func TestNodeAbstractResourceProvider(t *testing.T) {
|
||
|
tests := []struct {
|
||
|
Addr addrs.ConfigResource
|
||
|
Config *configs.Resource
|
||
|
Want addrs.Provider
|
||
|
}{
|
||
|
{
|
||
|
Addr: addrs.Resource{
|
||
|
Mode: addrs.ManagedResourceMode,
|
||
|
Type: "null_resource",
|
||
|
Name: "baz",
|
||
|
}.InModule(addrs.RootModule),
|
||
|
Want: addrs.Provider{
|
||
|
Hostname: addrs.DefaultRegistryHost,
|
||
|
Namespace: "hashicorp",
|
||
|
Type: "null",
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
Addr: addrs.Resource{
|
||
|
Mode: addrs.DataResourceMode,
|
||
|
Type: "terraform_remote_state",
|
||
|
Name: "baz",
|
||
|
}.InModule(addrs.RootModule),
|
||
|
Want: addrs.Provider{
|
||
|
// As a special case, the type prefix "terraform_" maps to
|
||
|
// the builtin provider, not the default one.
|
||
|
Hostname: addrs.BuiltInProviderHost,
|
||
|
Namespace: addrs.BuiltInProviderNamespace,
|
||
|
Type: "terraform",
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
Addr: addrs.Resource{
|
||
|
Mode: addrs.ManagedResourceMode,
|
||
|
Type: "null_resource",
|
||
|
Name: "baz",
|
||
|
}.InModule(addrs.RootModule),
|
||
|
Config: &configs.Resource{
|
||
|
// Just enough configs.Resource for the Provider method. Not
|
||
|
// actually valid for general use.
|
||
|
Provider: addrs.Provider{
|
||
|
Hostname: addrs.DefaultRegistryHost,
|
||
|
Namespace: "awesomecorp",
|
||
|
Type: "happycloud",
|
||
|
},
|
||
|
},
|
||
|
// The config overrides the default behavior.
|
||
|
Want: addrs.Provider{
|
||
|
Hostname: addrs.DefaultRegistryHost,
|
||
|
Namespace: "awesomecorp",
|
||
|
Type: "happycloud",
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
Addr: addrs.Resource{
|
||
|
Mode: addrs.DataResourceMode,
|
||
|
Type: "terraform_remote_state",
|
||
|
Name: "baz",
|
||
|
}.InModule(addrs.RootModule),
|
||
|
Config: &configs.Resource{
|
||
|
// Just enough configs.Resource for the Provider method. Not
|
||
|
// actually valid for general use.
|
||
|
Provider: addrs.Provider{
|
||
|
Hostname: addrs.DefaultRegistryHost,
|
||
|
Namespace: "awesomecorp",
|
||
|
Type: "happycloud",
|
||
|
},
|
||
|
},
|
||
|
// The config overrides the default behavior.
|
||
|
Want: addrs.Provider{
|
||
|
Hostname: addrs.DefaultRegistryHost,
|
||
|
Namespace: "awesomecorp",
|
||
|
Type: "happycloud",
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
for _, test := range tests {
|
||
|
var name string
|
||
|
if test.Config != nil {
|
||
|
name = fmt.Sprintf("%s with configured %s", test.Addr, test.Config.Provider)
|
||
|
} else {
|
||
|
name = fmt.Sprintf("%s with no configuration", test.Addr)
|
||
|
}
|
||
|
t.Run(name, func(t *testing.T) {
|
||
|
node := &NodeAbstractResource{
|
||
|
// Just enough NodeAbstractResource for the Provider function.
|
||
|
// (This would not be valid for some other functions.)
|
||
|
Addr: test.Addr,
|
||
|
Config: test.Config,
|
||
|
}
|
||
|
got := node.Provider()
|
||
|
if got != test.Want {
|
||
|
t.Errorf("wrong result\naddr: %s\nconfig: %#v\ngot: %s\nwant: %s", test.Addr, test.Config, got, test.Want)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|