package org.arquillian.cube.servlet;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.util.List;
import org.arquillian.cube.ChangeLog;
import org.arquillian.cube.CubeController;
import org.arquillian.cube.CubeID;
import org.arquillian.cube.TopContainer;
import org.arquillian.cube.requirement.ArquillianConditionalRunner;
import org.arquillian.cube.requirement.RequiresSystemPropertyOrEnvironmentVariable;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.container.test.api.RunAsClient;
import org.jboss.arquillian.junit.InSequence;
import org.jboss.arquillian.test.api.ArquillianResource;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.junit.runner.RunWith;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.junit.Assert.assertThat;
@RunWith(ArquillianConditionalRunner.class)
@RequiresSystemPropertyOrEnvironmentVariable("docker.tomcat.host")
public class CubeControllerTest {
private static final String MANUAL_START_CUBE = "database_manual";
@Rule
public TemporaryFolder folder = new TemporaryFolder(new File("/tmp"));
@ArquillianResource
private CubeController cubeController;
@Deployment
public static WebArchive create() {
return ShrinkWrap.create(WebArchive.class).addClass(HelloWorldServlet.class);
}
/**
* This test should run in the tomcat container. This means the tomcat container is responsible
* for starting our manual test. This is ordered and runs before the test below this, which runs in the JVM
* running the maven command locally
*/
@Test
@InSequence(1)
public void should_enrich_test_with_cube_controller_in_container() {
assertThat(cubeController, notNullValue());
cubeController.create(MANUAL_START_CUBE);
cubeController.start(MANUAL_START_CUBE);
}
/**
* Ensure that as a different environment we can stop the cube controller.
*/
@Test
@InSequence(2)
@RunAsClient
public void should_enrich_test_with_cube_controller() {
assertThat(cubeController, notNullValue());
cubeController.stop(MANUAL_START_CUBE);
cubeController.destroy(MANUAL_START_CUBE);
}
@Test(expected = UnsupportedOperationException.class)
public void should_get_an_exception_when_getting_logs(@ArquillianResource CubeController cubeController,
@ArquillianResource CubeID cubeID) {
cubeController.copyLog(cubeID, false, true, true, false, -1, new ByteArrayOutputStream());
}
@Test
public void should_execute_top(@ArquillianResource CubeController cubeController, @ArquillianResource CubeID cubeID) {
TopContainer top = cubeController.top(cubeID);
assertThat(top, notNullValue());
assertThat(top.getProcesses(), notNullValue());
assertThat(top.getTitles(), notNullValue());
assertThat(top.getTitles().length > 0, is(true));
}
@Test
public void should_get_changes_on_container(@ArquillianResource CubeController cubeController,
@ArquillianResource CubeID cubeID) {
List<ChangeLog> changesOnFilesystem = cubeController.changesOnFilesystem(cubeID);
assertThat(changesOnFilesystem, notNullValue());
assertThat(changesOnFilesystem.size() > 0, is(true));
}
}