terraform/command/013_config_upgrade_test.go

201 lines
4.6 KiB
Go

package command
import (
"bytes"
"io/ioutil"
"os"
"strings"
"testing"
"github.com/hashicorp/terraform/helper/copy"
"github.com/mitchellh/cli"
)
func TestZeroThirteenUpgrade_success(t *testing.T) {
testCases := map[string]struct {
path string
args []string
out string
}{
"implicit": {
path: "013upgrade-implicit-providers",
out: "providers.tf",
},
"explicit": {
path: "013upgrade-explicit-providers",
out: "providers.tf",
},
"subdir": {
path: "013upgrade-subdir",
args: []string{"subdir"},
out: "subdir/providers.tf",
},
"fileExists": {
path: "013upgrade-file-exists",
out: "providers-1.tf",
},
}
for name, tc := range testCases {
t.Run(name, func(t *testing.T) {
td := tempDir(t)
copy.CopyDir(testFixturePath(tc.path), td)
defer os.RemoveAll(td)
defer testChdir(t, td)()
ui := new(cli.MockUi)
c := &ZeroThirteenUpgradeCommand{
Meta: Meta{
testingOverrides: metaOverridesForProvider(testProvider()),
Ui: ui,
},
}
if code := c.Run(tc.args); code != 0 {
t.Fatalf("bad: \n%s", ui.ErrorWriter.String())
}
output := ui.OutputWriter.String()
if !strings.Contains(output, "Upgrade complete") {
t.Fatal("unexpected output:", output)
}
actual, err := ioutil.ReadFile(tc.out)
if err != nil {
t.Fatalf("failed to read output %s: %s", tc.out, err)
}
expected, err := ioutil.ReadFile("expected/providers.tf")
if err != nil {
t.Fatal("failed to read expected/providers.tf", err)
}
if !bytes.Equal(actual, expected) {
t.Fatalf("actual output: \n%s\nexpected output: \n%s", string(actual), string(expected))
}
})
}
}
func TestZeroThirteenUpgrade_invalidFlags(t *testing.T) {
td := tempDir(t)
os.MkdirAll(td, 0755)
defer os.RemoveAll(td)
defer testChdir(t, td)()
ui := new(cli.MockUi)
c := &ZeroThirteenUpgradeCommand{
Meta: Meta{
testingOverrides: metaOverridesForProvider(testProvider()),
Ui: ui,
},
}
if code := c.Run([]string{"--whoops"}); code == 0 {
t.Fatal("expected error, got:", ui.OutputWriter)
}
errMsg := ui.ErrorWriter.String()
if !strings.Contains(errMsg, "Usage: terraform 0.13upgrade") {
t.Fatal("unexpected error:", errMsg)
}
}
func TestZeroThirteenUpgrade_tooManyArguments(t *testing.T) {
td := tempDir(t)
os.MkdirAll(td, 0755)
defer os.RemoveAll(td)
defer testChdir(t, td)()
ui := new(cli.MockUi)
c := &ZeroThirteenUpgradeCommand{
Meta: Meta{
testingOverrides: metaOverridesForProvider(testProvider()),
Ui: ui,
},
}
if code := c.Run([]string{".", "./modules/test"}); code == 0 {
t.Fatal("expected error, got:", ui.OutputWriter)
}
errMsg := ui.ErrorWriter.String()
if !strings.Contains(errMsg, "Error: Too many arguments") {
t.Fatal("unexpected error:", errMsg)
}
}
func TestZeroThirteenUpgrade_empty(t *testing.T) {
td := tempDir(t)
os.MkdirAll(td, 0755)
defer os.RemoveAll(td)
defer testChdir(t, td)()
ui := new(cli.MockUi)
c := &ZeroThirteenUpgradeCommand{
Meta: Meta{
testingOverrides: metaOverridesForProvider(testProvider()),
Ui: ui,
},
}
if code := c.Run(nil); code == 0 {
t.Fatal("expected error, got:", ui.OutputWriter)
}
errMsg := ui.ErrorWriter.String()
if !strings.Contains(errMsg, "Not a module directory") {
t.Fatal("unexpected error:", errMsg)
}
}
func TestZeroThirteenUpgrade_invalidProviderVersion(t *testing.T) {
td := tempDir(t)
copy.CopyDir(testFixturePath("013upgrade-invalid"), td)
defer os.RemoveAll(td)
defer testChdir(t, td)()
ui := new(cli.MockUi)
c := &ZeroThirteenUpgradeCommand{
Meta: Meta{
testingOverrides: metaOverridesForProvider(testProvider()),
Ui: ui,
},
}
if code := c.Run(nil); code == 0 {
t.Fatal("expected error, got:", ui.OutputWriter)
}
errMsg := ui.ErrorWriter.String()
if !strings.Contains(errMsg, "Invalid provider version constraint") {
t.Fatal("unexpected error:", errMsg)
}
}
func TestZeroThirteenUpgrade_noProviders(t *testing.T) {
td := tempDir(t)
copy.CopyDir(testFixturePath("013upgrade-no-providers"), td)
defer os.RemoveAll(td)
defer testChdir(t, td)()
ui := new(cli.MockUi)
c := &ZeroThirteenUpgradeCommand{
Meta: Meta{
testingOverrides: metaOverridesForProvider(testProvider()),
Ui: ui,
},
}
if code := c.Run(nil); code != 0 {
t.Fatalf("bad: \n%s", ui.ErrorWriter.String())
}
output := ui.OutputWriter.String()
if !strings.Contains(output, "No non-default providers found") {
t.Fatal("unexpected output:", output)
}
if _, err := os.Stat("providers.tf"); !os.IsNotExist(err) {
t.Fatal("unexpected providers.tf created")
}
}