github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/rancher/resource_rancher_registry_test.go (about) 1 package rancher 2 3 import ( 4 "fmt" 5 "testing" 6 "time" 7 8 "github.com/hashicorp/terraform/helper/resource" 9 "github.com/hashicorp/terraform/terraform" 10 rancherClient "github.com/rancher/go-rancher/client" 11 ) 12 13 func TestAccRancherRegistry_basic(t *testing.T) { 14 var registry rancherClient.Registry 15 16 resource.Test(t, resource.TestCase{ 17 PreCheck: func() { testAccPreCheck(t) }, 18 Providers: testAccProviders, 19 CheckDestroy: testAccCheckRancherRegistryDestroy, 20 Steps: []resource.TestStep{ 21 resource.TestStep{ 22 Config: testAccRancherRegistryConfig, 23 Check: resource.ComposeTestCheckFunc( 24 testAccCheckRancherRegistryExists("rancher_registry.foo", ®istry), 25 resource.TestCheckResourceAttr("rancher_registry.foo", "name", "foo"), 26 resource.TestCheckResourceAttr("rancher_registry.foo", "description", "registry test"), 27 resource.TestCheckResourceAttr("rancher_registry.foo", "server_address", "http://foo.com:8080"), 28 ), 29 }, 30 resource.TestStep{ 31 Config: testAccRancherRegistryUpdateConfig, 32 Check: resource.ComposeTestCheckFunc( 33 testAccCheckRancherRegistryExists("rancher_registry.foo", ®istry), 34 resource.TestCheckResourceAttr("rancher_registry.foo", "name", "foo2"), 35 resource.TestCheckResourceAttr("rancher_registry.foo", "description", "registry test - updated"), 36 resource.TestCheckResourceAttr("rancher_registry.foo", "server_address", "http://foo.updated.com:8080"), 37 ), 38 }, 39 resource.TestStep{ 40 Config: testAccRancherRegistryRecreateConfig, 41 Check: resource.ComposeTestCheckFunc( 42 testAccCheckRancherRegistryExists("rancher_registry.foo", ®istry), 43 resource.TestCheckResourceAttr("rancher_registry.foo", "name", "foo"), 44 resource.TestCheckResourceAttr("rancher_registry.foo", "description", "registry test"), 45 resource.TestCheckResourceAttr("rancher_registry.foo", "server_address", "http://foo.com:8080"), 46 ), 47 }, 48 }, 49 }) 50 } 51 52 func TestAccRancherRegistry_disappears(t *testing.T) { 53 var registry rancherClient.Registry 54 55 resource.Test(t, resource.TestCase{ 56 PreCheck: func() { testAccPreCheck(t) }, 57 Providers: testAccProviders, 58 CheckDestroy: testAccCheckRancherRegistryDestroy, 59 Steps: []resource.TestStep{ 60 resource.TestStep{ 61 Config: testAccRancherRegistryConfig, 62 Check: resource.ComposeTestCheckFunc( 63 testAccCheckRancherRegistryExists("rancher_registry.foo", ®istry), 64 testAccRancherRegistryDisappears(®istry), 65 ), 66 ExpectNonEmptyPlan: true, 67 }, 68 }, 69 }) 70 } 71 72 func testAccRancherRegistryDisappears(reg *rancherClient.Registry) resource.TestCheckFunc { 73 return func(s *terraform.State) error { 74 client, err := testAccProvider.Meta().(*Config).EnvironmentClient(reg.AccountId) 75 if err != nil { 76 return err 77 } 78 79 // Step 1: Deactivate 80 if _, e := client.Registry.ActionDeactivate(reg); e != nil { 81 return fmt.Errorf("Error deactivating Registry: %s", err) 82 } 83 84 stateConf := &resource.StateChangeConf{ 85 Pending: []string{"active", "inactive", "deactivating"}, 86 Target: []string{"inactive"}, 87 Refresh: RegistryStateRefreshFunc(client, reg.Id), 88 Timeout: 10 * time.Minute, 89 Delay: 1 * time.Second, 90 MinTimeout: 3 * time.Second, 91 } 92 93 _, waitErr := stateConf.WaitForState() 94 if waitErr != nil { 95 return fmt.Errorf( 96 "Error waiting for registry (%s) to be deactivated: %s", reg.Id, waitErr) 97 } 98 99 // Update resource to reflect its state 100 reg, err = client.Registry.ById(reg.Id) 101 if err != nil { 102 return fmt.Errorf("Failed to refresh state of deactivated registry (%s): %s", reg.Id, err) 103 } 104 105 // Step 2: Remove 106 if _, err := client.Registry.ActionRemove(reg); err != nil { 107 return fmt.Errorf("Error removing Registry: %s", err) 108 } 109 110 stateConf = &resource.StateChangeConf{ 111 Pending: []string{"inactive", "removed", "removing"}, 112 Target: []string{"removed"}, 113 Refresh: RegistryStateRefreshFunc(client, reg.Id), 114 Timeout: 10 * time.Minute, 115 Delay: 1 * time.Second, 116 MinTimeout: 3 * time.Second, 117 } 118 119 _, waitErr = stateConf.WaitForState() 120 if waitErr != nil { 121 return fmt.Errorf( 122 "Error waiting for registry (%s) to be removed: %s", reg.Id, waitErr) 123 } 124 125 return nil 126 } 127 } 128 129 func testAccCheckRancherRegistryExists(n string, reg *rancherClient.Registry) resource.TestCheckFunc { 130 return func(s *terraform.State) error { 131 rs, ok := s.RootModule().Resources[n] 132 133 if !ok { 134 return fmt.Errorf("Not found: %s", n) 135 } 136 137 if rs.Primary.ID == "" { 138 return fmt.Errorf("No App Name is set") 139 } 140 141 client, err := testAccProvider.Meta().(*Config).EnvironmentClient(rs.Primary.Attributes["environment_id"]) 142 if err != nil { 143 return err 144 } 145 146 foundReg, err := client.Registry.ById(rs.Primary.ID) 147 if err != nil { 148 return err 149 } 150 151 if foundReg.Resource.Id != rs.Primary.ID { 152 return fmt.Errorf("Registry not found") 153 } 154 155 *reg = *foundReg 156 157 return nil 158 } 159 } 160 161 func testAccCheckRancherRegistryDestroy(s *terraform.State) error { 162 for _, rs := range s.RootModule().Resources { 163 if rs.Type != "rancher_registry" { 164 continue 165 } 166 client, err := testAccProvider.Meta().(*Config).GlobalClient() 167 if err != nil { 168 return err 169 } 170 171 reg, err := client.Registry.ById(rs.Primary.ID) 172 173 if err == nil { 174 if reg != nil && 175 reg.Resource.Id == rs.Primary.ID && 176 reg.State != "removed" { 177 return fmt.Errorf("Registry still exists") 178 } 179 } 180 181 return nil 182 } 183 return nil 184 } 185 186 const testAccRancherRegistryConfig = ` 187 resource "rancher_environment" "foo_registry" { 188 name = "registry test" 189 description = "environment to test registries" 190 } 191 192 resource "rancher_registry" "foo" { 193 name = "foo" 194 description = "registry test" 195 server_address = "http://foo.com:8080" 196 environment_id = "${rancher_environment.foo_registry.id}" 197 } 198 ` 199 200 const testAccRancherRegistryUpdateConfig = ` 201 resource "rancher_environment" "foo_registry" { 202 name = "registry test" 203 description = "environment to test registries" 204 } 205 206 resource "rancher_registry" "foo" { 207 name = "foo2" 208 description = "registry test - updated" 209 server_address = "http://foo.updated.com:8080" 210 environment_id = "${rancher_environment.foo_registry.id}" 211 } 212 ` 213 214 const testAccRancherRegistryRecreateConfig = ` 215 resource "rancher_environment" "foo_registry" { 216 name = "registry test" 217 description = "environment to test registries" 218 } 219 220 resource "rancher_environment" "foo_registry2" { 221 name = "alternative registry test" 222 description = "other environment to test registries" 223 } 224 225 resource "rancher_registry" "foo" { 226 name = "foo" 227 description = "registry test" 228 server_address = "http://foo.com:8080" 229 environment_id = "${rancher_environment.foo_registry2.id}" 230 } 231 `