command: fix panic on show when state file is invalid or unavailable (#31444)

This commit is contained in:
kmoe 2022-07-15 17:31:56 +01:00 committed by GitHub
parent d64e6dfa09
commit 7b4a5513a9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 30 additions and 1 deletions

View File

@ -151,7 +151,7 @@ func (c *ShowCommand) showFromLatestStateSnapshot() (*statefile.File, tfdiags.Di
// Get the latest state snapshot from the backend for the current workspace
stateFile, stateErr := getStateFromBackend(b, workspace)
if stateErr != nil {
diags = diags.Append(stateErr.Error())
diags = diags.Append(stateErr)
return nil, diags
}

View File

@ -905,6 +905,34 @@ func TestShow_planWithNonDefaultStateLineage(t *testing.T) {
}
}
func TestShow_corruptStatefile(t *testing.T) {
td := t.TempDir()
inputDir := "testdata/show-corrupt-statefile"
testCopyDir(t, inputDir, td)
defer testChdir(t, td)()
view, done := testView(t)
c := &ShowCommand{
Meta: Meta{
testingOverrides: metaOverridesForProvider(testProvider()),
View: view,
},
}
code := c.Run([]string{})
output := done(t)
if code != 1 {
t.Fatalf("unexpected exit status %d; want 1\ngot: %s", code, output.Stdout())
}
got := output.Stderr()
want := `Unsupported state file format`
if !strings.Contains(got, want) {
t.Errorf("unexpected output\ngot: %s\nwant:\n%s", got, want)
}
}
// showFixtureSchema returns a schema suitable for processing the configuration
// in testdata/show. This schema should be assigned to a mock provider
// named "test".

View File

@ -0,0 +1 @@
invalid