github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/docker/resource_docker_image_test.go (about) 1 package docker 2 3 import ( 4 "fmt" 5 "regexp" 6 "testing" 7 8 dc "github.com/fsouza/go-dockerclient" 9 "github.com/hashicorp/terraform/helper/resource" 10 "github.com/hashicorp/terraform/terraform" 11 ) 12 13 var contentDigestRegexp = regexp.MustCompile(`\A[A-Za-z0-9_\+\.-]+:[A-Fa-f0-9]+\z`) 14 15 func TestAccDockerImage_basic(t *testing.T) { 16 resource.Test(t, resource.TestCase{ 17 PreCheck: func() { testAccPreCheck(t) }, 18 Providers: testAccProviders, 19 CheckDestroy: testAccDockerImageDestroy, 20 Steps: []resource.TestStep{ 21 resource.TestStep{ 22 Config: testAccDockerImageConfig, 23 Check: resource.ComposeTestCheckFunc( 24 resource.TestMatchResourceAttr("docker_image.foo", "latest", contentDigestRegexp), 25 ), 26 }, 27 }, 28 }) 29 } 30 31 func TestAccDockerImage_private(t *testing.T) { 32 resource.Test(t, resource.TestCase{ 33 PreCheck: func() { testAccPreCheck(t) }, 34 Providers: testAccProviders, 35 CheckDestroy: testAccDockerImageDestroy, 36 Steps: []resource.TestStep{ 37 resource.TestStep{ 38 Config: testAddDockerPrivateImageConfig, 39 Check: resource.ComposeTestCheckFunc( 40 resource.TestMatchResourceAttr("docker_image.foobar", "latest", contentDigestRegexp), 41 ), 42 }, 43 }, 44 }) 45 } 46 47 func TestAccDockerImage_destroy(t *testing.T) { 48 resource.Test(t, resource.TestCase{ 49 PreCheck: func() { testAccPreCheck(t) }, 50 Providers: testAccProviders, 51 CheckDestroy: func(s *terraform.State) error { 52 for _, rs := range s.RootModule().Resources { 53 if rs.Type != "docker_image" { 54 continue 55 } 56 57 client := testAccProvider.Meta().(*dc.Client) 58 _, err := client.InspectImage(rs.Primary.Attributes["latest"]) 59 if err != nil { 60 return err 61 } 62 } 63 return nil 64 }, 65 Steps: []resource.TestStep{ 66 resource.TestStep{ 67 Config: testAccDockerImageKeepLocallyConfig, 68 Check: resource.ComposeTestCheckFunc( 69 resource.TestMatchResourceAttr("docker_image.foobarzoo", "latest", contentDigestRegexp), 70 ), 71 }, 72 }, 73 }) 74 } 75 76 func TestAccDockerImage_data(t *testing.T) { 77 resource.Test(t, resource.TestCase{ 78 PreCheck: func() { testAccPreCheck(t) }, 79 Providers: testAccProviders, 80 PreventPostDestroyRefresh: true, 81 Steps: []resource.TestStep{ 82 resource.TestStep{ 83 Config: testAccDockerImageFromDataConfig, 84 Check: resource.ComposeTestCheckFunc( 85 resource.TestMatchResourceAttr("docker_image.foobarbaz", "latest", contentDigestRegexp), 86 ), 87 }, 88 }, 89 }) 90 } 91 92 func TestAccDockerImage_data_pull_trigger(t *testing.T) { 93 resource.Test(t, resource.TestCase{ 94 PreCheck: func() { testAccPreCheck(t) }, 95 Providers: testAccProviders, 96 PreventPostDestroyRefresh: true, 97 Steps: []resource.TestStep{ 98 resource.TestStep{ 99 Config: testAccDockerImageFromDataConfigWithPullTrigger, 100 Check: resource.ComposeTestCheckFunc( 101 resource.TestMatchResourceAttr("docker_image.foobarbazoo", "latest", contentDigestRegexp), 102 ), 103 }, 104 }, 105 }) 106 } 107 108 func testAccDockerImageDestroy(s *terraform.State) error { 109 for _, rs := range s.RootModule().Resources { 110 if rs.Type != "docker_image" { 111 continue 112 } 113 114 client := testAccProvider.Meta().(*dc.Client) 115 _, err := client.InspectImage(rs.Primary.Attributes["latest"]) 116 if err == nil { 117 return fmt.Errorf("Image still exists") 118 } else if err != dc.ErrNoSuchImage { 119 return err 120 } 121 } 122 return nil 123 } 124 125 const testAccDockerImageConfig = ` 126 resource "docker_image" "foo" { 127 name = "alpine:3.1" 128 } 129 ` 130 131 const testAddDockerPrivateImageConfig = ` 132 resource "docker_image" "foobar" { 133 name = "gcr.io:443/google_containers/pause:0.8.0" 134 } 135 ` 136 137 const testAccDockerImageKeepLocallyConfig = ` 138 resource "docker_image" "foobarzoo" { 139 name = "crux:3.1" 140 keep_locally = true 141 } 142 ` 143 144 const testAccDockerImageFromDataConfig = ` 145 data "docker_registry_image" "foobarbaz" { 146 name = "alpine:3.1" 147 } 148 resource "docker_image" "foobarbaz" { 149 name = "${data.docker_registry_image.foobarbaz.name}" 150 pull_triggers = ["${data.docker_registry_image.foobarbaz.sha256_digest}"] 151 } 152 ` 153 154 const testAccDockerImageFromDataConfigWithPullTrigger = ` 155 data "docker_registry_image" "foobarbazoo" { 156 name = "alpine:3.1" 157 } 158 resource "docker_image" "foobarbazoo" { 159 name = "${data.docker_registry_image.foobarbazoo.name}" 160 pull_trigger = "${data.docker_registry_image.foobarbazoo.sha256_digest}" 161 } 162 `