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 }