/*******************************************************************************
* 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.api.core.ServerException;
import org.eclipse.che.api.user.server.PreferenceManager;
import org.eclipse.che.commons.env.EnvironmentContext;
import org.eclipse.che.commons.subject.SubjectImpl;
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.Mock;
import org.mockito.testng.MockitoTestNGListener;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
import java.util.HashMap;
import java.util.Map;
import static org.mockito.Matchers.anyObject;
import static org.mockito.Mockito.when;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
/**
* @author Mykola Morhun
*/
@Listeners(MockitoTestNGListener.class)
public class UserSpecificDockerRegistryCredentialsProviderTest {
private static final String DOCKER_REGISTRY_CREDENTIALS_KEY = "dockerCredentials";
@Mock
private PreferenceManager preferenceManager;
private UserSpecificDockerRegistryCredentialsProvider dockerCredentials;
@BeforeClass
private void before() {
dockerCredentials = new UserSpecificDockerRegistryCredentialsProvider(preferenceManager);
}
@Test
public void shouldParseCredentialsFromUserPreferences() throws ServerException {
String base64encodedCredentials = "eyJyZWdpc3RyeS5jb206NTAwMCI6eyJ1c2VybmFtZSI6ImxvZ2luIiwicGFzc3dvcmQiOiJwYXNzIn19";
setCredentialsIntoPreferences(base64encodedCredentials);
String registry = "registry.com:5000";
AuthConfig authConfig = DtoFactory.newDto(AuthConfig.class).withUsername("login").withPassword("pass");
AuthConfigs parsedAuthConfigs = dockerCredentials.getCredentials();
AuthConfig parsedAuthConfig = parsedAuthConfigs.getConfigs().get(registry);
assertNotNull(parsedAuthConfig);
assertEquals(parsedAuthConfig.getUsername(), authConfig.getUsername());
assertEquals(parsedAuthConfig.getPassword(), authConfig.getPassword());
}
@Test
public void shouldReturnNullIfDataFormatIsCorruptedInPreferences() throws ServerException {
String base64encodedCredentials = "sdJfpwJwkek59kafj239lFfkHjhek5l1";
setCredentialsIntoPreferences(base64encodedCredentials);
AuthConfigs parsedAuthConfigs = dockerCredentials.getCredentials();
assertNull(parsedAuthConfigs);
}
@Test
public void shouldReturnNullIfDataFormatIsWrong() throws ServerException {
String base64encodedCredentials = "eyJpbnZhbGlkIjoianNvbiJ9";
setCredentialsIntoPreferences(base64encodedCredentials);
AuthConfigs parsedAuthConfigs = dockerCredentials.getCredentials();
assertNull(parsedAuthConfigs);
}
@Test
public void shouldReturnConfigsWithEmptyMapIfNoCredentialsDataInUserPreferences() throws ServerException {
String base64encodedCredentials = "e30=";
setCredentialsIntoPreferences(base64encodedCredentials);
AuthConfigs parsedAuthConfigs = dockerCredentials.getCredentials();
assertEquals(parsedAuthConfigs.getConfigs().size(), 0);
}
private void setCredentialsIntoPreferences(String base64encodedCredentials) throws ServerException {
Map<String, String> preferences = new HashMap<>();
preferences.put(DOCKER_REGISTRY_CREDENTIALS_KEY, base64encodedCredentials);
EnvironmentContext.getCurrent().setSubject(new SubjectImpl("name", "id", "token1234", false));
when(preferenceManager.find(anyObject(), anyObject())).thenReturn(preferences);
}
}