/*******************************************************************************
* Copyright (c) 2013 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package com.openshift.internal.client;
import static org.fest.assertions.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.SocketTimeoutException;
import java.net.URISyntaxException;
import java.util.List;
import org.fest.assertions.Condition;
import org.junit.Before;
import org.junit.Test;
import com.openshift.client.IApplication;
import com.openshift.client.IDomain;
import com.openshift.client.IUser;
import com.openshift.client.OpenShiftEndpointException;
import com.openshift.client.OpenShiftException;
import com.openshift.client.cartridge.ICartridge;
import com.openshift.client.cartridge.IEmbeddableCartridge;
import com.openshift.client.cartridge.IEmbeddedCartridge;
import com.openshift.client.cartridge.IStandaloneCartridge;
import com.openshift.client.cartridge.query.LatestVersionOf;
import com.openshift.client.utils.ApplicationAssert;
import com.openshift.client.utils.ApplicationTestUtils;
import com.openshift.client.utils.CartridgeTestUtils;
import com.openshift.client.utils.DomainTestUtils;
import com.openshift.client.utils.EmbeddedCartridgeAssert;
import com.openshift.client.utils.EmbeddedCartridgeTestUtils;
import com.openshift.client.utils.TestConnectionBuilder;
/**
* @author André Dietisheim
*/
public class EmbeddedCartridgeResourceIntegrationTest extends TestTimer {
private IDomain domain;
private IUser user;
@Before
public void setUp() throws OpenShiftException, IOException {
this.user = new TestConnectionBuilder().defaultCredentials().disableSSLCertificateChecks().create().getUser();
this.domain = DomainTestUtils.ensureHasDomain(user);
}
@Test
public void shouldReturnEmbeddedCartridgesForApplication() throws SocketTimeoutException, OpenShiftException {
// pre-conditions
IApplication application = ApplicationTestUtils.ensureHasExactly1Application(domain);
// operation
List<IEmbeddedCartridge> embeddedCartridges = application.getEmbeddedCartridges();
// verification
assertThat(embeddedCartridges).isNotNull();
}
@Test
public void shouldNotContainTypeInEmbeddedCartridges() throws SocketTimeoutException, OpenShiftException {
// pre-conditions
final IStandaloneCartridge php = LatestVersionOf.php().get(user);
assertThat(php).isNotNull();
IApplication application = ApplicationTestUtils.ensureHasExactly1Application(php, domain);
// operation
List<IEmbeddedCartridge> embeddedCartridges = application.getEmbeddedCartridges();
// verification
assertThat(embeddedCartridges).doesNotSatisfy(new Condition<List<?>>() {
@Override
public boolean matches(List<?> values) {
for(Object value : values) {
if (!(value instanceof ICartridge)) {
continue;
}
if (php.getName().equals(((ICartridge)value).getName())) {
return true;
};
}
return false;
}
});
}
@Test
public void shouldEmbedMySQL() throws SocketTimeoutException, OpenShiftException, URISyntaxException {
// pre-conditions
IApplication application = ApplicationTestUtils.ensureHasExactly1Application(domain);
EmbeddedCartridgeTestUtils.silentlyDestroyAllEmbeddedCartridges(application);
IEmbeddableCartridge mysql = LatestVersionOf.mySQL().get(user);
assertThat(mysql).isNotNull();
assertThat(new ApplicationAssert(application)).hasNotEmbeddableCartridge(mysql);
int numOfEmbeddedCartridges = application.getEmbeddedCartridges().size();
// operation
application.addEmbeddableCartridge(mysql);
// verification
assertThat(new ApplicationAssert(application))
.hasEmbeddableCartridges(numOfEmbeddedCartridges + 1)
.hasEmbeddedCartridge(LatestVersionOf.mySQL());
}
/**
* Verify in application created with different user instance.
*/
@Test
public void shouldHaveUrlInEmbeddedMySQL() throws OpenShiftException, URISyntaxException, FileNotFoundException,
IOException {
// pre-conditions
IApplication application = ApplicationTestUtils.ensureHasExactly1Application(domain);
EmbeddedCartridgeTestUtils.ensureHasEmbeddedCartridges(LatestVersionOf.mySQL(), application);
// verify using user instance that's not the one used to create
IUser user2 = new TestConnectionBuilder().defaultCredentials().disableSSLCertificateChecks().create().getUser();
IApplication user2Application = user2.getDefaultDomain().getApplicationByName(application.getName());
assertThat(new ApplicationAssert(user2Application))
.hasEmbeddedCartridge(LatestVersionOf.mySQL());
// operation
// verification
IEmbeddableCartridge mysql =
LatestVersionOf.mySQL().get(user2);
assertThat(mysql).isNotNull();
new EmbeddedCartridgeAssert(user2Application.getEmbeddedCartridge(mysql))
.hasUrlProperty();
}
/**
* Verify in application created with different user instance.
*/
@Test
public void shouldHaveDescriptionAndDisplayNameInEmbeddedMySQL() throws OpenShiftException, URISyntaxException, FileNotFoundException,
IOException {
// pre-conditions
IApplication application = ApplicationTestUtils.ensureHasExactly1Application(domain);
EmbeddedCartridgeTestUtils.ensureHasEmbeddedCartridges(LatestVersionOf.mySQL(), application);
// verify using user instance that's not the one used to create
// operation
IEmbeddedCartridge mysql = application.getEmbeddedCartridge(LatestVersionOf.mySQL().get(user));
// verification
new EmbeddedCartridgeAssert(mysql)
.hasDescription()
.hasDisplayName();
}
@Test
public void shouldReturnThatHasMySQL() throws OpenShiftException, FileNotFoundException, IOException {
// pre-conditions
IApplication application = ApplicationTestUtils.ensureHasExactly1Application(domain);
EmbeddedCartridgeTestUtils.ensureHasEmbeddedCartridges(
LatestVersionOf.mySQL(), application);
// verify using user instance that's not the one used to create
IUser user2 = new TestConnectionBuilder().defaultCredentials().disableSSLCertificateChecks().create().getUser();
IApplication user2Application = user2.getDefaultDomain().getApplicationByName(application.getName());
EmbeddedCartridgeTestUtils.ensureHasEmbeddedCartridges(
LatestVersionOf.mySQL(), user2Application);
// operation
// verification
assertThat(new ApplicationAssert(user2Application))
.hasEmbeddedCartridge(LatestVersionOf.mySQL());
}
@Test
public void shouldEmbedPostgreSQL() throws SocketTimeoutException, OpenShiftException, URISyntaxException {
// pre-conditions
IApplication application = ApplicationTestUtils.ensureHasExactly1Application(domain);
EmbeddedCartridgeTestUtils.silentlyDestroyAllEmbeddedCartridges(application);
IEmbeddableCartridge postgres = LatestVersionOf.postgreSQL().get(user);
assertThat(new ApplicationAssert(application))
.hasNotEmbeddableCartridge(postgres);
// operation
application.addEmbeddableCartridge(postgres);
// verification
assertThat(new ApplicationAssert(application))
.hasEmbeddedCartridge(LatestVersionOf.postgreSQL());
new EmbeddedCartridgeAssert(application.getEmbeddedCartridge(postgres))
.hasUrlProperty();
}
@Test
public void shouldHaveUrlInEmbeddedPostgres() throws OpenShiftException, URISyntaxException, FileNotFoundException,
IOException {
// pre-conditions
IApplication application = ApplicationTestUtils.ensureHasExactly1Application(domain);
EmbeddedCartridgeTestUtils.ensureHasEmbeddedCartridges(
LatestVersionOf.postgreSQL(), application);
// verify using user instance that's not the one used to create
IUser user2 = new TestConnectionBuilder().defaultCredentials().disableSSLCertificateChecks().create().getUser();
IApplication user2Application = user2.getDefaultDomain().getApplicationByName(application.getName());
assertThat(new ApplicationAssert(user2Application)).hasEmbeddedCartridge(
LatestVersionOf.postgreSQL());
// operation
// verification
IEmbeddableCartridge postgres2 = LatestVersionOf.postgreSQL().get(user2);
new EmbeddedCartridgeAssert(user2Application.getEmbeddedCartridge(postgres2))
.hasUrlProperty();
}
@Test
public void shouldEmbedMongo() throws Exception {
// pre-conditions
IApplication application = ApplicationTestUtils.ensureHasExactly1Application(domain);
EmbeddedCartridgeTestUtils.silentlyDestroyAllEmbeddedCartridges(application);
IEmbeddableCartridge mongo = LatestVersionOf.mongoDB().get(user);
assertThat(new ApplicationAssert(application))
.hasNotEmbeddableCartridge(mongo);
// operation
application.addEmbeddableCartridge(LatestVersionOf.mongoDB().get(user));
// verification
assertThat(new ApplicationAssert(application)
.hasEmbeddedCartridge(LatestVersionOf.mongoDB()));
new EmbeddedCartridgeAssert(application.getEmbeddedCartridge(mongo))
.hasUrlProperty();
}
@Test
public void shouldHaveUrlInEmbeddedMongo() throws OpenShiftException, URISyntaxException, FileNotFoundException,
IOException {
// pre-conditions
IApplication jbossAs = ApplicationTestUtils.getOrCreateApplication(domain);
EmbeddedCartridgeTestUtils.silentlyDestroyAllEmbeddedCartridges(jbossAs);
// operation
jbossAs.addEmbeddableCartridge(LatestVersionOf.mongoDB().get(user));
// verification
new EmbeddedCartridgeAssert(jbossAs.getEmbeddedCartridge(LatestVersionOf.mongoDB().get(user)))
.hasUrlProperty();
// verify using user instance that's not the one used to create
IUser user2 = new TestConnectionBuilder().defaultCredentials().disableSSLCertificateChecks().create().getUser();
IApplication user2Application = user2.getDefaultDomain().getApplicationByName(jbossAs.getName());
IEmbeddableCartridge mongo = LatestVersionOf.mongoDB().get(user2);
new EmbeddedCartridgeAssert(user2Application.getEmbeddedCartridge(mongo))
.hasUrlProperty();
}
@Test
public void shouldEmbedRockMongo() throws Exception {
// pre-conditions
// have to make sure have non-scalable app without cartridges
IApplication jbossAs = ApplicationTestUtils.getOrCreateApplication(domain);
jbossAs = ApplicationTestUtils.destroyAndRecreateIfScalable(jbossAs);
EmbeddedCartridgeTestUtils.silentlyDestroyAllEmbeddedCartridges(jbossAs);
assertThat(new ApplicationAssert(jbossAs)
.hasNotEmbeddableCartridges(LatestVersionOf.mongoDB())
.hasNotEmbeddableCartridges(LatestVersionOf.rockMongo()));
// operation
jbossAs.addEmbeddableCartridge(LatestVersionOf.mongoDB().get(user));
jbossAs.addEmbeddableCartridge(LatestVersionOf.rockMongo().get(user));
// verification
assertThat(new ApplicationAssert(jbossAs)
.hasEmbeddedCartridge(LatestVersionOf.mongoDB())
.hasEmbeddedCartridge(LatestVersionOf.rockMongo()));
}
@Test
public void shouldHaveUrlInEmbeddedRockMongo()
throws OpenShiftException, URISyntaxException, FileNotFoundException, IOException {
// pre-conditions
IApplication jbossAs = ApplicationTestUtils.getOrCreateApplication(domain);
jbossAs = ApplicationTestUtils.destroyAndRecreateIfScalable(jbossAs);
EmbeddedCartridgeTestUtils.silentlyDestroyAllEmbeddedCartridges(jbossAs);
assertThat(new ApplicationAssert(jbossAs)
.hasNotEmbeddableCartridges(LatestVersionOf.mongoDB())
.hasNotEmbeddableCartridges(LatestVersionOf.rockMongo()));
// operation
jbossAs.addEmbeddableCartridge(LatestVersionOf.mongoDB().get(user));
jbossAs.addEmbeddableCartridge(LatestVersionOf.rockMongo().get(user));
// verification
IEmbeddableCartridge rockMongo = LatestVersionOf.rockMongo().get(user);
new EmbeddedCartridgeAssert(jbossAs.getEmbeddedCartridge(rockMongo))
.hasUrlProperty();
// verify using user instance that's not the one used to create
IUser user2 = new TestConnectionBuilder().defaultCredentials().disableSSLCertificateChecks().create().getUser();
IApplication user2Application = user2.getDefaultDomain().getApplicationByName(jbossAs.getName());
assertThat(new ApplicationAssert(user2Application)).hasEmbeddedCartridges(
LatestVersionOf.mongoDB(), LatestVersionOf.rockMongo());
new EmbeddedCartridgeAssert(user2Application.getEmbeddedCartridge(rockMongo))
.hasUrlProperty();
}
@Test
public void shouldEmbedPhpMyAdmin() throws Exception {
// pre-conditions
IApplication jbossAs = ApplicationTestUtils.getOrCreateApplication(domain);
jbossAs = ApplicationTestUtils.destroyAndRecreateIfScalable(jbossAs);
EmbeddedCartridgeTestUtils.silentlyDestroyAllEmbeddedCartridges(jbossAs);
assertThat(new ApplicationAssert(jbossAs)
.hasNotEmbeddableCartridges(LatestVersionOf.mySQL())
.hasNotEmbeddableCartridges(LatestVersionOf.phpMyAdmin()));
// operation
jbossAs.addEmbeddableCartridge(LatestVersionOf.mySQL().get(user));
jbossAs.addEmbeddableCartridge(LatestVersionOf.phpMyAdmin().get(user));
// verification
assertThat(new ApplicationAssert(jbossAs)
.hasEmbeddedCartridge(LatestVersionOf.mySQL()))
.hasEmbeddedCartridge(LatestVersionOf.phpMyAdmin());
}
@Test
public void shouldHaveUrlInEmbeddedPhpMyadmin()
throws OpenShiftException, URISyntaxException, FileNotFoundException, IOException {
// pre-conditions
// pre-conditions
IApplication jbossAs = ApplicationTestUtils.getOrCreateApplication(domain);
jbossAs = ApplicationTestUtils.destroyAndRecreateIfScalable(jbossAs);
EmbeddedCartridgeTestUtils.silentlyDestroyAllEmbeddedCartridges(jbossAs);
assertThat(new ApplicationAssert(jbossAs)
.hasNotEmbeddableCartridges(LatestVersionOf.mySQL())
.hasNotEmbeddableCartridges(LatestVersionOf.phpMyAdmin()));
// operation
jbossAs.addEmbeddableCartridge(LatestVersionOf.mySQL().get(user));
jbossAs.addEmbeddableCartridge(LatestVersionOf.phpMyAdmin().get(user));
// verification
IEmbeddableCartridge phpMyadmin = LatestVersionOf.phpMyAdmin().get(user);
new EmbeddedCartridgeAssert(jbossAs.getEmbeddedCartridge(phpMyadmin))
.hasUrlProperty();
// verify using user instance that's not the one used to create
IUser user2 = new TestConnectionBuilder().defaultCredentials().disableSSLCertificateChecks().create().getUser();
IApplication user2Application = user2.getDefaultDomain().getApplicationByName(jbossAs.getName());
IEmbeddableCartridge phpMyAdmin = LatestVersionOf.phpMyAdmin().get(user2);
new EmbeddedCartridgeAssert(user2Application.getEmbeddedCartridge(phpMyAdmin))
.hasUrlProperty();
}
@Test
public void shouldEmbedJenkinsClient() throws Exception {
// pre-conditions
// need 2 free gears; jenkins + builder
IApplication application = ApplicationTestUtils.ensureHasExactly1Application(domain);
EmbeddedCartridgeTestUtils.silentlyDestroyAllEmbeddedCartridges(application);
ApplicationTestUtils.createApplication(
LatestVersionOf.jenkins().get(user), domain);
// operation
application.addEmbeddableCartridge(LatestVersionOf.jenkinsClient().get(user));
// verification
assertThat(new ApplicationAssert(application)
.hasEmbeddedCartridge(LatestVersionOf.jenkinsClient()));
}
/**
* Verify in application created with different user instance.
*
* @throws SocketTimeoutException
* @throws OpenShiftException
* @throws URISyntaxException
*/
@Test
public void shouldHaveUrlInEmbeddedJenkinsClient() throws OpenShiftException, URISyntaxException,
FileNotFoundException, IOException {
// pre-conditions
IApplication jbossAs = ApplicationTestUtils.getOrCreateApplication(domain);
jbossAs = ApplicationTestUtils.destroyAndRecreateIfScalable(jbossAs);
EmbeddedCartridgeTestUtils.silentlyDestroyAllEmbeddedCartridges(jbossAs);
ApplicationTestUtils.getOrCreateApplication(domain, LatestVersionOf.jenkins().get(user));
// operation
EmbeddedCartridgeTestUtils.ensureHasEmbeddedCartridges(LatestVersionOf.jenkinsClient(), jbossAs);
// verification
new EmbeddedCartridgeAssert(jbossAs.getEmbeddedCartridge(LatestVersionOf.jenkinsClient().get(user)))
.hasUrlProperty();
// verify using user instance that's not the one used to create
IUser user2 = new TestConnectionBuilder().defaultCredentials().disableSSLCertificateChecks().create().getUser();
IApplication user2Application = user2.getDefaultDomain().getApplicationByName(jbossAs.getName());
IEmbeddableCartridge jenkinsClient =
LatestVersionOf.jenkinsClient().get(user2);
new EmbeddedCartridgeAssert(user2Application.getEmbeddedCartridge(jenkinsClient))
.hasUrlProperty();
}
@Test
public void shouldEmbedDownloadableCartridge() throws Exception {
// pre-conditions
IApplication application = ApplicationTestUtils.ensureHasExactly1Application(domain);
EmbeddedCartridgeTestUtils.silentlyDestroyAllEmbeddedCartridges(application);
assertThat(new ApplicationAssert(application))
.hasNotEmbeddableCartridge(CartridgeTestUtils.foreman063());
// operation
application.addEmbeddableCartridge(CartridgeTestUtils.foreman063());
// verification
new ApplicationAssert(application)
.hasEmbeddedCartridgeNames(CartridgeTestUtils.foreman063().getName());
}
@Test(expected = OpenShiftEndpointException.class)
public void shouldNotAddEmbeddedCartridgeTwice() throws Exception {
// pre-conditions
IApplication application = ApplicationTestUtils.ensureHasExactly1Application(domain);
EmbeddedCartridgeTestUtils.ensureHasEmbeddedCartridges(LatestVersionOf.mySQL(), application);
// operation
application.addEmbeddableCartridge(LatestVersionOf.mySQL().get(user));
}
@Test
public void shouldRemoveEmbeddedCartridge() throws Exception {
// pre-conditions
IApplication application = ApplicationTestUtils.ensureHasExactly1Application(domain);
EmbeddedCartridgeTestUtils.ensureHasEmbeddedCartridges(LatestVersionOf.mySQL(), application);
int numOfEmbeddedCartridges = application.getEmbeddedCartridges().size();
// operation
application.removeEmbeddedCartridge(LatestVersionOf.mySQL().get(user));
// verification
assertTrue(application.getEmbeddedCartridges().size() == numOfEmbeddedCartridges - 1);
assertThat(new ApplicationAssert(application))
.hasNotEmbeddableCartridge(LatestVersionOf.mySQL());
}
@Test
public void shouldNotRemoveEmbeddedCartridgeThatWasNotAdded() throws SocketTimeoutException, OpenShiftException {
// pre-conditions
IApplication application = ApplicationTestUtils.ensureHasExactly1Application(domain);
EmbeddedCartridgeTestUtils.silentlyDestroy(LatestVersionOf.mySQL(), application);
int numOfEmbeddedCartridges = application.getEmbeddedCartridges().size();
// operation
application.removeEmbeddedCartridge(LatestVersionOf.mySQL().get(user));
// verification
IEmbeddableCartridge mySql = LatestVersionOf.mySQL().get(user);
assertThat(new ApplicationAssert(application))
.hasEmbeddableCartridges(numOfEmbeddedCartridges)
.hasNotEmbeddableCartridge(mySql.getName());
}
@Test
public void shouldSeeCartridgeRemovedWithOtherUser() throws Exception {
// pre-condition
IApplication application = ApplicationTestUtils.ensureHasExactly1Application(domain);
IEmbeddableCartridge mySqlEmbeddableCartridge =
LatestVersionOf.mySQL().get(user);
EmbeddedCartridgeTestUtils.ensureHasEmbeddedCartridge(mySqlEmbeddableCartridge, application);
assertThat(new ApplicationAssert(application)
.hasEmbeddedCartridge(LatestVersionOf.mySQL()));
// operation
// use user instance that's not the one used to create
IUser user2 = new TestConnectionBuilder().defaultCredentials().disableSSLCertificateChecks().create().getUser();
IApplication user2Application = user2.getDefaultDomain().getApplicationByName(application.getName());
user2Application.removeEmbeddedCartridge(LatestVersionOf.mySQL().get(user2));
assertThat(new ApplicationAssert(user2Application)
.hasNotEmbeddableCartridges(LatestVersionOf.mySQL()));
// verification
application.refresh();
assertThat(new ApplicationAssert(application)
.hasNotEmbeddableCartridges(LatestVersionOf.mySQL()));
assertEquals(application.getEmbeddedCartridges().size(), user2Application.getEmbeddedCartridges().size());
}
}