1
0
mirror of synced 2025-12-19 09:50:33 -05:00
Files
terraform-google-sql/test/test_util.go
2019-06-26 12:57:15 +02:00

131 lines
4.8 KiB
Go

package test
import (
"io/ioutil"
"os"
"testing"
"github.com/gruntwork-io/terratest/modules/gcp"
"github.com/gruntwork-io/terratest/modules/terraform"
"github.com/stretchr/testify/require"
)
const DB_NAME = "testdb"
const DB_USER = "testuser"
const DB_PASS = "testpassword"
const KEY_REGION = "region"
const KEY_PROJECT = "project"
const KEY_MASTER_ZONE = "masterZone"
const KEY_FAILOVER_REPLICA_ZONE = "failoverReplicaZone"
const KEY_READ_REPLICA_ZONE = "readReplicaZone"
const OUTPUT_MASTER_IP_ADDRESSES = "master_ip_addresses"
const OUTPUT_MASTER_INSTANCE_NAME = "master_instance_name"
const OUTPUT_FAILOVER_INSTANCE_NAME = "failover_instance_name"
const OUTPUT_MASTER_PROXY_CONNECTION = "master_proxy_connection"
const OUTPUT_FAILOVER_PROXY_CONNECTION = "failover_proxy_connection"
const OUTPUT_READ_REPLICA_PROXY_CONNECTIONS = "read_replica_proxy_connections"
const OUTPUT_READ_REPLICA_INSTANCE_NAMES = "read_replica_instance_names"
const OUTPUT_READ_REPLICA_PUBLIC_IPS = "read_replica_public_ips"
const OUTPUT_MASTER_PUBLIC_IP = "master_public_ip"
const OUTPUT_MASTER_PRIVATE_IP = "master_private_ip"
const OUTPUT_MASTER_CA_CERT = "master_ca_cert"
const OUTPUT_CLIENT_CA_CERT = "client_ca_cert"
const OUTPUT_CLIENT_PRIVATE_KEY = "client_private_key"
const OUTPUT_DB_NAME = "db_name"
const MYSQL_CREATE_TEST_TABLE_WITH_AUTO_INCREMENT_STATEMENT = "CREATE TABLE IF NOT EXISTS test (id int NOT NULL AUTO_INCREMENT, name varchar(10) NOT NULL, PRIMARY KEY (ID))"
const MYSQL_INSERT_TEST_ROW = "INSERT INTO test(name) VALUES(?)"
const SQL_EMPTY_TEST_TABLE_STATEMENT = "DELETE FROM test"
const SQL_QUERY_ROW_COUNT = "SELECT count(*) FROM test"
const POSTGRES_CREATE_TEST_TABLE_WITH_SERIAL = "CREATE TABLE IF NOT EXISTS test (id SERIAL, name varchar(10) NOT NULL, PRIMARY KEY (ID))"
const POSTGRES_INSERT_TEST_ROW = "INSERT INTO test(name) VALUES('Grunty') RETURNING id"
const POSTGRES_DROP_TEST_TABLE = "DROP TABLE IF EXISTS test"
func getRandomRegion(t *testing.T, projectID string) string {
approvedRegions := []string{"europe-north1", "europe-west1", "europe-west2", "europe-west3", "us-central1", "us-east1", "us-west1"}
//approvedRegions := []string{"europe-north1"}
return gcp.GetRandomRegion(t, projectID, approvedRegions, []string{})
}
func getTwoDistinctRandomZonesForRegion(t *testing.T, projectID string, region string) (string, string) {
firstZone := gcp.GetRandomZoneForRegion(t, projectID, region)
secondZone := gcp.GetRandomZoneForRegion(t, projectID, region)
for {
if firstZone != secondZone {
break
}
secondZone = gcp.GetRandomZoneForRegion(t, projectID, region)
}
return firstZone, secondZone
}
func createTerratestOptionsForCloudSql(projectId string, region string, exampleDir string, namePrefix string) *terraform.Options {
terratestOptions := &terraform.Options{
// The path to where your Terraform code is located
TerraformDir: exampleDir,
Vars: map[string]interface{}{
"region": region,
"project": projectId,
"name_prefix": namePrefix,
"db_name": DB_NAME,
"master_user_name": DB_USER,
"master_user_password": DB_PASS,
},
}
return terratestOptions
}
func createTerratestOptionsForCloudSqlReplicas(projectId string, region string, exampleDir string, namePrefix string, masterZone string, failoverReplicaZone string, numReadReplicas int, readReplicaZone string) *terraform.Options {
terratestOptions := &terraform.Options{
// The path to where your Terraform code is located
TerraformDir: exampleDir,
Vars: map[string]interface{}{
"region": region,
"master_zone": masterZone,
"num_read_replicas": numReadReplicas,
"read_replica_zones": []string{readReplicaZone},
"failover_replica_zone": failoverReplicaZone,
"project": projectId,
"name_prefix": namePrefix,
"db_name": DB_NAME,
"master_user_name": DB_USER,
"master_user_password": DB_PASS,
},
}
return terratestOptions
}
func createTerratestOptionsForClientCert(projectId string, region string, exampleDir string, commonName string, instanceName string) *terraform.Options {
terratestOptions := &terraform.Options{
// The path to where your Terraform code is located
TerraformDir: exampleDir,
Vars: map[string]interface{}{
"region": region,
"project": projectId,
"common_name": commonName,
"database_instance_name": instanceName,
},
}
return terratestOptions
}
func createTempFile(t *testing.T, content []byte) *os.File {
tmpFile, err := ioutil.TempFile(os.TempDir(), "temp-")
require.NoError(t, err, "Failed to create temp file")
_, err = tmpFile.Write(content)
require.NoError(t, err, "Failed to write to temp file")
err = tmpFile.Close()
require.NoError(t, err, "Failed to close temp file")
return tmpFile
}