mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-30 10:47:14 -06:00
ffe056bacb
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.
97 lines
2.6 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|