github.com/unclejack/drone@v0.2.1-0.20140918182345-831b034aa33b/pkg/plugin/publish/docker_test.go (about) 1 package publish 2 3 import ( 4 "strings" 5 "testing" 6 7 "gopkg.in/v1/yaml" 8 "github.com/drone/drone/pkg/build/buildfile" 9 "github.com/drone/drone/pkg/build/repo" 10 ) 11 12 type PublishToDrone struct { 13 Publish *Publish `yaml:"publish,omitempty"` 14 } 15 16 func setUpWithDrone(input string) (string, error) { 17 var buildStruct PublishToDrone 18 err := yaml.Unmarshal([]byte(input), &buildStruct) 19 if err != nil { 20 return "", err 21 } 22 bf := buildfile.New() 23 buildStruct.Publish.Write(bf, &repo.Repo{Name: "name"}) 24 return bf.String(), err 25 } 26 27 // Private Registry Test (no auth) 28 var privateRegistryNoAuthYaml = ` 29 publish: 30 docker: 31 dockerfile: file_path 32 docker_server: server 33 docker_port: 1000 34 docker_version: 1.0 35 registry_login: false 36 image_name: registry/image 37 ` 38 func TestPrivateRegistryNoAuth(t *testing.T) { 39 response, err := setUpWithDrone(privateRegistryNoAuthYaml) 40 t.Log(privateRegistryNoAuthYaml) 41 if err != nil { 42 t.Fatalf("Can't unmarshal script: %s\n\n", err.Error()) 43 } 44 if !strings.Contains(response, "docker -H server:1000 build -t registry/image:$(git rev-parse --short HEAD)") { 45 t.Fatalf("Response: " + response + " doesn't contain registry in image-names: expected registry/image\n\n") 46 } 47 } 48 49 // Private Registry Test (with auth) 50 var privateRegistryAuthYaml = ` 51 publish: 52 docker: 53 dockerfile: file_path 54 docker_server: server 55 docker_port: 1000 56 docker_version: 1.0 57 registry_login_url: https://registry:8000/v1/ 58 registry_login: true 59 username: username 60 password: password 61 email: email@example.com 62 image_name: registry/image 63 ` 64 func TestPrivateRegistryAuth(t *testing.T) { 65 response, err := setUpWithDrone(privateRegistryAuthYaml) 66 t.Log(privateRegistryAuthYaml) 67 if err != nil { 68 t.Fatalf("Can't unmarshal script: %s\n\n", err.Error()) 69 } 70 if !strings.Contains(response, "docker -H server:1000 login -u username -p password -e email@example.com https://registry:8000/v1/") { 71 t.Log("\n\n\n\ndocker -H server:1000 login -u username -p xxxxxxxx -e email@example.com https://registry:8000/v1/\n\n\n\n") 72 t.Fatalf("Response: " + response + " doesn't contain private registry login\n\n") 73 } 74 if !strings.Contains(response, "docker -H server:1000 build -t registry/image:$(git rev-parse --short HEAD) .") { 75 t.Log("docker -H server:1000 build -t registry/image:$(git rev-parse --short HEAD) .") 76 t.Fatalf("Response: " + response + " doesn't contain registry in image-names\n\n") 77 } 78 } 79 80 // Override "latest" Test 81 var overrideLatestTagYaml = ` 82 publish: 83 docker: 84 docker_server: server 85 docker_port: 1000 86 docker_version: 1.0 87 username: username 88 password: password 89 email: email@example.com 90 image_name: username/image 91 push_latest: true 92 ` 93 func TestOverrideLatestTag(t *testing.T) { 94 response, err := setUpWithDrone(overrideLatestTagYaml) 95 t.Log(overrideLatestTagYaml) 96 if err != nil { 97 t.Fatalf("Can't unmarshal script: %s\n\n", err.Error()) 98 } 99 if !strings.Contains(response, "docker -H server:1000 build -t username/image:$(git rev-parse --short HEAD) .") { 100 t.Fatalf("Response: " + response + " doesn't contain the git-ref tagged image\n\n") 101 } 102 if !strings.Contains(response, "docker -H server:1000 tag username/image:$(git rev-parse --short HEAD) username/image:latest") { 103 t.Fatalf("Response: " + response + " doesn't contain 'latest' tag command\n\n") 104 } 105 } 106 107 // Keep builds Test 108 var keepBuildsYaml = ` 109 publish: 110 docker: 111 docker_server: server 112 docker_port: 1000 113 docker_version: 1.0 114 keep_build: true 115 username: username 116 password: password 117 email: email@example.com 118 image_name: image 119 ` 120 func TestKeepBuilds(t *testing.T) { 121 response, err := setUpWithDrone(keepBuildsYaml) 122 t.Log(keepBuildsYaml) 123 if err != nil { 124 t.Fatalf("Can't unmarshal script: %s\n\n", err.Error()) 125 } 126 if strings.Contains(response, "docker -H server:1000 rmi") { 127 t.Fatalf("Response: " + response + " incorrectly instructs the docker server to remove the builds when it shouldn't\n\n") 128 } 129 } 130 131 // Custom Tag test 132 var customTagYaml = ` 133 publish: 134 docker: 135 docker_server: server 136 docker_port: 1000 137 docker_version: 1.0 138 custom_tag: release-0.1 139 username: username 140 password: password 141 email: email@example.com 142 image_name: username/image 143 ` 144 func TestCustomTag(t *testing.T) { 145 response, err := setUpWithDrone(customTagYaml) 146 t.Log(customTagYaml) 147 if err != nil { 148 t.Fatalf("Can't unmarshal script: %s\n", err.Error()) 149 } 150 if strings.Contains(response, "$(git rev-parse --short HEAD)") { 151 t.Fatalf("Response: " + response + " is tagging images from git-refs when it should use a custom tag\n\n") 152 } 153 if !strings.Contains(response, "docker -H server:1000 build -t username/image:release-0.1") { 154 t.Fatalf("Response: " + response + " isn't tagging images using our custom tag\n\n") 155 } 156 if !strings.Contains(response, "docker -H server:1000 push username/image"){ 157 t.Fatalf("Response: " + response + " doesn't push the custom tagged image\n\n") 158 } 159 } 160 161 var missingFieldsYaml = ` 162 publish: 163 docker: 164 dockerfile: file 165 ` 166 167 func TestMissingFields(t *testing.T) { 168 response, err := setUpWithDrone(missingFieldsYaml) 169 t.Log(missingFieldsYaml) 170 if err != nil { 171 t.Fatalf("Can't unmarshal script: %s\n\n", err.Error()) 172 } 173 if !strings.Contains(response, "Missing argument(s)") { 174 t.Fatalf("Response: " + response + " didn't contain missing arguments warning\n\n") 175 } 176 } 177 178 var validYaml = ` 179 publish: 180 docker: 181 docker_file: file_path 182 docker_server: server 183 docker_port: 1000 184 docker_version: 1.0 185 username: user 186 password: password 187 email: email 188 image_name: user/image 189 push_latest: true 190 registry_login: true 191 ` 192 193 func TestValidYaml(t *testing.T) { 194 response, err := setUpWithDrone(validYaml) 195 t.Log(validYaml) 196 if err != nil { 197 t.Fatalf("Can't unmarshal script: %s\n\n", err.Error()) 198 } 199 200 if !strings.Contains(response, "docker -H server:1000 tag user/image:$(git rev-parse --short HEAD) user/image:latest") { 201 t.Fatalf("Response: " + response + " doesn't contain tag command for latest\n\n") 202 } 203 if !strings.Contains(response, "docker -H server:1000 build -t user/image:$(git rev-parse --short HEAD) - <") { 204 t.Fatalf("Response: " + response + "doesn't contain build command for commit hash\n\n") 205 } 206 if !strings.Contains(response, "docker -H server:1000 login -u user -p password -e email") { 207 t.Fatalf("Response: " + response + " doesn't contain login command\n\n") 208 } 209 if !strings.Contains(response, "docker -H server:1000 push user/image") { 210 t.Fatalf("Response: " + response + " doesn't contain push command\n\n") 211 } 212 if !strings.Contains(response, "docker -H server:1000 rmi user/image:" + 213 "$(git rev-parse --short HEAD)") { 214 t.Fatalf("Response: " + response + " doesn't contain remove image command\n\n") 215 } 216 } 217 218 var withoutDockerFileYaml = ` 219 publish: 220 docker: 221 docker_server: server 222 docker_port: 1000 223 docker_version: 1.0 224 image_name: user/image 225 username: user 226 password: password 227 email: email 228 ` 229 230 func TestWithoutDockerFile(t *testing.T) { 231 response, err := setUpWithDrone(withoutDockerFileYaml) 232 t.Log(withoutDockerFileYaml) 233 if err != nil { 234 t.Fatalf("Can't unmarshal script: %s\n\n", err.Error()) 235 } 236 237 if !strings.Contains(response, "docker -H server:1000 build -t user/image:$(git rev-parse --short HEAD) .") { 238 t.Fatalf("Response: " + response + " doesn't contain build command\n\n") 239 } 240 }