package org.guvnor.ala.services.rest.tests;
import com.spotify.docker.client.DockerException;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import org.apache.commons.io.FileUtils;
import org.guvnor.ala.build.Project;
import org.guvnor.ala.build.maven.config.MavenBuildConfig;
import org.guvnor.ala.build.maven.config.MavenProjectConfig;
import org.guvnor.ala.build.maven.config.impl.MavenBuildConfigImpl;
import org.guvnor.ala.build.maven.config.impl.MavenBuildExecConfigImpl;
import org.guvnor.ala.build.maven.config.impl.MavenProjectConfigImpl;
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.BuildConfig;
import org.guvnor.ala.config.Config;
import org.guvnor.ala.config.ProjectConfig;
import org.guvnor.ala.config.ProviderConfig;
import org.guvnor.ala.docker.access.DockerAccessInterface;
import org.guvnor.ala.docker.access.impl.DockerAccessInterfaceImpl;
import org.guvnor.ala.docker.config.impl.ContextAwareDockerProvisioningConfig;
import org.guvnor.ala.docker.config.impl.ContextAwareDockerRuntimeExecConfig;
import org.guvnor.ala.docker.config.DockerProviderConfig;
import org.guvnor.ala.docker.executor.DockerProviderConfigExecutor;
import org.guvnor.ala.docker.executor.DockerRuntimeExecExecutor;
import org.guvnor.ala.docker.model.DockerProvider;
import org.guvnor.ala.docker.model.DockerProviderType;
import org.guvnor.ala.docker.model.DockerRuntime;
import org.guvnor.ala.docker.service.DockerRuntimeManager;
import org.guvnor.ala.pipeline.ConfigExecutor;
import org.guvnor.ala.pipeline.FunctionConfigExecutor;
import org.guvnor.ala.registry.RuntimeRegistry;
import org.guvnor.ala.registry.local.InMemoryRuntimeRegistry;
import org.guvnor.ala.runtime.RuntimeBuilder;
import org.guvnor.ala.runtime.RuntimeDestroyer;
import org.guvnor.ala.runtime.RuntimeManager;
import org.guvnor.ala.runtime.providers.Provider;
import org.guvnor.ala.runtime.providers.ProviderBuilder;
import org.guvnor.ala.runtime.providers.ProviderType;
import org.guvnor.ala.services.rest.RestRuntimeProvisioningServiceImpl;
import org.guvnor.ala.services.rest.factories.ProviderFactory;
import org.guvnor.ala.services.rest.factories.RuntimeFactory;
import org.guvnor.ala.services.rest.factories.RuntimeManagerFactory;
import org.guvnor.ala.wildfly.executor.WildflyProviderConfigExecutor;
import org.guvnor.ala.wildfly.model.WildflyProviderType;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
import org.uberfire.commons.lifecycle.Disposable;
import org.guvnor.ala.docker.config.DockerRuntimeConfig;
import org.guvnor.ala.docker.config.impl.DockerBuildConfigImpl;
import org.guvnor.ala.docker.config.impl.DockerProviderConfigImpl;
import org.guvnor.ala.docker.executor.DockerBuildConfigExecutor;
import org.guvnor.ala.docker.executor.DockerProvisioningConfigExecutor;
import org.guvnor.ala.pipeline.BiFunctionConfigExecutor;
import org.guvnor.ala.pipeline.Input;
import org.guvnor.ala.pipeline.execution.PipelineExecutor;
import org.guvnor.ala.registry.local.InMemoryBuildRegistry;
import org.guvnor.ala.registry.local.InMemoryPipelineRegistry;
import org.guvnor.ala.registry.local.InMemorySourceRegistry;
import org.guvnor.ala.services.api.PipelineService;
import org.guvnor.ala.services.api.RuntimeProvisioningService;
import org.guvnor.ala.services.api.backend.PipelineConfigImpl;
import org.guvnor.ala.services.api.itemlist.PipelineConfigsList;
import org.guvnor.ala.services.api.itemlist.ProviderList;
import org.guvnor.ala.services.api.itemlist.ProviderTypeList;
import org.guvnor.ala.services.api.itemlist.RuntimeList;
import org.guvnor.ala.services.rest.RestPipelineServiceImpl;
import org.guvnor.ala.source.Source;
import org.guvnor.ala.source.git.config.impl.GitConfigImpl;
import org.guvnor.ala.source.git.executor.GitConfigExecutor;
import org.junit.After;
import org.junit.Before;
/**
* Test that shows how to work with the Pipeline
*/
@RunWith( Arquillian.class )
public class RestPipelineImplTest {
@Inject
private PipelineService pipelineService;
@Inject
private RuntimeProvisioningService runtimeService;
private File tempPath;
@Inject
private MockPipelineEventListener listener;
@Deployment()
public static Archive createDeployment() throws Exception {
JavaArchive deployment = ShrinkWrap.create( JavaArchive.class );
deployment.addClass( PipelineService.class );
deployment.addClass( RestPipelineServiceImpl.class );
deployment.addClass( PipelineExecutor.class );
deployment.addClass( InMemoryPipelineRegistry.class );
deployment.addClass( InMemoryBuildRegistry.class );
deployment.addClass( InMemorySourceRegistry.class );
deployment.addClass( DockerProviderConfigExecutor.class );
deployment.addClass( WildflyProviderConfigExecutor.class );
deployment.addClass( RestRuntimeProvisioningServiceImpl.class );
deployment.addClass( RuntimeRegistry.class );
deployment.addClass( InMemoryRuntimeRegistry.class );
deployment.addClass( RuntimeRegistry.class );
deployment.addClass( ProviderFactory.class );
deployment.addClass( RuntimeFactory.class );
deployment.addClass( RuntimeManagerFactory.class );
deployment.addClass( DockerProviderType.class );
deployment.addClass( DockerProviderConfig.class );
deployment.addClass( DockerProvider.class );
deployment.addClass( WildflyProviderType.class );
deployment.addClass( ProviderBuilder.class );
deployment.addClass( ProviderType.class );
deployment.addClass( FunctionConfigExecutor.class );
deployment.addClass( ConfigExecutor.class );
deployment.addClass( ProviderConfig.class );
deployment.addClass( Provider.class );
deployment.addClass( DockerRuntimeConfig.class );
deployment.addClass( DockerRuntime.class );
deployment.addClass( RuntimeBuilder.class );
deployment.addClass( DockerRuntimeExecExecutor.class );
deployment.addClass( RuntimeDestroyer.class );
deployment.addClass( DockerAccessInterface.class );
deployment.addClass( DockerAccessInterfaceImpl.class );
deployment.addClass( Disposable.class );
deployment.addClass( DockerException.class );
deployment.addClass( DockerRuntimeManager.class );
deployment.addClass( RuntimeManager.class );
deployment.addClass( org.guvnor.ala.config.Config.class );
deployment.addClass( org.guvnor.ala.config.ProviderConfig.class );
deployment.addClass( org.guvnor.ala.docker.config.DockerProviderConfig.class );
deployment.addClass( org.guvnor.ala.docker.model.DockerProvider.class );
deployment.addClass( org.guvnor.ala.pipeline.FunctionConfigExecutor.class );
deployment.addClass( BiFunctionConfigExecutor.class );
deployment.addClass( org.guvnor.ala.registry.RuntimeRegistry.class );
deployment.addClass( org.guvnor.ala.runtime.providers.ProviderBuilder.class );
deployment.addClass( org.guvnor.ala.runtime.providers.ProviderDestroyer.class );
deployment.addClass( org.guvnor.ala.runtime.providers.ProviderId.class );
deployment.addClass( GitConfigExecutor.class );
deployment.addClass( MavenProjectConfig.class );
deployment.addClass( MavenProjectConfigExecutor.class );
deployment.addClass( Project.class );
deployment.addClass( Source.class );
deployment.addClass( ProjectConfig.class );
deployment.addClass( BuildConfig.class );
deployment.addClass( MavenBuildConfig.class );
deployment.addClass( MavenBuildConfigExecutor.class );
deployment.addClass( MavenBuildExecConfigExecutor.class );
deployment.addClass( DockerBuildConfigExecutor.class );
deployment.addClass( DockerProviderConfigExecutor.class );
deployment.addClass( DockerProvisioningConfigExecutor.class );
deployment.addClass( MockPipelineEventListener.class );
deployment.addAsManifestResource( EmptyAsset.INSTANCE, "beans.xml" );
return deployment;
}
@Before
public void setUp() throws IOException {
tempPath = Files.createTempDirectory( "xxx" ).toFile();
}
@After
public void tearDown() {
FileUtils.deleteQuietly( tempPath );
}
@Test
public void testAPI() {
ProviderTypeList allProviderTypes = runtimeService.getProviderTypes(0, 10, "", true);
assertEquals( 2, allProviderTypes.getItems().size() );
DockerProviderConfig dockerProviderConfig = new DockerProviderConfig() {
};
runtimeService.registerProvider( dockerProviderConfig );
ProviderList allProviders = runtimeService.getProviders(0, 10, "", true);
assertEquals( 1, allProviders.getItems().size() );
Provider p = allProviders.getItems().get( 0 );
assertTrue( p instanceof DockerProvider );
PipelineConfigsList allPipelineConfigs = pipelineService.getPipelineConfigs(0, 10, "", true);
assertNotNull( allPipelineConfigs );
assertEquals( 0, allPipelineConfigs.getItems().size() );
List<Config> configs = new ArrayList<>();
configs.add( new GitConfigImpl() );
configs.add( new MavenProjectConfigImpl() );
configs.add( new MavenBuildConfigImpl() );
configs.add( new DockerBuildConfigImpl() );
configs.add( new MavenBuildExecConfigImpl() );
configs.add( new DockerProviderConfigImpl() );
configs.add( new ContextAwareDockerProvisioningConfig() );
configs.add( new ContextAwareDockerRuntimeExecConfig() );
String newPipeline = pipelineService.newPipeline( new PipelineConfigImpl( "mypipe", configs ) );
allPipelineConfigs = pipelineService.getPipelineConfigs(0, 10, "", true);
assertEquals( 1, allPipelineConfigs.getItems().size() );
Input input = new Input();
input.put( "repo-name", "drools-workshop" );
input.put( "create-repo", "true" );
input.put( "branch", "master" );
input.put( "out-dir", tempPath.getAbsolutePath() );
input.put( "origin", "https://github.com/kiegroup/drools-workshop" );
input.put( "project-dir", "drools-webapp-example" );
pipelineService.runPipeline( "mypipe", input );
RuntimeList allRuntimes = runtimeService.getRuntimes(0, 10, "", true);
assertEquals( 1, allRuntimes.getItems().size() );
runtimeService.destroyRuntime( allRuntimes.getItems().get( 0 ).getId() );
allRuntimes = runtimeService.getRuntimes(0, 10, "", true);
assertEquals( 0, allRuntimes.getItems().size() );
assertEquals( 18, listener.getEvents().size() ); // 8 Stages x 2 + 2 pipeline events
}
}