/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.plugin.docker.client;
import org.eclipse.che.dto.server.DtoFactory;
import org.eclipse.che.plugin.docker.client.dto.AuthConfig;
import org.eclipse.che.plugin.docker.client.dto.AuthConfigs;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.testng.MockitoTestNGListener;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
import static org.mockito.Mockito.when;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
/**
* @author Mykola Morhun
*/
@Listeners(MockitoTestNGListener.class)
public class DockerRegistryAuthResolverTest {
private static final String INITIAL_REGISTRY1_URL = "test.registry.com:5050";
private static final String INITIAL_REGISTRY2_URL = "some.reg:1234";
private static final String INITIAL_REGISTRY3_URL = "somehost:4567";
private static final String INITIAL_REGISTRY1_USERNAME = "user1";
private static final String INITIAL_REGISTRY2_USERNAME = "login2";
private static final String INITIAL_REGISTRY3_USERNAME = "username1234";
private static final String INITIAL_REGISTRY1_PASSWORD = "1234";
private static final String INITIAL_REGISTRY2_PASSWORD = "abcd";
private static final String INITIAL_REGISTRY3_PASSWORD = "a1b2c3d4";
private static final String INITIAL_REGISTRY1_X_REGISTRY_AUTH_HEADER_VALUE = "{\"username\":\"user1\",\"password\":\"1234\"}";
private static final String INITIAL_REGISTRY2_X_REGISTRY_AUTH_HEADER_VALUE = "{\"username\":\"login2\",\"password\":\"abcd\"}";
private static final String INITIAL_REGISTRY3_X_REGISTRY_AUTH_HEADER_VALUE =
"{\"username\":\"username1234\",\"password\":\"a1b2c3d4\"}";
private static final String REGISTRY1_URL = "user.registry.com:5000";
private static final String REGISTRY2_URL = "local.registry:1234";
private static final String REGISTRY3_URL = INITIAL_REGISTRY1_URL;
private static final String REGISTRY1_USERNAME = "user";
private static final String REGISTRY2_USERNAME = "mylocallogin";
private static final String REGISTRY3_USERNAME = "usrname";
private static final String REGISTRY1_PASSWORD = "pass";
private static final String REGISTRY2_PASSWORD = "localreg";
private static final String REGISTRY3_PASSWORD = "pass1234";
private static final String REGISTRY1_X_REGISTRY_AUTH_HEADER_VALUE = "{\"username\":\"user\",\"password\":\"pass\"}";
private static final String REGISTRY2_X_REGISTRY_AUTH_HEADER_VALUE = "{\"username\":\"mylocallogin\",\"password\":\"localreg\"}";
private static final String REGISTRY3_X_REGISTRY_AUTH_HEADER_VALUE = "{\"username\":\"usrname\",\"password\":\"pass1234\"}";
private static final String REGISTRY_WITH_DYNAMIC_PASSWORD_URL = "some.registry.com:1234";
private static final String REGISTRY_WITH_DYNAMIC_PASSWORD_USERNAME = "USR";
private static final String REGISTRY_WITH_DYNAMIC_PASSWORD_PASSWORD = "<current time>";
private static final String REGISTRY_WITH_DYNAMIC_PASSWORD_AUTH_HEADER_VALUE = "{\"username\":\"USR\",\"password\":\"<current time>\"}";
private static final String INITIAL_X_AUTH_CONFIG_VALUE =
"{\"test.registry.com:5050\":{\"password\":\"1234\",\"username\":\"user1\"}," +
"\"somehost:4567\":{\"password\":\"a1b2c3d4\",\"username\":\"username1234\"}," +
"\"some.reg:1234\":{\"password\":\"abcd\",\"username\":\"login2\"}}";
private static final String CUSTOM_X_AUTH_CONFIG_VALUE =
"{\"local.registry:1234\":{\"password\":\"localreg\",\"username\":\"mylocallogin\"}," +
"\"test.registry.com:5050\":{\"password\":\"pass1234\",\"username\":\"usrname\"}," +
"\"user.registry.com:5000\":{\"password\":\"pass\",\"username\":\"user\"}}";
private static final String REGISTRY_WITH_DYNAMIC_PASSWORD_X_AUTH_CONFIG_VALUE =
"{\"some.registry.com:1234\":{\"password\":\"<current time>\",\"username\":\"USR\"}}";
private static final String X_AUTH_CONFIG_VALUE =
"{\"local.registry:1234\":{\"password\":\"localreg\",\"username\":\"mylocallogin\"}," +
"\"test.registry.com:5050\":{\"password\":\"pass1234\",\"username\":\"usrname\"}," +
"\"somehost:4567\":{\"password\":\"a1b2c3d4\",\"username\":\"username1234\"}," +
"\"some.reg:1234\":{\"password\":\"abcd\",\"username\":\"login2\"}," +
"\"user.registry.com:5000\":{\"password\":\"pass\",\"username\":\"user\"}}";
private static final String DEFAULT_REGISTRY_URL_ALIAS1 = null;
private static final String DEFAULT_REGISTRY_URL_ALIAS2 = "";
private static final String DEFAULT_REGISTRY_URL_ALIAS3 = "docker.io";
private static final String DEFAULT_REGISTRY_URL_ALIAS4 = "index.docker.io";
private static final String DEFAULT_REGISTRY_URL = "https://index.docker.io/v1/";
private static final String DEFAULT_REGISTRY_USERNAME = "dockerHubUser";
private static final String DEFAULT_REGISTRY_PASSWORD = "passwordFromDockerHubAccount";
private static final String DEFAULT_REGISTRY_X_REGISTRY_AUTH_VALUE =
"{\"username\":\"dockerHubUser\",\"password\":\"passwordFromDockerHubAccount\"}";
private static final String DEFAULT_REGISTRY_X_AUTH_CONFIG_VALUE =
"{\"https://index.docker.io/v1/\":{\"password\":\"passwordFromDockerHubAccount\",\"username\":\"dockerHubUser\"}}";
private static final String UNKNOWN_REGISTRY = "unknown.registry.com:1007";
private static final String EMPTY_JSON = "{}";
@Mock
private InitialAuthConfig initialAuthConfig;
@Mock
private DockerRegistryDynamicAuthResolver dynamicAuthResolver;
private AuthConfigs initialAuthConfigs;
private AuthConfigs customAuthConfigs;
private AuthConfigs dynamicAuthConfigs;
private AuthConfigs emptyAuthConfigs;
private AuthConfigs dockerHubAuthConfigs;
@InjectMocks
private DockerRegistryAuthResolver authResolver;
@BeforeClass
private void before() {
Map<String, AuthConfig> initialAuthConfigsMap = new HashMap<>();
initialAuthConfigsMap.put(INITIAL_REGISTRY1_URL, DtoFactory.newDto(AuthConfig.class).withUsername(INITIAL_REGISTRY1_USERNAME)
.withPassword(INITIAL_REGISTRY1_PASSWORD));
initialAuthConfigsMap.put(INITIAL_REGISTRY2_URL, DtoFactory.newDto(AuthConfig.class).withUsername(INITIAL_REGISTRY2_USERNAME)
.withPassword(INITIAL_REGISTRY2_PASSWORD));
initialAuthConfigsMap.put(INITIAL_REGISTRY3_URL, DtoFactory.newDto(AuthConfig.class).withUsername(INITIAL_REGISTRY3_USERNAME)
.withPassword(INITIAL_REGISTRY3_PASSWORD));
initialAuthConfigs = DtoFactory.newDto(AuthConfigs.class).withConfigs(initialAuthConfigsMap);
Map<String, AuthConfig> customAuthConfigsMap = new HashMap<>();
customAuthConfigsMap.put(REGISTRY1_URL, DtoFactory.newDto(AuthConfig.class).withUsername(REGISTRY1_USERNAME)
.withPassword(REGISTRY1_PASSWORD));
customAuthConfigsMap.put(REGISTRY2_URL, DtoFactory.newDto(AuthConfig.class).withUsername(REGISTRY2_USERNAME)
.withPassword(REGISTRY2_PASSWORD));
customAuthConfigsMap.put(REGISTRY3_URL, DtoFactory.newDto(AuthConfig.class).withUsername(REGISTRY3_USERNAME)
.withPassword(REGISTRY3_PASSWORD));
customAuthConfigs = DtoFactory.newDto(AuthConfigs.class).withConfigs(customAuthConfigsMap);
Map<String, AuthConfig> dynamicAuthConfigsMap = new HashMap<>();
dynamicAuthConfigsMap.put(REGISTRY_WITH_DYNAMIC_PASSWORD_URL, DtoFactory.newDto(AuthConfig.class)
.withUsername(REGISTRY_WITH_DYNAMIC_PASSWORD_USERNAME)
.withPassword(REGISTRY_WITH_DYNAMIC_PASSWORD_PASSWORD));
dynamicAuthConfigs = DtoFactory.newDto(AuthConfigs.class).withConfigs(dynamicAuthConfigsMap);
emptyAuthConfigs = DtoFactory.newDto(AuthConfigs.class).withConfigs(new HashMap<>());
Map<String, AuthConfig> dockerHubAuthConfigMap = new HashMap<>();
dockerHubAuthConfigMap.put(DEFAULT_REGISTRY_URL, DtoFactory.newDto(AuthConfig.class)
.withUsername(DEFAULT_REGISTRY_USERNAME)
.withPassword(DEFAULT_REGISTRY_PASSWORD));
dockerHubAuthConfigs = DtoFactory.newDto(AuthConfigs.class).withConfigs(dockerHubAuthConfigMap);
}
@BeforeMethod
private void setup() {
when(initialAuthConfig.getAuthConfigs()).thenReturn(initialAuthConfigs);
}
@Test
public void shouldGetXRegistryAuthHeaderValueFromInitialAuthConfigOnly1() {
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(INITIAL_REGISTRY1_URL, null);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(INITIAL_REGISTRY1_X_REGISTRY_AUTH_HEADER_VALUE));
}
@Test
public void shouldGetXRegistryAuthHeaderValueFromInitialAuthConfigOnly2() {
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(INITIAL_REGISTRY2_URL, null);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(INITIAL_REGISTRY2_X_REGISTRY_AUTH_HEADER_VALUE));
}
@Test
public void shouldGetXRegistryAuthHeaderValueFromInitialAuthConfigOnly3() {
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(INITIAL_REGISTRY3_URL, null);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(INITIAL_REGISTRY3_X_REGISTRY_AUTH_HEADER_VALUE));
}
@Test
public void shouldReturnEmptyEncodedJsonIfRegistryNotFoundInInitialAuthConfigAndCustomConfigIsNull() {
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(UNKNOWN_REGISTRY, null);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(EMPTY_JSON));
}
@Test
public void shouldGetXRegistryAuthHeaderValueFromCustomConfig1() {
when(initialAuthConfig.getAuthConfigs()).thenReturn(emptyAuthConfigs);
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(REGISTRY1_URL, customAuthConfigs);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(REGISTRY1_X_REGISTRY_AUTH_HEADER_VALUE));
}
@Test
public void shouldGetXRegistryAuthHeaderValueFromCustomConfig2() {
when(initialAuthConfig.getAuthConfigs()).thenReturn(emptyAuthConfigs);
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(REGISTRY2_URL, customAuthConfigs);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(REGISTRY2_X_REGISTRY_AUTH_HEADER_VALUE));
}
@Test
public void shouldGetXRegistryAuthHeaderValueFromCustomConfig3() {
when(initialAuthConfig.getAuthConfigs()).thenReturn(emptyAuthConfigs);
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(REGISTRY3_URL, customAuthConfigs);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(REGISTRY3_X_REGISTRY_AUTH_HEADER_VALUE));
}
@Test
public void shouldReturnEmptyEncodedJsonIfRegistryNotFoundInCustomAuthConfigAndInitialAuthConfigIsNull() {
when(initialAuthConfig.getAuthConfigs()).thenReturn(emptyAuthConfigs);
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(UNKNOWN_REGISTRY, customAuthConfigs);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(EMPTY_JSON));
}
@Test
public void shouldGetXRegistryAuthConfigFromCustomAuthConfigIfSpecifiedRegistryExistsInBothConfigs() {
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(INITIAL_REGISTRY1_URL, customAuthConfigs);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(REGISTRY3_X_REGISTRY_AUTH_HEADER_VALUE));
}
@Test
public void shouldGetXRegistryAuthConfigValue2() {
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(INITIAL_REGISTRY2_URL, customAuthConfigs);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(INITIAL_REGISTRY2_X_REGISTRY_AUTH_HEADER_VALUE));
}
@Test
public void shouldGetXRegistryAuthConfigValue3() {
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(INITIAL_REGISTRY3_URL, customAuthConfigs);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(INITIAL_REGISTRY3_X_REGISTRY_AUTH_HEADER_VALUE));
}
@Test
public void shouldGetXRegistryAuthConfigValue4() {
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(REGISTRY1_URL, customAuthConfigs);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(REGISTRY1_X_REGISTRY_AUTH_HEADER_VALUE));
}
@Test
public void shouldGetXRegistryAuthConfigValue5() {
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(REGISTRY2_URL, customAuthConfigs);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(REGISTRY2_X_REGISTRY_AUTH_HEADER_VALUE));
}
@Test
public void shouldGetXRegistryAuthConfigValue6() {
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(REGISTRY3_URL, customAuthConfigs);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(REGISTRY3_X_REGISTRY_AUTH_HEADER_VALUE));
}
@Test
public void shouldReturnEmptyEncodedJsonIfRegistryNotFound() {
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(UNKNOWN_REGISTRY, customAuthConfigs);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(EMPTY_JSON));
}
@Test
public void shouldAcceptDockerHubAlias1WhenGetXRegistryAuthValueFromInitialConfig() {
when(initialAuthConfig.getAuthConfigs()).thenReturn(dockerHubAuthConfigs);
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(DEFAULT_REGISTRY_URL_ALIAS1, null);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(DEFAULT_REGISTRY_X_REGISTRY_AUTH_VALUE));
}
@Test
public void shouldAcceptDockerHubAlias2WhenGetXRegistryAuthValueFromInitialConfig() {
when(initialAuthConfig.getAuthConfigs()).thenReturn(dockerHubAuthConfigs);
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(DEFAULT_REGISTRY_URL_ALIAS2, null);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(DEFAULT_REGISTRY_X_REGISTRY_AUTH_VALUE));
}
@Test
public void shouldAcceptDockerHubAlias3WhenGetXRegistryAuthValueFromInitialConfig() {
when(initialAuthConfig.getAuthConfigs()).thenReturn(dockerHubAuthConfigs);
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(DEFAULT_REGISTRY_URL_ALIAS3, null);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(DEFAULT_REGISTRY_X_REGISTRY_AUTH_VALUE));
}
@Test
public void shouldAcceptDockerHubAlias4WhenGetXRegistryAuthValueFromInitialConfig() {
when(initialAuthConfig.getAuthConfigs()).thenReturn(dockerHubAuthConfigs);
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(DEFAULT_REGISTRY_URL_ALIAS4, null);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(DEFAULT_REGISTRY_X_REGISTRY_AUTH_VALUE));
}
@Test
public void shouldGetXRegistryAuthValueFromInitialConfigWhenDockerHubRegistryConfiguredWithAlias1() {
AuthConfigs dockerHubAuthConfigs = modifyAuthConfigUrl(this.dockerHubAuthConfigs, DEFAULT_REGISTRY_URL, DEFAULT_REGISTRY_URL_ALIAS3);
when(initialAuthConfig.getAuthConfigs()).thenReturn(dockerHubAuthConfigs);
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(DEFAULT_REGISTRY_URL_ALIAS1, null);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(DEFAULT_REGISTRY_X_REGISTRY_AUTH_VALUE));
}
@Test
public void shouldGetXRegistryAuthValueFromInitialConfigWhenDockerHubRegistryConfiguredWithAlias2() {
AuthConfigs dockerHubAuthConfigs = modifyAuthConfigUrl(this.dockerHubAuthConfigs, DEFAULT_REGISTRY_URL, DEFAULT_REGISTRY_URL_ALIAS4);
when(initialAuthConfig.getAuthConfigs()).thenReturn(dockerHubAuthConfigs);
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(DEFAULT_REGISTRY_URL_ALIAS1, null);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(DEFAULT_REGISTRY_X_REGISTRY_AUTH_VALUE));
}
@Test
public void shouldAcceptDockerHubAlias1WhenGetXRegistryAuthValueFromCustomConfig() {
when(initialAuthConfig.getAuthConfigs()).thenReturn(emptyAuthConfigs);
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(DEFAULT_REGISTRY_URL_ALIAS1, dockerHubAuthConfigs);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(DEFAULT_REGISTRY_X_REGISTRY_AUTH_VALUE));
}
@Test
public void shouldAcceptDockerHubAlias2WhenGetXRegistryAuthValueFromCustomConfig() {
when(initialAuthConfig.getAuthConfigs()).thenReturn(emptyAuthConfigs);
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(DEFAULT_REGISTRY_URL_ALIAS2, dockerHubAuthConfigs);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(DEFAULT_REGISTRY_X_REGISTRY_AUTH_VALUE));
}
@Test
public void shouldAcceptDockerHubAlias3WhenGetXRegistryAuthValueFromCustomConfig() {
when(initialAuthConfig.getAuthConfigs()).thenReturn(emptyAuthConfigs);
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(DEFAULT_REGISTRY_URL_ALIAS3, dockerHubAuthConfigs);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(DEFAULT_REGISTRY_X_REGISTRY_AUTH_VALUE));
}
@Test
public void shouldAcceptDockerHubAlias4WhenGetXRegistryAuthValueFromCustomConfig() {
when(initialAuthConfig.getAuthConfigs()).thenReturn(emptyAuthConfigs);
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(DEFAULT_REGISTRY_URL_ALIAS4, dockerHubAuthConfigs);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(DEFAULT_REGISTRY_X_REGISTRY_AUTH_VALUE));
}
@Test
public void shouldGetXRegistryAuthValueFromCustomConfigWhenDockerHubRegistryConfiguredWithAlias1() {
AuthConfigs dockerHubAuthConfigs = modifyAuthConfigUrl(this.dockerHubAuthConfigs, DEFAULT_REGISTRY_URL, DEFAULT_REGISTRY_URL_ALIAS3);
when(initialAuthConfig.getAuthConfigs()).thenReturn(emptyAuthConfigs);
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(DEFAULT_REGISTRY_URL_ALIAS1, dockerHubAuthConfigs);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(DEFAULT_REGISTRY_X_REGISTRY_AUTH_VALUE));
}
@Test
public void shouldGetXRegistryAuthValueFromCustomConfigWhenDockerHubRegistryConfiguredWithAlias2() {
AuthConfigs dockerHubAuthConfigs = modifyAuthConfigUrl(this.dockerHubAuthConfigs, DEFAULT_REGISTRY_URL, DEFAULT_REGISTRY_URL_ALIAS4);
when(initialAuthConfig.getAuthConfigs()).thenReturn(emptyAuthConfigs);
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(DEFAULT_REGISTRY_URL_ALIAS1, dockerHubAuthConfigs);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(DEFAULT_REGISTRY_X_REGISTRY_AUTH_VALUE));
}
@Test
public void shouldGetXRegistryConfigValueFromInitialAuthConfigIfCustomAuthConfigIsNull() {
String base64HeaderValue = authResolver.getXRegistryConfigHeaderValue(null);
assertEqualsXRegistryConfigHeader(base64ToAuthConfigs(base64HeaderValue),
jsonToAuthConfigs(INITIAL_X_AUTH_CONFIG_VALUE));
}
@Test
public void shouldGetXRegistryConfigValueFromCustomAuthConfigIfInitialAuthConfigIsNull() {
when(initialAuthConfig.getAuthConfigs()).thenReturn(emptyAuthConfigs);
String base64HeaderValue = authResolver.getXRegistryConfigHeaderValue(customAuthConfigs);
assertEqualsXRegistryConfigHeader(base64ToAuthConfigs(base64HeaderValue),
jsonToAuthConfigs(CUSTOM_X_AUTH_CONFIG_VALUE));
}
@Test
public void shouldGetXRegistryConfigValue() {
String base64HeaderValue = authResolver.getXRegistryConfigHeaderValue(customAuthConfigs);
assertEqualsXRegistryConfigHeader(base64ToAuthConfigs(base64HeaderValue),
jsonToAuthConfigs(X_AUTH_CONFIG_VALUE));
}
@Test
public void shouldReplaceDockerHubAliasDockerIoToFullUrlWhenGetXRegistryConfigValueFromInitialConfig() {
when(initialAuthConfig.getAuthConfigs()).thenReturn(dockerHubAuthConfigs);
String base64HeaderValue = authResolver.getXRegistryConfigHeaderValue(null);
assertEqualsXRegistryConfigHeader(base64ToAuthConfigs(base64HeaderValue),
jsonToAuthConfigs(DEFAULT_REGISTRY_X_AUTH_CONFIG_VALUE));
}
@Test
public void shouldReplaceDockerHubAliasDockerIoToFullUrlWhenGetXRegistryConfigValueFromCustomConfig() {
when(initialAuthConfig.getAuthConfigs()).thenReturn(emptyAuthConfigs);
String base64HeaderValue = authResolver.getXRegistryConfigHeaderValue(dockerHubAuthConfigs);
assertEqualsXRegistryConfigHeader(base64ToAuthConfigs(base64HeaderValue),
jsonToAuthConfigs(DEFAULT_REGISTRY_X_AUTH_CONFIG_VALUE));
}
@Test
public void shouldGetXRegistryConfigValueFromInitialConfigWhenDockerHubRegistryConfiguredWithAlias1() {
AuthConfigs initialAuthConfigs = copyAuthConfigs(this.initialAuthConfigs);
initialAuthConfigs.getConfigs().put(DEFAULT_REGISTRY_URL_ALIAS3,
dockerHubAuthConfigs.getConfigs().get(DEFAULT_REGISTRY_URL));
when(initialAuthConfig.getAuthConfigs()).thenReturn(initialAuthConfigs);
String base64HeaderValue = authResolver.getXRegistryConfigHeaderValue(null);
assertTrue(base64ToAuthConfigs(base64HeaderValue).getConfigs().containsKey(DEFAULT_REGISTRY_URL));
}
@Test
public void shouldGetXRegistryConfigValueFromInitialConfigWhenDockerHubRegistryConfiguredWithAlias2() {
AuthConfigs initialAuthConfigs = copyAuthConfigs(this.initialAuthConfigs);
initialAuthConfigs.getConfigs().put(DEFAULT_REGISTRY_URL_ALIAS4,
dockerHubAuthConfigs.getConfigs().get(DEFAULT_REGISTRY_URL));
when(initialAuthConfig.getAuthConfigs()).thenReturn(initialAuthConfigs);
String base64HeaderValue = authResolver.getXRegistryConfigHeaderValue(null);
assertTrue(base64ToAuthConfigs(base64HeaderValue).getConfigs().containsKey(DEFAULT_REGISTRY_URL));
}
@Test
public void shouldGetXRegistryConfigValueWithDockerHubCredentialsFromCustomConfigWhenDockerHubRegistryConfiguredWithAlias1() {
AuthConfigs dockerHubAuthConfigs = copyAuthConfigs(this.dockerHubAuthConfigs);
dockerHubAuthConfigs.getConfigs().put(DEFAULT_REGISTRY_URL_ALIAS3,
dockerHubAuthConfigs.getConfigs().remove(DEFAULT_REGISTRY_URL));
String base64HeaderValue = authResolver.getXRegistryConfigHeaderValue(dockerHubAuthConfigs);
assertTrue(base64ToAuthConfigs(base64HeaderValue).getConfigs().containsKey(DEFAULT_REGISTRY_URL));
}
@Test
public void shouldGetXRegistryConfigValueWithDockerHubCredentialsFromCustomConfigWhenDockerHubRegistryConfiguredWithAlias2() {
AuthConfigs dockerHubAuthConfigs = copyAuthConfigs(this.dockerHubAuthConfigs);
dockerHubAuthConfigs.getConfigs().put(DEFAULT_REGISTRY_URL_ALIAS4,
dockerHubAuthConfigs.getConfigs().remove(DEFAULT_REGISTRY_URL));
String base64HeaderValue = authResolver.getXRegistryConfigHeaderValue(dockerHubAuthConfigs);
assertTrue(base64ToAuthConfigs(base64HeaderValue).getConfigs().containsKey(DEFAULT_REGISTRY_URL));
}
@Test
public void shouldReturnEmptyEncodedJsonIfNoRegistryConfigured() {
when(initialAuthConfig.getAuthConfigs()).thenReturn(emptyAuthConfigs);
String base64HeaderValue = authResolver.getXRegistryConfigHeaderValue(null);
assertEqualsXRegistryConfigHeader(base64ToAuthConfigs(base64HeaderValue),
jsonToAuthConfigs(EMPTY_JSON));
}
@Test
public void shouldGetXRegistryAuthHeaderValueFromDynamicConfigOnly() {
when(initialAuthConfig.getAuthConfigs()).thenReturn(emptyAuthConfigs);
when(dynamicAuthResolver.getXRegistryAuth(REGISTRY_WITH_DYNAMIC_PASSWORD_URL))
.thenReturn(dynamicAuthConfigs.getConfigs().get(REGISTRY_WITH_DYNAMIC_PASSWORD_URL));
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(REGISTRY_WITH_DYNAMIC_PASSWORD_URL, emptyAuthConfigs);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(REGISTRY_WITH_DYNAMIC_PASSWORD_AUTH_HEADER_VALUE));
}
@Test
public void shouldGetXRegistryAuthHeaderValueFromDynamicConfig() {
when(dynamicAuthResolver.getXRegistryAuth(REGISTRY_WITH_DYNAMIC_PASSWORD_URL))
.thenReturn(dynamicAuthConfigs.getConfigs().get(REGISTRY_WITH_DYNAMIC_PASSWORD_URL));
String base64HeaderValue = authResolver.getXRegistryAuthHeaderValue(REGISTRY_WITH_DYNAMIC_PASSWORD_URL, customAuthConfigs);
assertEqualsXRegistryAuthHeader(base64ToAuthConfig(base64HeaderValue),
jsonToAuthConfig(REGISTRY_WITH_DYNAMIC_PASSWORD_AUTH_HEADER_VALUE));
}
@Test
public void shouldGetXRegistryConfigValueFromDynamicAuthConfigOnly() {
when(initialAuthConfig.getAuthConfigs()).thenReturn(emptyAuthConfigs);
when(dynamicAuthResolver.getXRegistryConfig()).thenReturn(dynamicAuthConfigs.getConfigs());
String base64HeaderValue = authResolver.getXRegistryConfigHeaderValue(emptyAuthConfigs);
assertEqualsXRegistryConfigHeader(base64ToAuthConfigs(base64HeaderValue),
jsonToAuthConfigs(REGISTRY_WITH_DYNAMIC_PASSWORD_X_AUTH_CONFIG_VALUE));
}
@Test
public void shouldGetBasicAuthHeaderValueFromInitialConfig() {
assertEquals(authResolver.getBasicAuthHeaderValue(INITIAL_REGISTRY2_URL, null),
"Basic " + Base64.getEncoder()
.encodeToString((INITIAL_REGISTRY2_USERNAME + ':' + INITIAL_REGISTRY2_PASSWORD).getBytes()));
}
@Test
public void shouldGetBasicAuthHeaderValueFromCustomConfig() {
assertEquals(authResolver.getBasicAuthHeaderValue(REGISTRY2_URL, customAuthConfigs),
"Basic " + Base64.getEncoder().encodeToString((REGISTRY2_USERNAME + ':' + REGISTRY2_PASSWORD).getBytes()));
}
@Test
public void shouldGetBasicAuthHeaderValueFromDynamicConfig() {
when(dynamicAuthResolver.getXRegistryAuth(REGISTRY_WITH_DYNAMIC_PASSWORD_URL))
.thenReturn(dynamicAuthConfigs.getConfigs().get(REGISTRY_WITH_DYNAMIC_PASSWORD_URL));
assertEquals(authResolver.getBasicAuthHeaderValue(REGISTRY_WITH_DYNAMIC_PASSWORD_URL, customAuthConfigs),
"Basic " + Base64.getEncoder().encodeToString((REGISTRY_WITH_DYNAMIC_PASSWORD_USERNAME + ':' +
REGISTRY_WITH_DYNAMIC_PASSWORD_PASSWORD).getBytes()));
}
@Test
public void shouldReturnEmptyStringIfRegistryNotConfigured() {
assertEquals(authResolver.getBasicAuthHeaderValue("unconfigured.registry.com:5000", customAuthConfigs), "");
}
private AuthConfig base64ToAuthConfig(String base64decodedJson) {
return jsonToAuthConfig(new String(Base64.getDecoder().decode(base64decodedJson.getBytes())));
}
private AuthConfig jsonToAuthConfig(String json) {
return DtoFactory.getInstance().createDtoFromJson(json, AuthConfig.class);
}
private void assertEqualsXRegistryAuthHeader(AuthConfig actual, AuthConfig expected) {
assertEquals(actual.getUsername(), expected.getUsername());
assertEquals(actual.getPassword(), expected.getPassword());
}
private AuthConfigs base64ToAuthConfigs(String base64decodedJson) {
return jsonToAuthConfigs(new String(Base64.getDecoder().decode(base64decodedJson.getBytes())));
}
private AuthConfigs jsonToAuthConfigs(String json) {
return DtoFactory.getInstance().createDtoFromJson("{\"configs\":" + json + '}', AuthConfigs.class);
}
private void assertEqualsXRegistryConfigHeader(AuthConfigs actual, AuthConfigs expected) {
assertEquals(actual.getConfigs(), expected.getConfigs());
}
private AuthConfigs copyAuthConfigs(AuthConfigs origin) {
Map<String, AuthConfig> authConfigMap = new HashMap<>(origin.getConfigs());
return DtoFactory.newDto(AuthConfigs.class).withConfigs(authConfigMap);
}
private AuthConfigs modifyAuthConfigUrl(AuthConfigs authConfigs, String oldKey, String newKey) {
Map<String, AuthConfig> authConfigMap = new HashMap<>(authConfigs.getConfigs());
authConfigMap.put(newKey, authConfigMap.remove(oldKey));
return DtoFactory.newDto(AuthConfigs.class).withConfigs(authConfigMap);
}
}