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  }