2014-05-26 02:39:44 +02:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2017-02-14 02:52:51 +01:00
|
|
|
"os"
|
2014-05-26 02:39:44 +02:00
|
|
|
"path/filepath"
|
|
|
|
"reflect"
|
|
|
|
"testing"
|
2017-10-20 02:40:20 +02:00
|
|
|
|
|
|
|
"github.com/davecgh/go-spew/spew"
|
2014-05-26 02:39:44 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
// This is the directory where our test fixtures are.
|
|
|
|
const fixtureDir = "./test-fixtures"
|
|
|
|
|
|
|
|
func TestLoadConfig(t *testing.T) {
|
|
|
|
c, err := LoadConfig(filepath.Join(fixtureDir, "config"))
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
expected := &Config{
|
|
|
|
Providers: map[string]string{
|
|
|
|
"aws": "foo",
|
|
|
|
"do": "bar",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
if !reflect.DeepEqual(c, expected) {
|
|
|
|
t.Fatalf("bad: %#v", c)
|
|
|
|
}
|
|
|
|
}
|
2014-06-10 06:57:37 +02:00
|
|
|
|
2017-02-14 02:52:51 +01:00
|
|
|
func TestLoadConfig_env(t *testing.T) {
|
|
|
|
defer os.Unsetenv("TFTEST")
|
|
|
|
os.Setenv("TFTEST", "hello")
|
|
|
|
|
|
|
|
c, err := LoadConfig(filepath.Join(fixtureDir, "config-env"))
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
expected := &Config{
|
|
|
|
Providers: map[string]string{
|
|
|
|
"aws": "hello",
|
|
|
|
"google": "bar",
|
|
|
|
},
|
|
|
|
Provisioners: map[string]string{
|
|
|
|
"local": "hello",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
if !reflect.DeepEqual(c, expected) {
|
|
|
|
t.Fatalf("bad: %#v", c)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-10-20 02:40:20 +02:00
|
|
|
func TestLoadConfig_credentials(t *testing.T) {
|
|
|
|
got, err := LoadConfig(filepath.Join(fixtureDir, "credentials"))
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
want := &Config{
|
|
|
|
Credentials: map[string]map[string]interface{}{
|
|
|
|
"example.com": map[string]interface{}{
|
|
|
|
"token": "foo the bar baz",
|
|
|
|
},
|
|
|
|
"example.net": map[string]interface{}{
|
|
|
|
"username": "foo",
|
|
|
|
"password": "baz",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
CredentialsHelpers: map[string]*ConfigCredentialsHelper{
|
|
|
|
"foo": &ConfigCredentialsHelper{
|
|
|
|
Args: []string{"bar", "baz"},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
if !reflect.DeepEqual(got, want) {
|
|
|
|
t.Errorf("wrong result\ngot: %swant: %s", spew.Sdump(got), spew.Sdump(want))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-06-10 06:57:37 +02:00
|
|
|
func TestConfig_Merge(t *testing.T) {
|
|
|
|
c1 := &Config{
|
|
|
|
Providers: map[string]string{
|
|
|
|
"foo": "bar",
|
|
|
|
"bar": "blah",
|
|
|
|
},
|
2014-07-10 00:01:47 +02:00
|
|
|
Provisioners: map[string]string{
|
|
|
|
"local": "local",
|
|
|
|
"remote": "bad",
|
|
|
|
},
|
2017-10-20 01:41:03 +02:00
|
|
|
Credentials: map[string]map[string]interface{}{
|
|
|
|
"foo": {
|
|
|
|
"bar": "baz",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
CredentialsHelpers: map[string]*ConfigCredentialsHelper{
|
|
|
|
"buz": {},
|
|
|
|
},
|
2014-06-10 06:57:37 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
c2 := &Config{
|
|
|
|
Providers: map[string]string{
|
|
|
|
"bar": "baz",
|
|
|
|
"baz": "what",
|
|
|
|
},
|
2014-07-10 00:01:47 +02:00
|
|
|
Provisioners: map[string]string{
|
|
|
|
"remote": "remote",
|
|
|
|
},
|
2017-10-20 01:41:03 +02:00
|
|
|
Credentials: map[string]map[string]interface{}{
|
|
|
|
"fee": {
|
|
|
|
"bur": "bez",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
CredentialsHelpers: map[string]*ConfigCredentialsHelper{
|
|
|
|
"biz": {},
|
|
|
|
},
|
2014-06-10 06:57:37 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
expected := &Config{
|
|
|
|
Providers: map[string]string{
|
|
|
|
"foo": "bar",
|
|
|
|
"bar": "baz",
|
|
|
|
"baz": "what",
|
|
|
|
},
|
2014-07-10 00:01:47 +02:00
|
|
|
Provisioners: map[string]string{
|
|
|
|
"local": "local",
|
|
|
|
"remote": "remote",
|
|
|
|
},
|
2017-10-20 01:41:03 +02:00
|
|
|
Credentials: map[string]map[string]interface{}{
|
|
|
|
"foo": {
|
|
|
|
"bar": "baz",
|
|
|
|
},
|
|
|
|
"fee": {
|
|
|
|
"bur": "bez",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
CredentialsHelpers: map[string]*ConfigCredentialsHelper{
|
|
|
|
"buz": {},
|
|
|
|
"biz": {},
|
|
|
|
},
|
2014-06-10 06:57:37 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
actual := c1.Merge(c2)
|
|
|
|
if !reflect.DeepEqual(actual, expected) {
|
|
|
|
t.Fatalf("bad: %#v", actual)
|
|
|
|
}
|
|
|
|
}
|
2016-11-23 18:34:05 +01:00
|
|
|
|
|
|
|
func TestConfig_Merge_disableCheckpoint(t *testing.T) {
|
|
|
|
c1 := &Config{
|
|
|
|
DisableCheckpoint: true,
|
|
|
|
}
|
|
|
|
|
|
|
|
c2 := &Config{}
|
|
|
|
|
|
|
|
expected := &Config{
|
|
|
|
Providers: map[string]string{},
|
|
|
|
Provisioners: map[string]string{},
|
|
|
|
DisableCheckpoint: true,
|
|
|
|
}
|
|
|
|
|
|
|
|
actual := c1.Merge(c2)
|
|
|
|
if !reflect.DeepEqual(actual, expected) {
|
|
|
|
t.Fatalf("bad: %#v", actual)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestConfig_Merge_disableCheckpointSignature(t *testing.T) {
|
|
|
|
c1 := &Config{
|
|
|
|
DisableCheckpointSignature: true,
|
|
|
|
}
|
|
|
|
|
|
|
|
c2 := &Config{}
|
|
|
|
|
|
|
|
expected := &Config{
|
|
|
|
Providers: map[string]string{},
|
|
|
|
Provisioners: map[string]string{},
|
|
|
|
DisableCheckpointSignature: true,
|
|
|
|
}
|
|
|
|
|
|
|
|
actual := c1.Merge(c2)
|
|
|
|
if !reflect.DeepEqual(actual, expected) {
|
|
|
|
t.Fatalf("bad: %#v", actual)
|
|
|
|
}
|
|
|
|
}
|