/*******************************************************************************
* Copyright (c) 2012-2016 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 com.google.common.io.CharStreams;
import org.eclipse.che.plugin.docker.client.connection.CloseConnectionInputStream;
import org.eclipse.che.plugin.docker.client.connection.DockerConnection;
import org.eclipse.che.plugin.docker.client.connection.DockerConnectionFactory;
import org.eclipse.che.plugin.docker.client.connection.DockerResponse;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.testng.MockitoTestNGListener;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URI;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.anyVararg;
import static org.mockito.Mockito.when;
/**
* @author Anton Korneta
*/
@Listeners(MockitoTestNGListener.class)
public class DockerConnectorTest {
@Mock
private DockerConnectorConfiguration dockerConnectorConfiguration;
@Mock
private DockerConnectionFactory dockerConnectionFactory;
@InjectMocks
private DockerConnector dockerConnector;
@Mock
private DockerConnection dockerConnection;
@Mock
private DockerResponse dockerResponse;
@BeforeMethod
public void setup() throws IOException {
when(dockerConnectionFactory.openConnection(any(URI.class))).thenReturn(dockerConnection);
when(dockerConnection.method(any())).thenReturn(dockerConnection);
when(dockerConnection.entity(any(InputStream.class))).thenReturn(dockerConnection);
when(dockerConnection.headers(any())).thenReturn(dockerConnection);
when(dockerConnection.query(any(), anyVararg())).thenReturn(dockerConnection);
when(dockerConnection.path(anyString())).thenReturn(dockerConnection);
when(dockerConnection.request()).thenReturn(dockerResponse);
}
@Test
public void shouldGetResourcesFromContainer() throws IOException {
String resource = "stream data";
when(dockerResponse.getStatus()).thenReturn(200);
when(dockerResponse.getInputStream())
.thenReturn(new CloseConnectionInputStream(new ByteArrayInputStream(resource.getBytes()), dockerConnection));
String response = CharStreams.toString(new InputStreamReader(dockerConnector.getResource("id", "path")));
Assert.assertEquals(response, resource);
}
@Test(expectedExceptions = IOException.class, expectedExceptionsMessageRegExp = "Error response from docker API, status: 500, message: Error")
public void shouldProduceAnErrorWhenGetsResourcesFromContainer() throws IOException {
String msg = "Error";
when(dockerResponse.getStatus()).thenReturn(500);
when(dockerResponse.getInputStream())
.thenReturn(new CloseConnectionInputStream(new ByteArrayInputStream(msg.getBytes()), dockerConnection));
dockerConnector.getResource("id", "path");
}
@Test
public void shouldPutResourcesIntoContainer() throws IOException {
String file = "stream data";
when(dockerResponse.getStatus()).thenReturn(200);
InputStream source = new CloseConnectionInputStream(new ByteArrayInputStream(file.getBytes()), dockerConnection);
dockerConnector.putResource("id", "path", source, false);
}
@Test(expectedExceptions = IOException.class, expectedExceptionsMessageRegExp = "Error response from docker API, status: 500, message: Error")
public void shouldProduceAnErrorWhenPutsResourcesIntoContainer() throws IOException {
String msg = "Error";
when(dockerResponse.getStatus()).thenReturn(500);
when(dockerResponse.getInputStream())
.thenReturn(new ByteArrayInputStream(msg.getBytes()));
InputStream source = new CloseConnectionInputStream(new ByteArrayInputStream(msg.getBytes()), dockerConnection);
dockerConnector.putResource("id", "path", source, false);
}
}