command/e2etest: test that we can install provider plugins

We already have good tests for the business logic around provider
installation, but the existing tests all stub out the main repository
server. This test completes that coverage by verifying that the installer
is able to run against the real repository and install an official release
of the template provider.
This commit is contained in:
Martin Atkins 2017-07-07 18:49:41 -07:00
parent 0e0b0d125a
commit 52df81ee49
2 changed files with 50 additions and 0 deletions

View File

@ -0,0 +1,43 @@
package e2etest
import (
"strings"
"testing"
)
func TestInitProviders(t *testing.T) {
t.Parallel()
// This test reaches out to releases.hashicorp.com to download the
// template provider, so it can only run if network access is allowed.
// We intentionally don't try to stub this here, because there's already
// a stubbed version of this in the "command" package and so the goal here
// is to test the interaction with the real repository.
skipIfCannotAccessNetwork(t)
tf := newTerraform("template-provider")
defer tf.Close()
stdout, stderr, err := tf.Run("init")
if err != nil {
t.Errorf("unexpected error: %s", err)
}
if stderr != "" {
t.Errorf("unexpected stderr output:\n%s", stderr)
}
if !strings.Contains(stdout, "Terraform has been successfully initialized!") {
t.Errorf("success message is missing from output:\n%s", stdout)
}
if !strings.Contains(stdout, "- Downloading plugin for provider \"template\"") {
t.Errorf("provider download message is missing from output:\n%s", stdout)
t.Logf("(this can happen if you have a copy of the plugin in one of the global plugin search dirs)")
}
if !strings.Contains(stdout, "* provider.template: version = ") {
t.Errorf("provider pinning recommendation is missing from output:\n%s", stdout)
}
}

View File

@ -0,0 +1,7 @@
provider "template" {
}
data "template_file" "test" {
template = "Hello World"
}