2015-10-28 17:55:50 +00:00
package google
import (
"fmt"
"testing"
2016-01-05 21:47:10 +00:00
"github.com/hashicorp/terraform/helper/acctest"
2015-10-28 17:55:50 +00:00
"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/terraform"
)
2017-09-26 20:44:13 +00:00
func TestAccPubsubSubscription_basic ( t * testing . T ) {
2017-10-12 22:07:29 +00:00
t . Parallel ( )
2017-09-26 20:44:13 +00:00
topic := fmt . Sprintf ( "tf-test-topic-%s" , acctest . RandString ( 10 ) )
subscription := fmt . Sprintf ( "tf-test-sub-%s" , acctest . RandString ( 10 ) )
2015-10-28 17:55:50 +00:00
resource . Test ( t , resource . TestCase {
PreCheck : func ( ) { testAccPreCheck ( t ) } ,
Providers : testAccProviders ,
CheckDestroy : testAccCheckPubsubSubscriptionDestroy ,
Steps : [ ] resource . TestStep {
2017-05-05 13:57:24 +00:00
{
2017-09-26 20:44:13 +00:00
Config : testAccPubsubSubscription_basic ( topic , subscription ) ,
2018-02-20 19:12:22 +00:00
} ,
resource . TestStep {
ResourceName : "google_pubsub_subscription.foo" ,
ImportStateId : subscription ,
ImportState : true ,
ImportStateVerify : true ,
2015-10-28 17:55:50 +00:00
} ,
} ,
} )
}
2017-09-26 20:44:13 +00:00
// TODO: Add acceptance test for push delivery.
//
// Testing push endpoints is tricky for the following reason:
// - You need a publicly accessible HTTPS server to handle POST requests in order to receive push messages.
// - The server must present a valid SSL certificate signed by a certificate authority
// - The server must be routable by DNS.
// - You also need to validate that you own the domain (or have equivalent access to the endpoint).
// - Finally, you must register the endpoint domain with the GCP project.
//
// An easy way to test this would be to create an App Engine Hello World app. With AppEngine, SSL certificate, DNS and domain registry is handled for us.
// App Engine is not yet supported by Terraform but once it is, it will provide an easy path to testing push configs.
// Another option would be to use Cloud Functions once Terraform support is added.
2015-10-28 17:55:50 +00:00
func testAccCheckPubsubSubscriptionDestroy ( s * terraform . State ) error {
for _ , rs := range s . RootModule ( ) . Resources {
if rs . Type != "google_pubsub_subscription" {
continue
}
config := testAccProvider . Meta ( ) . ( * Config )
2016-03-02 23:36:32 +00:00
sub , _ := config . clientPubsub . Projects . Subscriptions . Get ( rs . Primary . ID ) . Do ( )
if sub != nil {
2016-02-13 06:39:23 +00:00
return fmt . Errorf ( "Subscription still present" )
2015-10-28 17:55:50 +00:00
}
}
return nil
}
2017-09-26 20:44:13 +00:00
func testAccPubsubSubscription_basic ( topic , subscription string ) string {
return fmt . Sprintf ( `
2018-02-20 19:12:22 +00:00
resource "google_pubsub_topic" "foo" {
2017-09-26 20:44:13 +00:00
name = "%s"
2015-10-28 17:55:50 +00:00
}
2018-02-20 19:12:22 +00:00
resource "google_pubsub_subscription" "foo" {
2017-09-26 20:44:13 +00:00
name = "%s"
2018-02-20 19:12:22 +00:00
topic = "${google_pubsub_topic.foo.name}"
2016-02-23 00:55:22 +00:00
ack_deadline_seconds = 20
2017-09-26 20:44:13 +00:00
} ` , topic , subscription )
}
2017-10-30 20:12:14 +00:00
func TestGetComputedTopicName ( t * testing . T ) {
type testData struct {
project string
topic string
expected string
}
var testCases = [ ] testData {
testData {
project : "my-project" ,
topic : "my-topic" ,
expected : "projects/my-project/topics/my-topic" ,
} ,
testData {
project : "my-project" ,
topic : "projects/another-project/topics/my-topic" ,
expected : "projects/another-project/topics/my-topic" ,
} ,
}
for _ , testCase := range testCases {
computedTopicName := getComputedTopicName ( testCase . project , testCase . topic )
if computedTopicName != testCase . expected {
t . Fatalf ( "bad computed topic name: %s' => expected %s" , computedTopicName , testCase . expected )
}
}
}