| package command |
| |
| import ( |
| "bytes" |
| "io/ioutil" |
| "strings" |
| "testing" |
| |
| "github.com/mitchellh/cli" |
| ) |
| |
| func TestStatePull(t *testing.T) { |
| // Create a temporary working directory that is empty |
| td := t.TempDir() |
| testCopyDir(t, testFixturePath("state-pull-backend"), td) |
| defer testChdir(t, td)() |
| |
| expected, err := ioutil.ReadFile("local-state.tfstate") |
| if err != nil { |
| t.Fatalf("error reading state: %v", err) |
| } |
| |
| p := testProvider() |
| ui := new(cli.MockUi) |
| c := &StatePullCommand{ |
| Meta: Meta{ |
| testingOverrides: metaOverridesForProvider(p), |
| Ui: ui, |
| }, |
| } |
| |
| args := []string{} |
| if code := c.Run(args); code != 0 { |
| t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String()) |
| } |
| |
| actual := ui.OutputWriter.Bytes() |
| if bytes.Equal(actual, expected) { |
| t.Fatalf("expected:\n%s\n\nto include: %q", actual, expected) |
| } |
| } |
| |
| func TestStatePull_noState(t *testing.T) { |
| testCwd(t) |
| |
| p := testProvider() |
| ui := cli.NewMockUi() |
| c := &StatePullCommand{ |
| Meta: Meta{ |
| testingOverrides: metaOverridesForProvider(p), |
| Ui: ui, |
| }, |
| } |
| |
| args := []string{} |
| if code := c.Run(args); code != 0 { |
| t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String()) |
| } |
| |
| actual := ui.OutputWriter.String() |
| if actual != "" { |
| t.Fatalf("bad: %s", actual) |
| } |
| } |
| |
| func TestStatePull_checkRequiredVersion(t *testing.T) { |
| // Create a temporary working directory that is empty |
| td := t.TempDir() |
| testCopyDir(t, testFixturePath("command-check-required-version"), td) |
| defer testChdir(t, td)() |
| |
| p := testProvider() |
| ui := cli.NewMockUi() |
| c := &StatePullCommand{ |
| Meta: Meta{ |
| testingOverrides: metaOverridesForProvider(p), |
| Ui: ui, |
| }, |
| } |
| |
| args := []string{} |
| if code := c.Run(args); code != 1 { |
| t.Fatalf("got exit status %d; want 1\nstderr:\n%s\n\nstdout:\n%s", code, ui.ErrorWriter.String(), ui.OutputWriter.String()) |
| } |
| |
| // Required version diags are correct |
| errStr := ui.ErrorWriter.String() |
| if !strings.Contains(errStr, `required_version = "~> 0.9.0"`) { |
| t.Fatalf("output should point to unmet version constraint, but is:\n\n%s", errStr) |
| } |
| if strings.Contains(errStr, `required_version = ">= 0.13.0"`) { |
| t.Fatalf("output should not point to met version constraint, but is:\n\n%s", errStr) |
| } |
| } |