github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/triton/resource_key_test.go (about) 1 package triton 2 3 import ( 4 "fmt" 5 "testing" 6 "time" 7 8 "github.com/hashicorp/terraform/helper/acctest" 9 "github.com/hashicorp/terraform/helper/resource" 10 "github.com/hashicorp/terraform/terraform" 11 "github.com/joyent/triton-go" 12 ) 13 14 func TestAccTritonKey_basic(t *testing.T) { 15 keyName := fmt.Sprintf("acctest-%d", acctest.RandInt()) 16 publicKeyMaterial, _, err := acctest.RandSSHKeyPair("TestAccTritonKey_basic@terraform") 17 if err != nil { 18 t.Fatalf("Cannot generate test SSH key pair: %s", err) 19 } 20 config := testAccTritonKey_basic(keyName, publicKeyMaterial) 21 22 resource.Test(t, resource.TestCase{ 23 PreCheck: func() { testAccPreCheck(t) }, 24 Providers: testAccProviders, 25 CheckDestroy: testCheckTritonKeyDestroy, 26 Steps: []resource.TestStep{ 27 { 28 Config: config, 29 Check: resource.ComposeTestCheckFunc( 30 testCheckTritonKeyExists("triton_key.test"), 31 resource.TestCheckResourceAttr("triton_key.test", "name", keyName), 32 resource.TestCheckResourceAttr("triton_key.test", "key", publicKeyMaterial), 33 func(*terraform.State) error { 34 time.Sleep(10 * time.Second) 35 return nil 36 }, 37 ), 38 }, 39 }, 40 }) 41 } 42 43 func TestAccTritonKey_noKeyName(t *testing.T) { 44 keyComment := fmt.Sprintf("acctest_%d@terraform", acctest.RandInt()) 45 keyMaterial, _, err := acctest.RandSSHKeyPair(keyComment) 46 if err != nil { 47 t.Fatalf("Cannot generate test SSH key pair: %s", err) 48 } 49 config := testAccTritonKey_noKeyName(keyMaterial) 50 51 resource.Test(t, resource.TestCase{ 52 PreCheck: func() { testAccPreCheck(t) }, 53 Providers: testAccProviders, 54 CheckDestroy: testCheckTritonKeyDestroy, 55 Steps: []resource.TestStep{ 56 { 57 Config: config, 58 Check: resource.ComposeTestCheckFunc( 59 testCheckTritonKeyExists("triton_key.test"), 60 resource.TestCheckResourceAttr("triton_key.test", "name", keyComment), 61 resource.TestCheckResourceAttr("triton_key.test", "key", keyMaterial), 62 func(*terraform.State) error { 63 time.Sleep(10 * time.Second) 64 return nil 65 }, 66 ), 67 }, 68 }, 69 }) 70 } 71 72 func testCheckTritonKeyExists(name string) resource.TestCheckFunc { 73 return func(s *terraform.State) error { 74 // Ensure we have enough information in state to look up in API 75 rs, ok := s.RootModule().Resources[name] 76 if !ok { 77 return fmt.Errorf("Not found: %s", name) 78 } 79 conn := testAccProvider.Meta().(*triton.Client) 80 81 key, err := conn.Keys().GetKey(&triton.GetKeyInput{ 82 KeyName: rs.Primary.ID, 83 }) 84 if err != nil { 85 return fmt.Errorf("Bad: Check Key Exists: %s", err) 86 } 87 88 if key == nil { 89 return fmt.Errorf("Bad: Key %q does not exist", rs.Primary.ID) 90 } 91 92 return nil 93 } 94 } 95 96 func testCheckTritonKeyDestroy(s *terraform.State) error { 97 conn := testAccProvider.Meta().(*triton.Client) 98 99 return resource.Retry(1*time.Minute, func() *resource.RetryError { 100 for _, rs := range s.RootModule().Resources { 101 if rs.Type != "triton_key" { 102 continue 103 } 104 105 key, err := conn.Keys().GetKey(&triton.GetKeyInput{ 106 KeyName: rs.Primary.ID, 107 }) 108 if err != nil { 109 return nil 110 } 111 112 if key != nil { 113 return resource.RetryableError(fmt.Errorf("Bad: Key %q still exists", rs.Primary.ID)) 114 } 115 } 116 117 return nil 118 }) 119 } 120 121 var testAccTritonKey_basic = func(keyName string, keyMaterial string) string { 122 return fmt.Sprintf(`resource "triton_key" "test" { 123 name = "%s" 124 key = "%s" 125 } 126 `, keyName, keyMaterial) 127 } 128 129 var testAccTritonKey_noKeyName = func(keyMaterial string) string { 130 return fmt.Sprintf(`resource "triton_key" "test" { 131 key = "%s" 132 } 133 `, keyMaterial) 134 }