github.com/buildtool/build-tools@v0.2.29-0.20240322150259-6a1d0a553c23/pkg/config/registry_test.go (about)

     1  // MIT License
     2  //
     3  // Copyright (c) 2018 buildtool
     4  //
     5  // Permission is hereby granted, free of charge, to any person obtaining a copy
     6  // of this software and associated documentation files (the "Software"), to deal
     7  // in the Software without restriction, including without limitation the rights
     8  // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     9  // copies of the Software, and to permit persons to whom the Software is
    10  // furnished to do so, subject to the following conditions:
    11  //
    12  // The above copyright notice and this permission notice shall be included in all
    13  // copies or substantial portions of the Software.
    14  //
    15  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    16  // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    17  // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    18  // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    19  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    20  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    21  // SOFTWARE.
    22  
    23  package config
    24  
    25  import (
    26  	"bytes"
    27  
    28  	"os"
    29  	"testing"
    30  
    31  	"github.com/stretchr/testify/assert"
    32  
    33  	"github.com/buildtool/build-tools/pkg"
    34  	"github.com/buildtool/build-tools/pkg/registry"
    35  )
    36  
    37  func TestDockerhub_Identify(t *testing.T) {
    38  	defer pkg.SetEnv("DOCKERHUB_NAMESPACE", "repo")()
    39  	defer pkg.SetEnv("DOCKERHUB_USERNAME", "user")()
    40  	defer pkg.SetEnv("DOCKERHUB_PASSWORD", "pass")()
    41  
    42  	out := &bytes.Buffer{}
    43  	cfg, err := Load(name)
    44  	assert.NoError(t, err)
    45  	registry := cfg.CurrentRegistry()
    46  	assert.NotNil(t, registry)
    47  	assert.Equal(t, "repo", registry.RegistryUrl())
    48  	assert.Equal(t, "", out.String())
    49  }
    50  
    51  func TestDockerhub_Name(t *testing.T) {
    52  	defer pkg.SetEnv("DOCKERHUB_NAMESPACE", "repo")()
    53  	defer pkg.SetEnv("DOCKERHUB_USERNAME", "user")()
    54  	defer pkg.SetEnv("DOCKERHUB_PASSWORD", "pass")()
    55  
    56  	cfg, err := Load(name)
    57  	assert.NoError(t, err)
    58  	registry := cfg.CurrentRegistry()
    59  	assert.Equal(t, "Dockerhub", registry.Name())
    60  }
    61  
    62  func TestEcr_Identify(t *testing.T) {
    63  	defer pkg.SetEnv("ECR_URL", "1234.dkr.ecr.eu-west-1.amazonaws.com")()
    64  	defer pkg.SetEnv("ECR_REGION", "region")()
    65  
    66  	out := &bytes.Buffer{}
    67  	cfg, err := Load(name)
    68  	assert.NoError(t, err)
    69  	registry := cfg.CurrentRegistry()
    70  	assert.NotNil(t, registry)
    71  	assert.Equal(t, "1234.dkr.ecr.eu-west-1.amazonaws.com", registry.RegistryUrl())
    72  	assert.Equal(t, "", out.String())
    73  }
    74  
    75  func TestEcr_Name(t *testing.T) {
    76  	defer pkg.SetEnv("ECR_URL", "1234.dkr.ecr.eu-west-1.amazonaws.com")()
    77  	defer pkg.SetEnv("ECR_REGION", "region")()
    78  
    79  	cfg, err := Load(name)
    80  	assert.NoError(t, err)
    81  	registry := cfg.CurrentRegistry()
    82  	assert.Equal(t, "ECR", registry.Name())
    83  }
    84  
    85  func TestEcr_Identify_MissingDockerRegistry(t *testing.T) {
    86  	defer pkg.SetEnv("ECR_URL", "url")()
    87  	defer pkg.SetEnv("ECR_REGION", "region")()
    88  	defer pkg.SetEnv("AWS_CA_BUNDLE", "/missing/bundle")()
    89  
    90  	out := &bytes.Buffer{}
    91  	cfg, err := Load(name)
    92  	assert.NoError(t, err)
    93  	reg := cfg.CurrentRegistry()
    94  	assert.Equal(t, registry.NoDockerRegistry{}, reg)
    95  	assert.Equal(t, "", out.String())
    96  }
    97  
    98  func TestGitlab_Identify(t *testing.T) {
    99  	defer pkg.SetEnv("CI_REGISTRY", "registry.gitlab.com")()
   100  	defer pkg.SetEnv("CI_REGISTRY_USER", "gitlab-ci-token")()
   101  	defer pkg.SetEnv("CI_REGISTRY_IMAGE", "registry.gitlab.com/group/image")()
   102  	defer pkg.SetEnv("CI_JOB_TOKEN", "token")()
   103  
   104  	out := &bytes.Buffer{}
   105  	cfg, err := Load(name)
   106  	assert.NoError(t, err)
   107  	registry := cfg.CurrentRegistry()
   108  	assert.Equal(t, "registry.gitlab.com/group", registry.RegistryUrl())
   109  	assert.Equal(t, "eyJ1c2VybmFtZSI6ImdpdGxhYi1jaS10b2tlbiIsInBhc3N3b3JkIjoidG9rZW4iLCJzZXJ2ZXJhZGRyZXNzIjoicmVnaXN0cnkuZ2l0bGFiLmNvbSJ9", registry.GetAuthInfo())
   110  	assert.Equal(t, "", out.String())
   111  }
   112  
   113  func TestGitlab_Name(t *testing.T) {
   114  	defer pkg.SetEnv("CI_REGISTRY", "registry.gitlab.com")()
   115  	defer pkg.SetEnv("CI_REGISTRY_IMAGE", "registry.gitlab.com/group/image")()
   116  	defer pkg.SetEnv("CI_JOB_TOKEN", "token")()
   117  
   118  	cfg, err := Load(name)
   119  	assert.NoError(t, err)
   120  	registry := cfg.CurrentRegistry()
   121  	assert.Equal(t, "Gitlab", registry.Name())
   122  }
   123  
   124  func TestGitlab_RepositoryWithoutSlash(t *testing.T) {
   125  	defer pkg.SetEnv("CI_REGISTRY", "registry.gitlab.com")()
   126  	defer pkg.SetEnv("CI_REGISTRY_IMAGE", "registry.gitlab.com")()
   127  	defer pkg.SetEnv("CI_JOB_TOKEN", "token")()
   128  
   129  	out := &bytes.Buffer{}
   130  	cfg, err := Load(name)
   131  	assert.NoError(t, err)
   132  	registry := cfg.CurrentRegistry()
   133  	assert.NotNil(t, registry)
   134  	assert.Equal(t, "registry.gitlab.com", registry.RegistryUrl())
   135  	assert.Equal(t, "", out.String())
   136  }
   137  
   138  func TestGitlab_RegistryFallback(t *testing.T) {
   139  	defer pkg.SetEnv("CI_REGISTRY", "registry.gitlab.com")()
   140  	defer pkg.SetEnv("CI_REGISTRY_IMAGE", "")()
   141  	defer pkg.SetEnv("CI_JOB_TOKEN", "token")()
   142  
   143  	dir, _ := os.MkdirTemp("", "build-tools")
   144  	defer os.RemoveAll(dir)
   145  	oldPwd, _ := os.Getwd()
   146  	_ = os.Chdir(dir)
   147  	defer func() { _ = os.Chdir(oldPwd) }()
   148  
   149  	out := &bytes.Buffer{}
   150  	cfg, err := Load(name)
   151  	assert.NoError(t, err)
   152  	registry := cfg.CurrentRegistry()
   153  	assert.NotNil(t, registry)
   154  	assert.Equal(t, "registry.gitlab.com", registry.RegistryUrl())
   155  	assert.Equal(t, "", out.String())
   156  }
   157  
   158  func TestQuay_Identify(t *testing.T) {
   159  	defer pkg.SetEnv("QUAY_REPOSITORY", "repo")()
   160  	defer pkg.SetEnv("QUAY_USERNAME", "user")()
   161  	defer pkg.SetEnv("QUAY_PASSWORD", "pass")()
   162  
   163  	out := &bytes.Buffer{}
   164  	cfg, err := Load(name)
   165  	assert.NoError(t, err)
   166  	registry := cfg.CurrentRegistry()
   167  	assert.NotNil(t, registry)
   168  	assert.Equal(t, "quay.io/repo", registry.RegistryUrl())
   169  	assert.Equal(t, "", out.String())
   170  }
   171  
   172  func TestQuay_Name(t *testing.T) {
   173  	defer pkg.SetEnv("QUAY_REPOSITORY", "repo")()
   174  	defer pkg.SetEnv("QUAY_USERNAME", "user")()
   175  	defer pkg.SetEnv("QUAY_PASSWORD", "pass")()
   176  
   177  	cfg, err := Load(name)
   178  	assert.NoError(t, err)
   179  	registry := cfg.CurrentRegistry()
   180  	assert.Equal(t, "Quay.io", registry.Name())
   181  }