/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
*
* 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 org.guvnor.ala.wildfly.executor.tests;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import org.junit.Test;
import org.guvnor.ala.build.maven.config.MavenBuildConfig;
import org.guvnor.ala.build.maven.config.MavenBuildExecConfig;
import org.guvnor.ala.build.maven.config.MavenProjectConfig;
import org.guvnor.ala.build.maven.executor.MavenBuildConfigExecutor;
import org.guvnor.ala.build.maven.executor.MavenBuildExecConfigExecutor;
import org.guvnor.ala.build.maven.executor.MavenProjectConfigExecutor;
import org.guvnor.ala.config.BinaryConfig;
import org.guvnor.ala.config.BuildConfig;
import org.guvnor.ala.config.ProjectConfig;
import org.guvnor.ala.config.ProviderConfig;
import org.guvnor.ala.config.RuntimeConfig;
import org.guvnor.ala.config.SourceConfig;
import org.guvnor.ala.pipeline.Input;
import org.guvnor.ala.pipeline.Pipeline;
import org.guvnor.ala.pipeline.PipelineFactory;
import org.guvnor.ala.pipeline.Stage;
import org.guvnor.ala.pipeline.execution.PipelineExecutor;
import org.guvnor.ala.registry.BuildRegistry;
import org.guvnor.ala.registry.SourceRegistry;
import org.guvnor.ala.registry.local.InMemoryBuildRegistry;
import org.guvnor.ala.registry.local.InMemoryRuntimeRegistry;
import org.guvnor.ala.registry.local.InMemorySourceRegistry;
import org.guvnor.ala.runtime.Runtime;
import org.guvnor.ala.source.git.config.GitConfig;
import org.guvnor.ala.source.git.executor.GitConfigExecutor;
import static java.util.Arrays.*;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.arquillian.cube.CubeController;
import org.arquillian.cube.HostIp;
import org.arquillian.cube.requirement.ArquillianConditionalRunner;
import static org.guvnor.ala.pipeline.StageUtil.*;
import org.guvnor.ala.wildfly.access.WildflyAccessInterface;
import org.guvnor.ala.wildfly.access.impl.WildflyAccessInterfaceImpl;
import org.guvnor.ala.wildfly.config.impl.ContextAwareWildflyRuntimeExecConfig;
import org.guvnor.ala.wildfly.config.WildflyProviderConfig;
import org.guvnor.ala.wildfly.executor.WildflyProviderConfigExecutor;
import org.guvnor.ala.wildfly.executor.WildflyRuntimeExecExecutor;
import org.guvnor.ala.wildfly.model.WildflyRuntime;
import org.guvnor.ala.wildfly.service.WildflyRuntimeManager;
import org.jboss.arquillian.junit.InSequence;
import org.jboss.arquillian.test.api.ArquillianResource;
import org.junit.AfterClass;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
/**
* Test the Wildfly Provider by starting a docker image of wildfly and deploying
* an application there.
*/
@RunWith( ArquillianConditionalRunner.class )
public class WildflyExecutorTest {
private static final String CONTAINER = "swarm";
private static File tempPath;
@HostIp
private String ip;
@ArquillianResource
private CubeController cc;
@BeforeClass
public static void setUp() {
try {
tempPath = Files.createTempDirectory( "xxx" ).toFile();
} catch ( IOException e ) {
e.printStackTrace();
}
}
@AfterClass
public static void tearDown() {
FileUtils.deleteQuietly( tempPath );
}
@Test
@InSequence( 1 )
public void shouldBeAbleToCreateAndStartTest() {
cc.create( CONTAINER );
cc.start( CONTAINER );
}
@Test
@InSequence( 2 )
public void testAPI() {
final SourceRegistry sourceRegistry = new InMemorySourceRegistry();
final BuildRegistry buildRegistry = new InMemoryBuildRegistry();
final InMemoryRuntimeRegistry runtimeRegistry = new InMemoryRuntimeRegistry();
final WildflyAccessInterface wildflyAccessInterface = new WildflyAccessInterfaceImpl();
final Stage<Input, SourceConfig> sourceConfig = config( "Git Source", (s) -> new GitConfig() {
} );
final Stage<SourceConfig, ProjectConfig> projectConfig = config( "Maven Project", (s) -> new MavenProjectConfig() {
} );
final Stage<ProjectConfig, BuildConfig> buildConfig = config( "Maven Build Config", (s) -> new MavenBuildConfig() {
} );
final Stage<BuildConfig, BinaryConfig> buildExec = config( "Maven Build", (s) -> new MavenBuildExecConfig() {
} );
final Stage<BinaryConfig, ProviderConfig> providerConfig = config( "Wildfly Provider Config", (s) -> new WildflyProviderConfig() {
} );
final Stage<ProviderConfig, RuntimeConfig> runtimeExec = config( "Wildfly Runtime Exec", (s) -> new ContextAwareWildflyRuntimeExecConfig() );
final Pipeline pipe = PipelineFactory
.startFrom( sourceConfig )
.andThen( projectConfig )
.andThen( buildConfig )
.andThen( buildExec )
.andThen( providerConfig )
.andThen( runtimeExec ).buildAs( "my pipe" );
WildflyRuntimeExecExecutor wildflyRuntimeExecExecutor = new WildflyRuntimeExecExecutor( runtimeRegistry, wildflyAccessInterface );
final PipelineExecutor executor = new PipelineExecutor( asList( new GitConfigExecutor( sourceRegistry ),
new MavenProjectConfigExecutor( sourceRegistry ),
new MavenBuildConfigExecutor(),
new MavenBuildExecConfigExecutor( buildRegistry ),
new WildflyProviderConfigExecutor( runtimeRegistry ),
wildflyRuntimeExecExecutor ) );
executor.execute( new Input() {
{
put( "repo-name", "drools-workshop" );
put( "create-repo", "true" );
put( "branch", "master" );
put( "out-dir", tempPath.getAbsolutePath() );
put( "origin", "https://github.com/salaboy/drools-workshop" );
put( "project-dir", "drools-webapp-example" );
put( "wildfly-user", "admin" );
put( "wildfly-password", "Admin#70365" );
put( "host", ip );
put( "port", "8080" );
put( "management-port", "9990" );
}
}, pipe, System.out::println );
List<Runtime> allRuntimes = runtimeRegistry.getRuntimes( 0, 10, "", true );
assertEquals( 1, allRuntimes.size() );
Runtime runtime = allRuntimes.get( 0 );
assertTrue( runtime instanceof WildflyRuntime );
WildflyRuntime wildflyRuntime = ( WildflyRuntime ) runtime;
WildflyRuntimeManager runtimeManager = new WildflyRuntimeManager( runtimeRegistry, wildflyAccessInterface );
runtimeManager.start( wildflyRuntime );
allRuntimes = runtimeRegistry.getRuntimes( 0, 10, "", true );
assertEquals( 1, allRuntimes.size() );
runtime = allRuntimes.get( 0 );
assertTrue( runtime instanceof WildflyRuntime );
wildflyRuntime = ( WildflyRuntime ) runtime;
assertEquals( "Running", wildflyRuntime.getState().getState() );
runtimeManager.stop( wildflyRuntime );
allRuntimes = runtimeRegistry.getRuntimes( 0, 10, "", true );
assertEquals( 1, allRuntimes.size() );
runtime = allRuntimes.get( 0 );
assertTrue( runtime instanceof WildflyRuntime );
wildflyRuntime = ( WildflyRuntime ) runtime;
assertEquals( "NA", wildflyRuntime.getState().getState() );
wildflyRuntimeExecExecutor.destroy( wildflyRuntime );
wildflyAccessInterface.dispose();
}
@Test
@InSequence( 3 )
public void testRedeploy() {
final SourceRegistry sourceRegistry = new InMemorySourceRegistry();
final BuildRegistry buildRegistry = new InMemoryBuildRegistry();
final InMemoryRuntimeRegistry runtimeRegistry = new InMemoryRuntimeRegistry();
final WildflyAccessInterface wildflyAccessInterface = new WildflyAccessInterfaceImpl();
final Stage<Input, SourceConfig> sourceConfig = config( "Git Source", (s) -> new GitConfig() {
} );
final Stage<SourceConfig, ProjectConfig> projectConfig = config( "Maven Project", (s) -> new MavenProjectConfig() {
} );
final Stage<ProjectConfig, BuildConfig> buildConfig = config( "Maven Build Config", (s) -> new MavenBuildConfig() {
} );
final Stage<BuildConfig, BinaryConfig> buildExec = config( "Maven Build", (s) -> new MavenBuildExecConfig() {
} );
final Stage<BinaryConfig, ProviderConfig> providerConfig = config( "Wildfly Provider Config", (s) -> new WildflyProviderConfig() {
} );
final Stage<ProviderConfig, RuntimeConfig> runtimeExec = config( "Wildfly Runtime Exec", (s) -> new ContextAwareWildflyRuntimeExecConfig() );
final Pipeline pipe = PipelineFactory
.startFrom( sourceConfig )
.andThen( projectConfig )
.andThen( buildConfig )
.andThen( buildExec )
.andThen( providerConfig )
.andThen( runtimeExec ).buildAs( "my pipe" );
WildflyRuntimeExecExecutor wildflyRuntimeExecExecutor = new WildflyRuntimeExecExecutor( runtimeRegistry, wildflyAccessInterface );
final PipelineExecutor executor = new PipelineExecutor( asList( new GitConfigExecutor( sourceRegistry ),
new MavenProjectConfigExecutor( sourceRegistry ),
new MavenBuildConfigExecutor(),
new MavenBuildExecConfigExecutor( buildRegistry ),
new WildflyProviderConfigExecutor( runtimeRegistry ),
wildflyRuntimeExecExecutor ) );
executor.execute( new Input() {
{
put( "repo-name", "drools-workshop" );
put( "branch", "master" );
put( "origin", "https://github.com/salaboy/drools-workshop" );
put( "project-dir", "drools-webapp-example" );
put( "wildfly-user", "admin" );
put( "wildfly-password", "Admin#70365" );
put( "host", ip );
put( "port", "8080" );
put( "management-port", "9990" );
}
}, pipe, System.out::println );
List<Runtime> allRuntimes = runtimeRegistry.getRuntimes( 0, 10, "", true );
assertEquals( 1, allRuntimes.size() );
Runtime runtime = allRuntimes.get( 0 );
assertTrue( runtime instanceof WildflyRuntime );
WildflyRuntime wildflyRuntime = ( WildflyRuntime ) runtime;
WildflyRuntimeManager runtimeManager = new WildflyRuntimeManager( runtimeRegistry, wildflyAccessInterface );
runtimeManager.start( wildflyRuntime );
allRuntimes = runtimeRegistry.getRuntimes( 0, 10, "", true );
assertEquals( 1, allRuntimes.size() );
runtime = allRuntimes.get( 0 );
assertTrue( runtime instanceof WildflyRuntime );
wildflyRuntime = ( WildflyRuntime ) runtime;
assertEquals( "Running", wildflyRuntime.getState().getState() );
runtimeManager.stop( wildflyRuntime );
allRuntimes = runtimeRegistry.getRuntimes( 0, 10, "", true );
assertEquals( 1, allRuntimes.size() );
runtime = allRuntimes.get( 0 );
assertTrue( runtime instanceof WildflyRuntime );
wildflyRuntime = ( WildflyRuntime ) runtime;
assertEquals( "NA", wildflyRuntime.getState().getState() );
wildflyRuntimeExecExecutor.destroy( wildflyRuntime );
wildflyAccessInterface.dispose();
}
@Test
@InSequence( 4 )
public void shouldBeAbleToStopAndDestroyTest() {
cc.stop( CONTAINER );
cc.destroy( CONTAINER );
}
}