opentofu/internal/command/e2etest/version_test.go
Martin Atkins ffe056bacb Move command/ to internal/command/
This is part of a general effort to move all of Terraform's non-library
package surface under internal in order to reinforce that these are for
internal use within Terraform only.

If you were previously importing packages under this prefix into an
external codebase, you could pin to an earlier release tag as an interim
solution until you've make a plan to achieve the same functionality some
other way.
2021-05-17 14:09:07 -07:00

97 lines
2.6 KiB
Go

package e2etest
import (
"fmt"
"path/filepath"
"strings"
"testing"
"github.com/hashicorp/terraform/internal/e2e"
"github.com/hashicorp/terraform/version"
)
func TestVersion(t *testing.T) {
// Along with testing the "version" command in particular, this serves
// as a good smoke test for whether the Terraform binary can even be
// compiled and run, since it doesn't require any external network access
// to do its job.
t.Parallel()
fixturePath := filepath.Join("testdata", "empty")
tf := e2e.NewBinary(terraformBin, fixturePath)
defer tf.Close()
stdout, stderr, err := tf.Run("version")
if err != nil {
t.Errorf("unexpected error: %s", err)
}
if stderr != "" {
t.Errorf("unexpected stderr output:\n%s", stderr)
}
wantVersion := fmt.Sprintf("Terraform v%s", version.String())
if !strings.Contains(stdout, wantVersion) {
t.Errorf("output does not contain our current version %q:\n%s", wantVersion, stdout)
}
}
func TestVersionWithProvider(t *testing.T) {
// This is a more elaborate use of "version" that shows the selected
// versions of plugins too.
t.Parallel()
// This test reaches out to releases.hashicorp.com to download the
// template and null providers, so it can only run if network access is
// allowed.
skipIfCannotAccessNetwork(t)
fixturePath := filepath.Join("testdata", "template-provider")
tf := e2e.NewBinary(terraformBin, fixturePath)
defer tf.Close()
// Initial run (before "init") should work without error but will not
// include the provider version, since we've not "locked" one yet.
{
stdout, stderr, err := tf.Run("version")
if err != nil {
t.Errorf("unexpected error: %s", err)
}
if stderr != "" {
t.Errorf("unexpected stderr output:\n%s", stderr)
}
wantVersion := fmt.Sprintf("Terraform v%s", version.String())
if !strings.Contains(stdout, wantVersion) {
t.Errorf("output does not contain our current version %q:\n%s", wantVersion, stdout)
}
}
{
_, _, err := tf.Run("init")
if err != nil {
t.Errorf("unexpected error: %s", err)
}
}
// After running init, we additionally include information about the
// selected version of the "template" provider.
{
stdout, stderr, err := tf.Run("version")
if err != nil {
t.Errorf("unexpected error: %s", err)
}
if stderr != "" {
t.Errorf("unexpected stderr output:\n%s", stderr)
}
wantMsg := "+ provider registry.terraform.io/hashicorp/template v" // we don't know which version we'll get here
if !strings.Contains(stdout, wantMsg) {
t.Errorf("output does not contain provider information %q:\n%s", wantMsg, stdout)
}
}
}