Have the consul provider use a local test server

We're providing a local test server for the consul backends, so we might
as well use it to make the provider acceptance tests more relible as
well.

TODO: the TLS test doesn't actualy test anything other than the Config.
The tests have been modified to make it apparent that they aren't
connecting to the server at all.
This commit is contained in:
James Bardin 2017-03-14 10:36:14 -04:00
parent 90055c6ae2
commit 9529bd3bf0
9 changed files with 45 additions and 21 deletions

View File

@ -10,7 +10,6 @@ import (
func TestAccDataConsulAgentSelf_basic(t *testing.T) {
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
Steps: []resource.TestStep{
resource.TestStep{
@ -25,7 +24,8 @@ func TestAccDataConsulAgentSelf_basic(t *testing.T) {
testAccCheckDataSourceValue("data.consul_agent_self.read", "advertise_addr", "<any>"),
testAccCheckDataSourceValue("data.consul_agent_self.read", "bind_addr", "<any>"),
testAccCheckDataSourceValue("data.consul_agent_self.read", "bootstrap_expect", "<all>"),
testAccCheckDataSourceValue("data.consul_agent_self.read", "bootstrap_mode", "false"),
// the local test server is bootstrapped
testAccCheckDataSourceValue("data.consul_agent_self.read", "bootstrap_mode", "true"),
testAccCheckDataSourceValue("data.consul_agent_self.read", "client_addr", "<any>"),
testAccCheckDataSourceValue("data.consul_agent_self.read", "datacenter", "<any>"),
testAccCheckDataSourceValue("data.consul_agent_self.read", "dev_mode", "<any>"),

View File

@ -8,7 +8,6 @@ import (
func TestAccDataConsulCatalogNodes_basic(t *testing.T) {
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
Steps: []resource.TestStep{
resource.TestStep{

View File

@ -8,7 +8,6 @@ import (
func TestAccDataConsulCatalogService_basic(t *testing.T) {
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
Steps: []resource.TestStep{
resource.TestStep{

View File

@ -8,7 +8,6 @@ import (
func TestAccDataConsulCatalogServices_basic(t *testing.T) {
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
Steps: []resource.TestStep{
resource.TestStep{

View File

@ -8,7 +8,6 @@ import (
func TestAccDataConsulKeys_basic(t *testing.T) {
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
Steps: []resource.TestStep{
resource.TestStep{

View File

@ -11,7 +11,6 @@ import (
func TestAccConsulKeyPrefix_basic(t *testing.T) {
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: resource.ComposeTestCheckFunc(
testAccCheckConsulKeyPrefixKeyAbsent("species"),

View File

@ -11,7 +11,6 @@ import (
func TestAccConsulKeys_basic(t *testing.T) {
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckConsulKeysDestroy,
Steps: []resource.TestStep{

View File

@ -11,7 +11,6 @@ import (
func TestAccConsulPreparedQuery_basic(t *testing.T) {
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckConsulPreparedQueryDestroy,
Steps: []resource.TestStep{

View File

@ -1,24 +1,64 @@
package consul
import (
"io/ioutil"
"log"
"os"
"testing"
"github.com/hashicorp/consul/testutil"
"github.com/hashicorp/terraform/config"
"github.com/hashicorp/terraform/helper/schema"
"github.com/hashicorp/terraform/terraform"
"github.com/mitchellh/mapstructure"
)
var testAccProviders map[string]terraform.ResourceProvider
var testAccProvider *schema.Provider
var testConsulHTTPAddr string
func init() {
testAccProvider = Provider().(*schema.Provider)
testAccProvider.ConfigureFunc = testProviderConfigure
testAccProviders = map[string]terraform.ResourceProvider{
"consul": testAccProvider,
}
}
// we need to overrride the configured address for the tests
func testProviderConfigure(d *schema.ResourceData) (interface{}, error) {
var config Config
configRaw := d.Get("").(map[string]interface{})
if err := mapstructure.Decode(configRaw, &config); err != nil {
return nil, err
}
config.Address = testConsulHTTPAddr
log.Printf("[INFO] Initializing Consul test client")
return config.Client()
}
func TestMain(m *testing.M) {
t := struct {
testutil.TestingT
}{}
// start and stop the test consul server once for all tests
srv := testutil.NewTestServerConfig(t, func(c *testutil.TestServerConfig) {
c.LogLevel = "warn"
c.Stdout = ioutil.Discard
c.Stderr = ioutil.Discard
})
testConsulHTTPAddr = srv.HTTPAddr
ret := m.Run()
srv.Stop()
os.Exit(ret)
}
func TestResourceProvider(t *testing.T) {
if err := Provider().(*schema.Provider).InternalValidate(); err != nil {
t.Fatalf("err: %s", err)
@ -32,8 +72,9 @@ func TestResourceProvider_impl(t *testing.T) {
func TestResourceProvider_Configure(t *testing.T) {
rp := Provider()
// these configuration tests don't require an running server
raw := map[string]interface{}{
"address": "demo.consul.io:80",
"address": "example.com:8500",
"datacenter": "nyc3",
"scheme": "https",
}
@ -53,7 +94,7 @@ func TestResourceProvider_ConfigureTLS(t *testing.T) {
rp := Provider()
raw := map[string]interface{}{
"address": "demo.consul.io:80",
"address": "example.com:8943",
"ca_file": "test-fixtures/cacert.pem",
"cert_file": "test-fixtures/usercert.pem",
"datacenter": "nyc3",
@ -71,13 +112,3 @@ func TestResourceProvider_ConfigureTLS(t *testing.T) {
t.Fatalf("err: %s", err)
}
}
func testAccPreCheck(t *testing.T) {
if v := os.Getenv("CONSUL_HTTP_ADDR"); v != "" {
return
}
if v := os.Getenv("CONSUL_ADDRESS"); v != "" {
return
}
t.Fatal("Either CONSUL_ADDRESS or CONSUL_HTTP_ADDR must be set for acceptance tests")
}