/******************************************************************************* * Copyright (c) 2015 Red Hat. * 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: * Red Hat - Initial Contribution *******************************************************************************/ package org.eclipse.linuxtools.docker.core; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.Arrays; import java.util.List; import java.util.concurrent.TimeUnit; import org.assertj.core.api.Assertions; import org.eclipse.linuxtools.docker.core.IDockerConnectionSettings.BindingType; import org.eclipse.linuxtools.internal.docker.core.DefaultDockerConnectionSettingsFinder; import org.eclipse.linuxtools.internal.docker.core.DefaultDockerConnectionStorageManager; import org.eclipse.linuxtools.internal.docker.core.DockerConnection; import org.eclipse.linuxtools.internal.docker.core.DockerContainerRefreshManager; import org.eclipse.linuxtools.internal.docker.core.TCPConnectionSettings; import org.eclipse.linuxtools.internal.docker.core.UnixSocketConnectionSettings; import org.eclipse.linuxtools.internal.docker.ui.testutils.MockDockerClientFactory; import org.eclipse.linuxtools.internal.docker.ui.testutils.MockDockerConnectionFactory; import org.eclipse.linuxtools.internal.docker.ui.testutils.MockDockerConnectionStorageManagerFactory; import org.eclipse.linuxtools.internal.docker.ui.testutils.swt.SWTUtils; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.Test; import com.spotify.docker.client.DockerClient; /** * */ public class DockerConnectionManagerTest { private final DockerConnectionManager dockerConnectionManager = DockerConnectionManager.getInstance(); private final DockerContainerRefreshManager dockerContainersRefreshManager = DockerContainerRefreshManager .getInstance(); @AfterClass public static void restoreDefaultConfig() { DockerConnectionManager.getInstance().setConnectionStorageManager(new DefaultDockerConnectionStorageManager()); } @Before @After public void reset() { dockerContainersRefreshManager.reset(); } @Test public void shouldRegisterConnectionOnRefreshContainersManager() { // given final DockerClient client = MockDockerClientFactory.build(); final DockerConnection dockerConnection = MockDockerConnectionFactory.from("Test", client) .withDefaultTCPConnectionSettings(); dockerConnectionManager .setConnectionStorageManager(MockDockerConnectionStorageManagerFactory.providing(dockerConnection)); SWTUtils.syncExec(() -> dockerConnectionManager.reloadConnections()); // when dockerConnection.getContainers(); // then Assertions.assertThat(dockerContainersRefreshManager.getConnections()).contains(dockerConnection); } @Test public void shouldUnregisterConnectionOnRefreshContainersManager() { // given final DockerClient client = MockDockerClientFactory.build(); final DockerConnection dockerConnection = MockDockerConnectionFactory.from("Test", client) .withDefaultTCPConnectionSettings(); dockerConnectionManager .setConnectionStorageManager(MockDockerConnectionStorageManagerFactory.providing(dockerConnection)); SWTUtils.syncExec(() -> dockerConnectionManager.reloadConnections()); dockerConnection.getContainers(); Assertions.assertThat(dockerContainersRefreshManager.getConnections()).contains(dockerConnection); // when SWTUtils.syncExec(() -> dockerConnectionManager.removeConnection(dockerConnection)); SWTUtils.wait(1, TimeUnit.SECONDS); // then Assertions.assertThat(!dockerContainersRefreshManager.getConnections().contains(dockerConnection)); } @Test public void testExtensionPointProvidedConnections() { DefaultDockerConnectionSettingsFinder finder = new DefaultDockerConnectionSettingsFinder(); List<IDockerConnectionSettings> settings = finder.getKnownConnectionSettings(); assertTrue(settings.size() > 0); for (IDockerConnectionSettings s : settings) { if (s instanceof TCPConnectionSettings) { TCPConnectionSettings t = (TCPConnectionSettings) s; assertThat(t.getType()).isEqualTo(BindingType.TCP_CONNECTION); assertThat(t.getHost()).isEqualTo("https://1.2.3.4:5678"); assertThat(t.getPathToCertificates()).isEqualTo("/foo/bar/baz/certs"); assertThat(t.getName()).isEqualTo("https://1.2.3.4:5678"); } else if (s instanceof UnixSocketConnectionSettings) { UnixSocketConnectionSettings t = (UnixSocketConnectionSettings) s; // skip if this is the Linux native or Docker for Mac daemon if (t.getPath().equals("unix:///var/run/docker.sock")) { continue; } assertThat(t.getType()).isEqualTo(BindingType.UNIX_SOCKET_CONNECTION); assertThat(t.getPath()).isEqualTo("unix:///foo/bar/baz/docker.sock"); assertThat(t.getName()).isEqualTo("unix:///foo/bar/baz/docker.sock"); } else { fail("Docker Connection Settings does not match a known type"); } } } public static class UnixTestConnectionProvider implements IDockerConnectionSettingsProvider { @Override public List<IDockerConnectionSettings> getConnectionSettings() { final String socketPath = "unix:///foo/bar/baz/docker.sock"; UnixSocketConnectionSettings unix = new UnixSocketConnectionSettings(socketPath); unix.setName(socketPath); return Arrays.asList(unix); } } public static class TCPTestConnectionProvider implements IDockerConnectionSettingsProvider { @Override public List<IDockerConnectionSettings> getConnectionSettings() { final String tcpHost = "https://1.2.3.4:5678"; final String tcpCertPath = "/foo/bar/baz/certs"; TCPConnectionSettings tcp = new TCPConnectionSettings(tcpHost, tcpCertPath); tcp.setName(tcpHost); return Arrays.asList(tcp); } } }