|
|
|
|
@ -1,9 +1,13 @@
|
|
|
|
|
package openstack
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
|
|
|
|
"io/ioutil"
|
|
|
|
|
"os"
|
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
|
|
"github.com/hashicorp/terraform/config"
|
|
|
|
|
"github.com/hashicorp/terraform/helper/pathorcontents"
|
|
|
|
|
"github.com/hashicorp/terraform/helper/schema"
|
|
|
|
|
"github.com/hashicorp/terraform/terraform"
|
|
|
|
|
)
|
|
|
|
|
@ -29,16 +33,6 @@ func init() {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestProvider(t *testing.T) {
|
|
|
|
|
if err := Provider().(*schema.Provider).InternalValidate(); err != nil {
|
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestProvider_impl(t *testing.T) {
|
|
|
|
|
var _ terraform.ResourceProvider = Provider()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func testAccPreCheck(t *testing.T) {
|
|
|
|
|
v := os.Getenv("OS_AUTH_URL")
|
|
|
|
|
if v == "" {
|
|
|
|
|
@ -65,3 +59,172 @@ func testAccPreCheck(t *testing.T) {
|
|
|
|
|
t.Fatal("OS_EXTGW_ID must be set for acceptance tests")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestProvider(t *testing.T) {
|
|
|
|
|
if err := Provider().(*schema.Provider).InternalValidate(); err != nil {
|
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestProvider_impl(t *testing.T) {
|
|
|
|
|
var _ terraform.ResourceProvider = Provider()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Steps for configuring OpenStack with SSL validation are here:
|
|
|
|
|
// https://github.com/hashicorp/terraform/pull/6279#issuecomment-219020144
|
|
|
|
|
func TestAccProvider_caCertFile(t *testing.T) {
|
|
|
|
|
if os.Getenv("TF_ACC") == "" || os.Getenv("OS_SSL_TESTS") == "" {
|
|
|
|
|
t.Skip("TF_ACC or OS_SSL_TESTS not set, skipping OpenStack SSL test.")
|
|
|
|
|
}
|
|
|
|
|
if os.Getenv("OS_CACERT") == "" {
|
|
|
|
|
t.Skip("OS_CACERT is not set; skipping OpenStack CA test.")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
p := Provider()
|
|
|
|
|
|
|
|
|
|
caFile, err := envVarFile("OS_CACERT")
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
defer os.Remove(caFile)
|
|
|
|
|
|
|
|
|
|
raw := map[string]interface{}{
|
|
|
|
|
"cacert_file": caFile,
|
|
|
|
|
}
|
|
|
|
|
rawConfig, err := config.NewRawConfig(raw)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
err = p.Configure(terraform.NewResourceConfig(rawConfig))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("Unexpected err when specifying OpenStack CA by file: %s", err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestAccProvider_caCertString(t *testing.T) {
|
|
|
|
|
if os.Getenv("TF_ACC") == "" || os.Getenv("OS_SSL_TESTS") == "" {
|
|
|
|
|
t.Skip("TF_ACC or OS_SSL_TESTS not set, skipping OpenStack SSL test.")
|
|
|
|
|
}
|
|
|
|
|
if os.Getenv("OS_CACERT") == "" {
|
|
|
|
|
t.Skip("OS_CACERT is not set; skipping OpenStack CA test.")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
p := Provider()
|
|
|
|
|
|
|
|
|
|
caContents, err := envVarContents("OS_CACERT")
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
raw := map[string]interface{}{
|
|
|
|
|
"cacert_file": caContents,
|
|
|
|
|
}
|
|
|
|
|
rawConfig, err := config.NewRawConfig(raw)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
err = p.Configure(terraform.NewResourceConfig(rawConfig))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("Unexpected err when specifying OpenStack CA by string: %s", err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestAccProvider_clientCertFile(t *testing.T) {
|
|
|
|
|
if os.Getenv("TF_ACC") == "" || os.Getenv("OS_SSL_TESTS") == "" {
|
|
|
|
|
t.Skip("TF_ACC or OS_SSL_TESTS not set, skipping OpenStack SSL test.")
|
|
|
|
|
}
|
|
|
|
|
if os.Getenv("OS_CERT") == "" || os.Getenv("OS_KEY") == "" {
|
|
|
|
|
t.Skip("OS_CERT or OS_KEY is not set; skipping OpenStack client SSL auth test.")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
p := Provider()
|
|
|
|
|
|
|
|
|
|
certFile, err := envVarFile("OS_CERT")
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
defer os.Remove(certFile)
|
|
|
|
|
keyFile, err := envVarFile("OS_KEY")
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
defer os.Remove(keyFile)
|
|
|
|
|
|
|
|
|
|
raw := map[string]interface{}{
|
|
|
|
|
"cert": certFile,
|
|
|
|
|
"key": keyFile,
|
|
|
|
|
}
|
|
|
|
|
rawConfig, err := config.NewRawConfig(raw)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
err = p.Configure(terraform.NewResourceConfig(rawConfig))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("Unexpected err when specifying OpenStack Client keypair by file: %s", err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestAccProvider_clientCertString(t *testing.T) {
|
|
|
|
|
if os.Getenv("TF_ACC") == "" || os.Getenv("OS_SSL_TESTS") == "" {
|
|
|
|
|
t.Skip("TF_ACC or OS_SSL_TESTS not set, skipping OpenStack SSL test.")
|
|
|
|
|
}
|
|
|
|
|
if os.Getenv("OS_CERT") == "" || os.Getenv("OS_KEY") == "" {
|
|
|
|
|
t.Skip("OS_CERT or OS_KEY is not set; skipping OpenStack client SSL auth test.")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
p := Provider()
|
|
|
|
|
|
|
|
|
|
certContents, err := envVarContents("OS_CERT")
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
keyContents, err := envVarContents("OS_KEY")
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
raw := map[string]interface{}{
|
|
|
|
|
"cert": certContents,
|
|
|
|
|
"key": keyContents,
|
|
|
|
|
}
|
|
|
|
|
rawConfig, err := config.NewRawConfig(raw)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
err = p.Configure(terraform.NewResourceConfig(rawConfig))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("Unexpected err when specifying OpenStack Client keypair by contents: %s", err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func envVarContents(varName string) (string, error) {
|
|
|
|
|
contents, _, err := pathorcontents.Read(os.Getenv(varName))
|
|
|
|
|
if err != nil {
|
|
|
|
|
return "", fmt.Errorf("Error reading %s: %s", varName, err)
|
|
|
|
|
}
|
|
|
|
|
return contents, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func envVarFile(varName string) (string, error) {
|
|
|
|
|
contents, err := envVarContents(varName)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return "", err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tmpFile, err := ioutil.TempFile("", varName)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return "", fmt.Errorf("Error creating temp file: %s", err)
|
|
|
|
|
}
|
|
|
|
|
if _, err := tmpFile.Write([]byte(contents)); err != nil {
|
|
|
|
|
_ = os.Remove(tmpFile.Name())
|
|
|
|
|
return "", fmt.Errorf("Error writing temp file: %s", err)
|
|
|
|
|
}
|
|
|
|
|
if err := tmpFile.Close(); err != nil {
|
|
|
|
|
_ = os.Remove(tmpFile.Name())
|
|
|
|
|
return "", fmt.Errorf("Error closing temp file: %s", err)
|
|
|
|
|
}
|
|
|
|
|
return tmpFile.Name(), nil
|
|
|
|
|
}
|
|
|
|
|
|