github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/digitalocean/resource_digitalocean_certificate_test.go (about)

     1  package digitalocean
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"strings"
     7  	"testing"
     8  
     9  	"github.com/digitalocean/godo"
    10  	"github.com/hashicorp/terraform/helper/acctest"
    11  	"github.com/hashicorp/terraform/helper/resource"
    12  	"github.com/hashicorp/terraform/terraform"
    13  )
    14  
    15  func TestAccDigitalOceanCertificate_Basic(t *testing.T) {
    16  	var cert godo.Certificate
    17  	rInt := acctest.RandInt()
    18  	leafCertMaterial, privateKeyMaterial, err := acctest.RandTLSCert("Acme Co")
    19  	if err != nil {
    20  		t.Fatalf("Cannot generate test TLS certificate: %s", err)
    21  	}
    22  	rootCertMaterial, _, err := acctest.RandTLSCert("Acme Go")
    23  	if err != nil {
    24  		t.Fatalf("Cannot generate test TLS certificate: %s", err)
    25  	}
    26  	certChainMaterial := fmt.Sprintf("%s\n%s", strings.TrimSpace(rootCertMaterial), leafCertMaterial)
    27  
    28  	resource.Test(t, resource.TestCase{
    29  		PreCheck:     func() { testAccPreCheck(t) },
    30  		Providers:    testAccProviders,
    31  		CheckDestroy: testAccCheckDigitalOceanCertificateDestroy,
    32  		Steps: []resource.TestStep{
    33  			{
    34  				Config: testAccCheckDigitalOceanCertificateConfig_basic(rInt, privateKeyMaterial, leafCertMaterial, certChainMaterial),
    35  				Check: resource.ComposeTestCheckFunc(
    36  					testAccCheckDigitalOceanCertificateExists("digitalocean_certificate.foobar", &cert),
    37  					resource.TestCheckResourceAttr(
    38  						"digitalocean_certificate.foobar", "name", fmt.Sprintf("certificate-%d", rInt)),
    39  					resource.TestCheckResourceAttr(
    40  						"digitalocean_certificate.foobar", "private_key", fmt.Sprintf("%s\n", privateKeyMaterial)),
    41  					resource.TestCheckResourceAttr(
    42  						"digitalocean_certificate.foobar", "leaf_certificate", fmt.Sprintf("%s\n", leafCertMaterial)),
    43  					resource.TestCheckResourceAttr(
    44  						"digitalocean_certificate.foobar", "certificate_chain", fmt.Sprintf("%s\n", certChainMaterial)),
    45  				),
    46  			},
    47  		},
    48  	})
    49  }
    50  
    51  func testAccCheckDigitalOceanCertificateDestroy(s *terraform.State) error {
    52  	client := testAccProvider.Meta().(*godo.Client)
    53  
    54  	for _, rs := range s.RootModule().Resources {
    55  		if rs.Type != "digitalocean_certificate" {
    56  			continue
    57  		}
    58  
    59  		_, _, err := client.Certificates.Get(context.Background(), rs.Primary.ID)
    60  
    61  		if err != nil && !strings.Contains(err.Error(), "404") {
    62  			return fmt.Errorf(
    63  				"Error waiting for certificate (%s) to be destroyed: %s",
    64  				rs.Primary.ID, err)
    65  		}
    66  	}
    67  
    68  	return nil
    69  }
    70  
    71  func testAccCheckDigitalOceanCertificateExists(n string, cert *godo.Certificate) resource.TestCheckFunc {
    72  	return func(s *terraform.State) error {
    73  		rs, ok := s.RootModule().Resources[n]
    74  		if !ok {
    75  			return fmt.Errorf("Not found: %s", n)
    76  		}
    77  
    78  		if rs.Primary.ID == "" {
    79  			return fmt.Errorf("No Certificate ID is set")
    80  		}
    81  
    82  		client := testAccProvider.Meta().(*godo.Client)
    83  
    84  		c, _, err := client.Certificates.Get(context.Background(), rs.Primary.ID)
    85  
    86  		if err != nil {
    87  			return err
    88  		}
    89  
    90  		if c.ID != rs.Primary.ID {
    91  			return fmt.Errorf("Certificate not found")
    92  		}
    93  
    94  		*cert = *c
    95  
    96  		return nil
    97  	}
    98  }
    99  
   100  func testAccCheckDigitalOceanCertificateConfig_basic(rInt int, privateKeyMaterial, leafCert, certChain string) string {
   101  	return fmt.Sprintf(`
   102  resource "digitalocean_certificate" "foobar" {
   103    name = "certificate-%d"
   104    private_key = <<EOF
   105  %s
   106  EOF
   107    leaf_certificate = <<EOF
   108  %s
   109  EOF
   110    certificate_chain = <<EOF
   111  %s
   112  EOF
   113  }`, rInt, privateKeyMaterial, leafCert, certChain)
   114  }