/*
* 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.services.rest.tests;
import com.spotify.docker.client.DockerException;
import javax.inject.Inject;
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.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.ProviderId;
import org.guvnor.ala.runtime.providers.ProviderType;
import org.guvnor.ala.services.api.RuntimeProvisioningService;
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.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;
/**
* Test that shows how to work with the Runtime Provisioning Service
*/
@RunWith( Arquillian.class )
public class RestRuntimeProvisioningImplTest {
@Inject
private RuntimeProvisioningService runtimeService;
@Deployment()
public static Archive createDeployment() throws Exception {
JavaArchive deployment = ShrinkWrap.create( JavaArchive.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( 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.addAsManifestResource( EmptyAsset.INSTANCE, "beans.xml" );
return deployment;
}
@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 );
assertNotNull( p.getId() );
assertNotNull( p.getProviderType() );
assertNotNull( p.getConfig() );
DockerRuntimeConfig dockerRuntimeConfiguration = new DockerRuntimeConfig() {
@Override
public String getImage() {
return "kitematic/hello-world-nginx";
}
@Override
public String getPort() {
return "8080";
}
@Override
public boolean isPull() {
return true;
}
@Override
public ProviderId getProviderId() {
return p;
}
};
String newRuntime = runtimeService.newRuntime( dockerRuntimeConfiguration );
assertNotNull( newRuntime );
RuntimeList allRuntimes = runtimeService.getRuntimes(0, 10, "", true);
assertEquals( 1, allRuntimes.getItems().size() );
runtimeService.destroyRuntime( newRuntime );
allRuntimes = runtimeService.getRuntimes(0, 10, "", true);
assertEquals( 0, allRuntimes.getItems().size() );
}
}