/*-
* -\-\-
* docker-client
* --
* Copyright (C) 2016 Spotify AB
* --
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* -/-/-
*/
package com.spotify.docker.client.messages;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;
import com.google.common.io.Resources;
import com.spotify.docker.client.OsUtils;
import java.io.FileNotFoundException;
import java.net.URL;
import java.nio.file.Path;
import java.nio.file.Paths;
import org.apache.commons.lang.RandomStringUtils;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
public class RegistryAuthTest {
private static final RegistryAuth DOCKER_AUTH_CONFIG = RegistryAuth.builder()
.serverAddress("https://index.docker.io/v1/")
.username("dockerman")
.password("sw4gy0lo")
.email("dockerman@hub.com")
.build();
private static final RegistryAuth MY_AUTH_CONFIG = RegistryAuth.builder()
.serverAddress("https://narnia.mydock.io/v1/")
.username("megaman")
.password("riffraff")
.email("megaman@mydock.com")
.build();
private static final RegistryAuth IDENTITY_TOKEN_AUTH_CONFIG = RegistryAuth.builder()
.serverAddress("docker.customdomain.com")
.identityToken("52ce5fd5-eb60-42bf-931f-5eeec128211a")
.build();
private static final RegistryAuth EMPTY_AUTH_CONFIG = RegistryAuth.builder().build();
@Rule
public ExpectedException expectedException = ExpectedException.none();
@Test
public void testFromDockerConfig_FullConfig() throws Exception {
final RegistryAuth registryAuth = RegistryAuth.fromDockerConfig(getTestFilePath(
"dockerConfig/fullConfig.json")).build();
assertThat(registryAuth, equalTo(DOCKER_AUTH_CONFIG));
}
@Test
public void testFromDockerConfig_FullDockerCfg() throws Exception {
final RegistryAuth registryAuth = RegistryAuth.fromDockerConfig(getTestFilePath(
"dockerConfig/fullDockerCfg")).build();
assertThat(registryAuth, equalTo(DOCKER_AUTH_CONFIG));
}
@Test
public void testFromDockerConfig_IdentityToken() throws Exception {
final RegistryAuth authConfig = RegistryAuth.fromDockerConfig(getTestFilePath(
"dockerConfig/identityTokenConfig.json")).build();
assertThat(authConfig, equalTo(IDENTITY_TOKEN_AUTH_CONFIG));
}
@Test
public void testFromDockerConfig_IncompleteConfig() throws Exception {
final RegistryAuth registryAuth = RegistryAuth.fromDockerConfig(getTestFilePath(
"dockerConfig/incompleteConfig.json")).build();
assertThat(registryAuth, equalTo(EMPTY_AUTH_CONFIG));
}
@Test
public void testFromDockerConfig_WrongConfigs() throws Exception {
final RegistryAuth registryAuth1 = RegistryAuth.fromDockerConfig(getTestFilePath(
"dockerConfig/wrongConfig1.json")).build();
assertThat(registryAuth1, equalTo(EMPTY_AUTH_CONFIG));
final RegistryAuth registryAuth2 = RegistryAuth.fromDockerConfig(getTestFilePath(
"dockerConfig/wrongConfig2.json")).build();
assertThat(registryAuth2, equalTo(EMPTY_AUTH_CONFIG));
}
@Test
public void testFromDockerConfig_MissingConfigFile() throws Exception {
final Path randomPath = Paths.get(RandomStringUtils.randomAlphanumeric(16) + ".json");
expectedException.expect(FileNotFoundException.class);
RegistryAuth.fromDockerConfig(randomPath).build();
}
@Test
public void testFromDockerConfig_MultiConfig() throws Exception {
final RegistryAuth myDockParsed = RegistryAuth.fromDockerConfig(getTestFilePath(
"dockerConfig/multiConfig.json"), "https://narnia.mydock.io/v1/").build();
assertThat(myDockParsed, equalTo(MY_AUTH_CONFIG));
final RegistryAuth dockerIoParsed = RegistryAuth.fromDockerConfig(getTestFilePath(
"dockerConfig/multiConfig.json"), "https://index.docker.io/v1/").build();
assertThat(dockerIoParsed, equalTo(DOCKER_AUTH_CONFIG));
}
private static Path getTestFilePath(final String path) {
if (OsUtils.isLinux() || OsUtils.isOsX()) {
return getLinuxPath(path);
} else {
return getWindowsPath(path);
}
}
private static Path getWindowsPath(final String path) {
final URL resource = RegistryAuthTest.class.getResource("/" + path);
return Paths.get(resource.getPath().substring(1));
}
private static Path getLinuxPath(final String path) {
return Paths.get(Resources.getResource(path).getPath());
}
}