|
|
@@ -17,6 +17,7 @@
|
|
|
package convert
|
|
|
|
|
|
import (
|
|
|
+ "errors"
|
|
|
"strconv"
|
|
|
"testing"
|
|
|
|
|
|
@@ -30,12 +31,13 @@ import (
|
|
|
)
|
|
|
|
|
|
const getAllCredentials = "getAllRegistryCredentials"
|
|
|
+const autoLoginAcr = "autoLoginAcr"
|
|
|
|
|
|
func TestHubPrivateImage(t *testing.T) {
|
|
|
- loader := &MockRegistryLoader{}
|
|
|
- loader.On(getAllCredentials).Return(registry("https://index.docker.io", userPwdCreds("toto", "pwd")), nil)
|
|
|
+ registryHelper := &MockRegistryHelper{}
|
|
|
+ registryHelper.On(getAllCredentials).Return(registry("https://index.docker.io", userPwdCreds("toto", "pwd")), nil)
|
|
|
|
|
|
- creds, err := getRegistryCredentials(composeServices("gtardif/privateimg"), loader)
|
|
|
+ creds, err := getRegistryCredentials(composeServices("gtardif/privateimg"), registryHelper)
|
|
|
assert.NilError(t, err)
|
|
|
assert.DeepEqual(t, creds, []containerinstance.ImageRegistryCredential{
|
|
|
{
|
|
|
@@ -47,10 +49,10 @@ func TestHubPrivateImage(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
func TestRegistryNameWithoutProtocol(t *testing.T) {
|
|
|
- loader := &MockRegistryLoader{}
|
|
|
- loader.On(getAllCredentials).Return(registry("index.docker.io", userPwdCreds("toto", "pwd")), nil)
|
|
|
+ registryHelper := &MockRegistryHelper{}
|
|
|
+ registryHelper.On(getAllCredentials).Return(registry("index.docker.io", userPwdCreds("toto", "pwd")), nil)
|
|
|
|
|
|
- creds, err := getRegistryCredentials(composeServices("gtardif/privateimg"), loader)
|
|
|
+ creds, err := getRegistryCredentials(composeServices("gtardif/privateimg"), registryHelper)
|
|
|
assert.NilError(t, err)
|
|
|
assert.DeepEqual(t, creds, []containerinstance.ImageRegistryCredential{
|
|
|
{
|
|
|
@@ -62,19 +64,19 @@ func TestRegistryNameWithoutProtocol(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
func TestInvalidCredentials(t *testing.T) {
|
|
|
- loader := &MockRegistryLoader{}
|
|
|
- loader.On(getAllCredentials).Return(registry("18.195.159.6:444", userPwdCreds("toto", "pwd")), nil)
|
|
|
+ registryHelper := &MockRegistryHelper{}
|
|
|
+ registryHelper.On(getAllCredentials).Return(registry("18.195.159.6:444", userPwdCreds("toto", "pwd")), nil)
|
|
|
|
|
|
- creds, err := getRegistryCredentials(composeServices("gtardif/privateimg"), loader)
|
|
|
+ creds, err := getRegistryCredentials(composeServices("gtardif/privateimg"), registryHelper)
|
|
|
assert.NilError(t, err)
|
|
|
assert.Equal(t, len(creds), 0)
|
|
|
}
|
|
|
|
|
|
func TestImageWithDotInName(t *testing.T) {
|
|
|
- loader := &MockRegistryLoader{}
|
|
|
- loader.On(getAllCredentials).Return(registry("index.docker.io", userPwdCreds("toto", "pwd")), nil)
|
|
|
+ registryHelper := &MockRegistryHelper{}
|
|
|
+ registryHelper.On(getAllCredentials).Return(registry("index.docker.io", userPwdCreds("toto", "pwd")), nil)
|
|
|
|
|
|
- creds, err := getRegistryCredentials(composeServices("my.image"), loader)
|
|
|
+ creds, err := getRegistryCredentials(composeServices("my.image"), registryHelper)
|
|
|
assert.NilError(t, err)
|
|
|
assert.DeepEqual(t, creds, []containerinstance.ImageRegistryCredential{
|
|
|
{
|
|
|
@@ -86,10 +88,11 @@ func TestImageWithDotInName(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
func TestAcrPrivateImage(t *testing.T) {
|
|
|
- loader := &MockRegistryLoader{}
|
|
|
- loader.On(getAllCredentials).Return(registry("https://mycontainerregistrygta.azurecr.io", tokenCreds("123456")), nil)
|
|
|
+ registryHelper := &MockRegistryHelper{}
|
|
|
+ registryHelper.On(getAllCredentials).Return(registry("https://mycontainerregistrygta.azurecr.io", tokenCreds("123456")), nil)
|
|
|
+ registryHelper.On(autoLoginAcr, "mycontainerregistrygta.azurecr.io").Return(nil)
|
|
|
|
|
|
- creds, err := getRegistryCredentials(composeServices("mycontainerregistrygta.azurecr.io/privateimg"), loader)
|
|
|
+ creds, err := getRegistryCredentials(composeServices("mycontainerregistrygta.azurecr.io/privateimg"), registryHelper)
|
|
|
assert.NilError(t, err)
|
|
|
assert.DeepEqual(t, creds, []containerinstance.ImageRegistryCredential{
|
|
|
{
|
|
|
@@ -101,12 +104,13 @@ func TestAcrPrivateImage(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
func TestAcrPrivateImageLinux(t *testing.T) {
|
|
|
- loader := &MockRegistryLoader{}
|
|
|
+ registryHelper := &MockRegistryHelper{}
|
|
|
token := tokenCreds("123456")
|
|
|
token.Username = tokenUsername
|
|
|
- loader.On(getAllCredentials).Return(registry("https://mycontainerregistrygta.azurecr.io", token), nil)
|
|
|
+ registryHelper.On(getAllCredentials).Return(registry("https://mycontainerregistrygta.azurecr.io", token), nil)
|
|
|
+ registryHelper.On(autoLoginAcr, "mycontainerregistrygta.azurecr.io").Return(nil)
|
|
|
|
|
|
- creds, err := getRegistryCredentials(composeServices("mycontainerregistrygta.azurecr.io/privateimg"), loader)
|
|
|
+ creds, err := getRegistryCredentials(composeServices("mycontainerregistrygta.azurecr.io/privateimg"), registryHelper)
|
|
|
assert.NilError(t, err)
|
|
|
assert.DeepEqual(t, creds, []containerinstance.ImageRegistryCredential{
|
|
|
{
|
|
|
@@ -118,14 +122,15 @@ func TestAcrPrivateImageLinux(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
func TestNoMoreRegistriesThanImages(t *testing.T) {
|
|
|
- loader := &MockRegistryLoader{}
|
|
|
+ registryHelper := &MockRegistryHelper{}
|
|
|
configs := map[string]cliconfigtypes.AuthConfig{
|
|
|
"https://mycontainerregistrygta.azurecr.io": tokenCreds("123456"),
|
|
|
"https://index.docker.io": userPwdCreds("toto", "pwd"),
|
|
|
}
|
|
|
- loader.On(getAllCredentials).Return(configs, nil)
|
|
|
+ registryHelper.On(getAllCredentials).Return(configs, nil)
|
|
|
+ registryHelper.On(autoLoginAcr, "mycontainerregistrygta.azurecr.io").Return(nil)
|
|
|
|
|
|
- creds, err := getRegistryCredentials(composeServices("mycontainerregistrygta.azurecr.io/privateimg"), loader)
|
|
|
+ creds, err := getRegistryCredentials(composeServices("mycontainerregistrygta.azurecr.io/privateimg"), registryHelper)
|
|
|
assert.NilError(t, err)
|
|
|
assert.DeepEqual(t, creds, []containerinstance.ImageRegistryCredential{
|
|
|
{
|
|
|
@@ -135,7 +140,7 @@ func TestNoMoreRegistriesThanImages(t *testing.T) {
|
|
|
},
|
|
|
})
|
|
|
|
|
|
- creds, err = getRegistryCredentials(composeServices("someuser/privateimg"), loader)
|
|
|
+ creds, err = getRegistryCredentials(composeServices("someuser/privateimg"), registryHelper)
|
|
|
assert.NilError(t, err)
|
|
|
assert.DeepEqual(t, creds, []containerinstance.ImageRegistryCredential{
|
|
|
{
|
|
|
@@ -147,7 +152,7 @@ func TestNoMoreRegistriesThanImages(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
func TestHubAndSeveralACRRegistries(t *testing.T) {
|
|
|
- loader := &MockRegistryLoader{}
|
|
|
+ registryHelper := &MockRegistryHelper{}
|
|
|
configs := map[string]cliconfigtypes.AuthConfig{
|
|
|
"https://mycontainerregistry1.azurecr.io": tokenCreds("123456"),
|
|
|
"https://mycontainerregistry2.azurecr.io": tokenCreds("456789"),
|
|
|
@@ -155,9 +160,11 @@ func TestHubAndSeveralACRRegistries(t *testing.T) {
|
|
|
"https://index.docker.io": userPwdCreds("toto", "pwd"),
|
|
|
"https://other.registry.io": userPwdCreds("user", "password"),
|
|
|
}
|
|
|
- loader.On(getAllCredentials).Return(configs, nil)
|
|
|
+ registryHelper.On(getAllCredentials).Return(configs, nil)
|
|
|
+ registryHelper.On(autoLoginAcr, "mycontainerregistry1.azurecr.io").Return(nil)
|
|
|
+ registryHelper.On(autoLoginAcr, "mycontainerregistry2.azurecr.io").Return(nil)
|
|
|
|
|
|
- creds, err := getRegistryCredentials(composeServices("mycontainerregistry1.azurecr.io/privateimg", "someuser/privateImg2", "mycontainerregistry2.azurecr.io/privateimg"), loader)
|
|
|
+ creds, err := getRegistryCredentials(composeServices("mycontainerregistry1.azurecr.io/privateimg", "someuser/privateImg2", "mycontainerregistry2.azurecr.io/privateimg"), registryHelper)
|
|
|
assert.NilError(t, err)
|
|
|
|
|
|
assert.Assert(t, is.Contains(creds, containerinstance.ImageRegistryCredential{
|
|
|
@@ -177,6 +184,35 @@ func TestHubAndSeveralACRRegistries(t *testing.T) {
|
|
|
}))
|
|
|
}
|
|
|
|
|
|
+func TestIgnoreACRRegistryFailedAutoLogin(t *testing.T) {
|
|
|
+ registryHelper := &MockRegistryHelper{}
|
|
|
+ configs := map[string]cliconfigtypes.AuthConfig{
|
|
|
+ "https://mycontainerregistry1.azurecr.io": tokenCreds("123456"),
|
|
|
+ "https://mycontainerregistry3.azurecr.io": tokenCreds("123456789"),
|
|
|
+ "https://index.docker.io": userPwdCreds("toto", "pwd"),
|
|
|
+ "https://other.registry.io": userPwdCreds("user", "password"),
|
|
|
+ }
|
|
|
+ registryHelper.On(getAllCredentials).Return(configs, nil)
|
|
|
+ registryHelper.On(autoLoginAcr, "mycontainerregistry1.azurecr.io").Return(nil)
|
|
|
+ registryHelper.On(autoLoginAcr, "mycontainerregistry2.azurecr.io").Return(errors.New("could not login"))
|
|
|
+
|
|
|
+ creds, err := getRegistryCredentials(composeServices("mycontainerregistry1.azurecr.io/privateimg", "someuser/privateImg2", "mycontainerregistry2.azurecr.io/privateimg"), registryHelper)
|
|
|
+ assert.NilError(t, err)
|
|
|
+ assert.Equal(t, len(creds), 2)
|
|
|
+
|
|
|
+ assert.Assert(t, is.Contains(creds, containerinstance.ImageRegistryCredential{
|
|
|
+ Server: to.StringPtr("mycontainerregistry1.azurecr.io"),
|
|
|
+ Username: to.StringPtr(tokenUsername),
|
|
|
+ Password: to.StringPtr("123456"),
|
|
|
+ }))
|
|
|
+
|
|
|
+ assert.Assert(t, is.Contains(creds, containerinstance.ImageRegistryCredential{
|
|
|
+ Server: to.StringPtr(dockerHub),
|
|
|
+ Username: to.StringPtr("toto"),
|
|
|
+ Password: to.StringPtr("pwd"),
|
|
|
+ }))
|
|
|
+}
|
|
|
+
|
|
|
func composeServices(images ...string) types.Project {
|
|
|
var services []types.ServiceConfig
|
|
|
for index, name := range images {
|
|
|
@@ -210,11 +246,16 @@ func tokenCreds(token string) cliconfigtypes.AuthConfig {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-type MockRegistryLoader struct {
|
|
|
+type MockRegistryHelper struct {
|
|
|
mock.Mock
|
|
|
}
|
|
|
|
|
|
-func (s *MockRegistryLoader) getAllRegistryCredentials() (map[string]cliconfigtypes.AuthConfig, error) {
|
|
|
+func (s *MockRegistryHelper) getAllRegistryCredentials() (map[string]cliconfigtypes.AuthConfig, error) {
|
|
|
args := s.Called()
|
|
|
return args.Get(0).(map[string]cliconfigtypes.AuthConfig), args.Error(1)
|
|
|
}
|
|
|
+
|
|
|
+func (s *MockRegistryHelper) autoLoginAcr(registry string) error {
|
|
|
+ args := s.Called(registry)
|
|
|
+ return args.Error(0)
|
|
|
+}
|