mirror of
https://github.com/opentffoundation/opentf.git
synced 2026-03-20 22:01:25 -04:00
183 lines
5.2 KiB
Go
183 lines
5.2 KiB
Go
// Copyright (c) The OpenTofu Authors
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
// Copyright (c) 2023 HashiCorp, Inc.
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
package views
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
"github.com/opentofu/opentofu/internal/command/arguments"
|
|
"github.com/opentofu/opentofu/internal/tfdiags"
|
|
)
|
|
|
|
func TestVersionViews(t *testing.T) {
|
|
tests := map[string]struct {
|
|
viewType arguments.ViewType
|
|
viewCall func(v Version)
|
|
wantStdout string
|
|
wantStderr string
|
|
}{
|
|
"human printVersion with fips disabled": {
|
|
viewType: arguments.ViewHuman,
|
|
viewCall: func(v Version) {
|
|
v.PrintVersion("0.1.0", "dev", "darwin_arm64", false, map[string]string{
|
|
"registry.opentofu.org/test/test": "0.2.0",
|
|
})
|
|
},
|
|
wantStdout: `OpenTofu v0.1.0-dev
|
|
on darwin_arm64
|
|
+ provider registry.opentofu.org/test/test v0.2.0
|
|
`,
|
|
wantStderr: "",
|
|
},
|
|
"human printVersion with fips enabled": {
|
|
viewType: arguments.ViewHuman,
|
|
viewCall: func(v Version) {
|
|
v.PrintVersion("0.1.0", "dev", "darwin_arm64", true, map[string]string{
|
|
"registry.opentofu.org/test/test": "0.2.0",
|
|
})
|
|
},
|
|
wantStdout: `OpenTofu v0.1.0-dev
|
|
on darwin_arm64
|
|
running in FIPS 140-3 mode (not yet supported)
|
|
+ provider registry.opentofu.org/test/test v0.2.0
|
|
`,
|
|
wantStderr: "",
|
|
},
|
|
"human printVersion with unversioned provider": {
|
|
viewType: arguments.ViewHuman,
|
|
viewCall: func(v Version) {
|
|
v.PrintVersion("0.1.0", "dev", "darwin_arm64", false, map[string]string{
|
|
"registry.opentofu.org/test/test": "0.0.0",
|
|
})
|
|
},
|
|
wantStdout: `OpenTofu v0.1.0-dev
|
|
on darwin_arm64
|
|
+ provider registry.opentofu.org/test/test (unversioned)
|
|
`,
|
|
wantStderr: "",
|
|
},
|
|
"json printVersion with fips disabled": {
|
|
viewType: arguments.ViewJSON,
|
|
viewCall: func(v Version) {
|
|
v.PrintVersion("0.1.0", "dev", "darwin_arm64", false, map[string]string{
|
|
"registry.opentofu.org/test/test": "0.2.0",
|
|
})
|
|
},
|
|
wantStdout: `{
|
|
"terraform_version": "0.1.0-dev",
|
|
"platform": "darwin_arm64",
|
|
"provider_selections": {
|
|
"registry.opentofu.org/test/test": "0.2.0"
|
|
}
|
|
}
|
|
`,
|
|
wantStderr: "",
|
|
},
|
|
"json printVersion with fips enabled": {
|
|
viewType: arguments.ViewJSON,
|
|
viewCall: func(v Version) {
|
|
v.PrintVersion("0.1.0", "dev", "darwin_arm64", true, map[string]string{
|
|
"registry.opentofu.org/test/test": "0.2.0",
|
|
})
|
|
},
|
|
wantStdout: `{
|
|
"terraform_version": "0.1.0-dev",
|
|
"platform": "darwin_arm64",
|
|
"fips140": true,
|
|
"provider_selections": {
|
|
"registry.opentofu.org/test/test": "0.2.0"
|
|
}
|
|
}
|
|
`,
|
|
wantStderr: "",
|
|
},
|
|
"json printVersion with unversioned provider": {
|
|
viewType: arguments.ViewJSON,
|
|
viewCall: func(v Version) {
|
|
v.PrintVersion("0.1.0", "dev", "darwin_arm64", false, map[string]string{
|
|
"registry.opentofu.org/test/test": "0.0.0",
|
|
})
|
|
},
|
|
wantStdout: `{
|
|
"terraform_version": "0.1.0-dev",
|
|
"platform": "darwin_arm64",
|
|
"provider_selections": {
|
|
"registry.opentofu.org/test/test": "0.0.0"
|
|
}
|
|
}
|
|
`,
|
|
wantStderr: "",
|
|
},
|
|
// Diagnostics
|
|
"warning": {
|
|
viewType: arguments.ViewHuman,
|
|
viewCall: func(v Version) {
|
|
diags := tfdiags.Diagnostics{
|
|
tfdiags.Sourceless(tfdiags.Warning, "A warning occurred", "foo bar"),
|
|
}
|
|
v.Diagnostics(diags)
|
|
},
|
|
wantStdout: withNewline("\nWarning: A warning occurred\n\nfoo bar"),
|
|
wantStderr: "",
|
|
},
|
|
"error": {
|
|
viewType: arguments.ViewHuman,
|
|
viewCall: func(v Version) {
|
|
diags := tfdiags.Diagnostics{
|
|
tfdiags.Sourceless(tfdiags.Error, "An error occurred", "foo bar"),
|
|
}
|
|
v.Diagnostics(diags)
|
|
},
|
|
wantStdout: "",
|
|
wantStderr: withNewline("\nError: An error occurred\n\nfoo bar"),
|
|
},
|
|
"multiple diagnostics": {
|
|
viewType: arguments.ViewHuman,
|
|
viewCall: func(v Version) {
|
|
diags := tfdiags.Diagnostics{
|
|
tfdiags.Sourceless(tfdiags.Warning, "A warning", "foo bar warning"),
|
|
tfdiags.Sourceless(tfdiags.Error, "An error", "foo bar error"),
|
|
}
|
|
v.Diagnostics(diags)
|
|
},
|
|
wantStdout: withNewline("\nWarning: A warning\n\nfoo bar warning"),
|
|
wantStderr: withNewline("\nError: An error\n\nfoo bar error"),
|
|
},
|
|
"multiple diagnostics in json": {
|
|
viewType: arguments.ViewJSON,
|
|
viewCall: func(v Version) {
|
|
diags := tfdiags.Diagnostics{
|
|
tfdiags.Sourceless(tfdiags.Warning, "A warning", "foo bar warning"),
|
|
tfdiags.Sourceless(tfdiags.Error, "An error", "foo bar error"),
|
|
}
|
|
v.Diagnostics(diags)
|
|
},
|
|
// The JSON view type does not apply to the diagnostics
|
|
wantStdout: withNewline("\nWarning: A warning\n\nfoo bar warning"),
|
|
wantStderr: withNewline("\nError: An error\n\nfoo bar error"),
|
|
},
|
|
}
|
|
for name, tc := range tests {
|
|
t.Run(name, func(t *testing.T) {
|
|
testVersionHuman(t, tc.viewType, tc.viewCall, tc.wantStdout, tc.wantStderr)
|
|
})
|
|
}
|
|
}
|
|
|
|
func testVersionHuman(t *testing.T, viewType arguments.ViewType, call func(v Version), wantStdout, wantStderr string) {
|
|
view, done := testView(t)
|
|
v := NewVersion(arguments.ViewOptions{ViewType: viewType}, view)
|
|
call(v)
|
|
output := done(t)
|
|
if diff := cmp.Diff(wantStderr, output.Stderr()); diff != "" {
|
|
t.Errorf("invalid stderr (-want, +got):\n%s", diff)
|
|
}
|
|
if diff := cmp.Diff(wantStdout, output.Stdout()); diff != "" {
|
|
t.Errorf("invalid stdout (-want, +got):\n%s", diff)
|
|
}
|
|
}
|