/******************************************************************************* * Copyright (c) 2012 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.assertFalse; import static org.junit.Assert.assertTrue; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; import org.junit.Before; import org.junit.Test; import com.openshift.client.IHttpClient; import com.openshift.client.IOpenShiftConnection; import com.openshift.client.OpenShiftException; import com.openshift.client.cartridge.EmbeddableCartridge; 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.StandaloneCartridge; import com.openshift.client.cartridge.query.CartridgeNameQuery; import com.openshift.client.cartridge.query.CartridgeNameRegexQuery; import com.openshift.client.cartridge.query.LatestEmbeddableCartridge; import com.openshift.client.cartridge.query.LatestVersionOf; import com.openshift.client.cartridge.query.LatestVersionQuery; import com.openshift.client.cartridge.query.StringPropertyQuery; import com.openshift.client.utils.CartridgeAssert; import com.openshift.client.utils.CartridgeTestUtils; import com.openshift.client.utils.Samples; import com.openshift.client.utils.TestConnectionBuilder; /** * @author Andre Dietisheim */ public class CartridgeQueryTest extends TestTimer { private IOpenShiftConnection connection; @Before public void setUp() throws OpenShiftException, FileNotFoundException, IOException { IHttpClient client = new HttpClientMockDirector() .mockGetCartridges(Samples.GET_CARTRIDGES) .client(); this.connection = new TestConnectionBuilder().defaultCredentials().create(client); } @Test public void shouldEqualsOtherCartridgeConstraint() { // pre-conditions // operation // verification assertEquals( new LatestVersionQuery("redhat"), new LatestVersionQuery("redhat")); assertFalse(new LatestVersionQuery("redhat").equals( new LatestVersionQuery("jboss"))); } @Test public void shouldMatchEmbeddableCartridge() { // pre-conditions LatestVersionQuery redhatSelector = new LatestVersionQuery("redhat"); LatestVersionQuery jbossSelector = new LatestVersionQuery("jboss"); IEmbeddableCartridge redhat10 = new EmbeddableCartridge("redhat-1.0"); IEmbeddableCartridge redhat30 = new EmbeddableCartridge("redhat-3.0"); IEmbeddableCartridge jboss10 = new EmbeddableCartridge("jboss-1.0"); LatestVersionQuery closedSourceSelector = new LatestVersionQuery("closedsource"); // operation // verification assertTrue(redhatSelector.matches(redhat10)); assertTrue(redhatSelector.matches(redhat30)); assertFalse(redhatSelector.matches(jboss10)); assertTrue(jbossSelector.matches(jboss10)); assertFalse(closedSourceSelector.matches(jboss10)); } @Test public void shouldReturnEmptyListOnNoCartridges() { // pre-conditions List<IEmbeddedCartridge> embeddedCartridges = Collections.emptyList(); LatestVersionQuery selector = new LatestVersionQuery("mysql"); // operation IEmbeddedCartridge matchingCartridge = selector.get(embeddedCartridges); // verification assertThat(matchingCartridge).isNull(); } @Test public void shouldReturnEmptyListOnNoMatchingCartridge() { // pre-conditions List<IEmbeddedCartridge> embeddedCartridges = CartridgeTestUtils.createEmbeddedCartridgeMocks( "eclipsecon-2013", "community"); LatestVersionQuery selector = new LatestVersionQuery("fun"); // operation IEmbeddedCartridge matchingCartridge = selector.get(embeddedCartridges); // verification assertThat(matchingCartridge).isNull(); } @Test public void shouldMatchMysql() { // pre-conditions List<IEmbeddedCartridge> embeddedCartridges = CartridgeTestUtils.createEmbeddedCartridgeMocks(CartridgeTestUtils.MYSQL_51_NAME); LatestVersionQuery cartridgeConstraint = new LatestVersionQuery("mysql"); // operation IEmbeddedCartridge matchingCartridge = cartridgeConstraint.get(embeddedCartridges); // verification assertThat(matchingCartridge).isNotNull(); assertThat(matchingCartridge.getName()).isEqualTo(CartridgeTestUtils.MYSQL_51_NAME); } @Test public void shouldMatchLatestMysql() { // pre-conditions List<IEmbeddedCartridge> embeddedCartridges = CartridgeTestUtils.createEmbeddedCartridgeMocks( CartridgeTestUtils.MYSQL_51_NAME, "mysql-5.0"); LatestVersionQuery cartridgeSelector = new LatestVersionQuery("mysql"); // operation IEmbeddedCartridge latestMysql = cartridgeSelector.get(embeddedCartridges); // verification assertThat(latestMysql).isNotNull(); assertThat(latestMysql.getName()).isEqualTo(CartridgeTestUtils.MYSQL_51_NAME); } @Test public void shouldMatchMajorVersionedCartridge() { // pre-conditions String cartridgeName = "vertx-2"; List<IEmbeddedCartridge> embeddedCartridges = CartridgeTestUtils.createEmbeddedCartridgeMocks(cartridgeName, "mysql"); LatestEmbeddableCartridge constraint = new LatestEmbeddableCartridge("vertx"); // operation IEmbeddedCartridge cartridge = constraint.get(embeddedCartridges); // verification assertThat(cartridge).isNotNull(); assertThat(cartridge.getName()).isEqualTo(cartridgeName); } @Test public void shouldMatchLaterMajorVersion() { // pre-conditions String mysql6Name = "mysql-6"; List<IEmbeddedCartridge> embeddedCartridges = CartridgeTestUtils.createEmbeddedCartridgeMocks(mysql6Name, "mysql-5.0"); LatestVersionQuery cartridgeSelector = new LatestVersionQuery("mysql"); // operation IEmbeddedCartridge latestMysql = cartridgeSelector.get(embeddedCartridges); // verification assertThat(latestMysql).isNotNull(); assertThat(latestMysql.getName()).isEqualTo(mysql6Name); } @Test public void shouldMatchAlphanumericVersionedCartridge() { // pre-conditions String cartridgeName = "somecartridge-7b"; List<IEmbeddedCartridge> embeddedCartridges = CartridgeTestUtils.createEmbeddedCartridgeMocks( cartridgeName, "mysql-5.0"); LatestVersionQuery constraint = new LatestVersionQuery("somecartridge"); // operation IEmbeddedCartridge cartridge = constraint.get(embeddedCartridges); // verification assertThat(cartridge).isNotNull(); assertThat(cartridge.getName()).isEqualTo(cartridgeName); } @Test public void shouldMatchCartridgeNameWithDash() { // pre-conditions String jenkins2 = "jenkins-client-2.0"; List<IEmbeddedCartridge> embeddedCartridges = CartridgeTestUtils.createEmbeddedCartridgeMocks( jenkins2, "jenkins-client-1.4"); LatestVersionQuery constraint = new LatestVersionQuery("jenkins-client"); // operation IEmbeddedCartridge cartridge = constraint.get(embeddedCartridges); // verification assertThat(cartridge).isNotNull(); assertThat(cartridge.getName()).isEqualTo(jenkins2); } @Test public void shouldMatchingCartridgeName() { // pre-conditions List<IEmbeddedCartridge> embeddedCartridges = CartridgeTestUtils.createEmbeddedCartridgeMocks( "Timberlake", "TimAndStrupi"); StringPropertyQuery selector = new StringPropertyQuery("Tim.*") { @Override protected <C extends ICartridge> String getProperty(C cartridge) { return cartridge.getName(); } }; // operation IEmbeddedCartridge matchingCartridge = selector.get(embeddedCartridges); Collection<IEmbeddedCartridge> matchingCartridges = selector.getAll(embeddedCartridges); // verification assertThat(matchingCartridge).isNotNull(); assertThat(matchingCartridge.getName()).isEqualTo("Timberlake"); assertThat(matchingCartridges).onProperty("name").containsOnly("Timberlake", "TimAndStrupi"); } @Test public void shouldSelectNodeJsByDescriptionRegex() { // pre-conditions List<StandaloneCartridge> standaloneCartridges = Arrays.asList( new StandaloneCartridge("bingobongo"), new StandaloneCartridge("bongomongo"), new StandaloneCartridge("nodejs-0.6", null, "Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, " + "scalable network applications. Node.js is perfect for data-intensive real-time " + "applications that run across distributed devices." , false) ); StringPropertyQuery query = new StringPropertyQuery(".+platform built on Chrome's JavaScript runtime.+") { @Override protected <C extends ICartridge> String getProperty(C cartridge) { return cartridge.getDescription(); } }; // operation IStandaloneCartridge nodeJs = query.get(standaloneCartridges); // verification new CartridgeAssert<IStandaloneCartridge>(nodeJs) .hasName("nodejs-0.6"); } @Test public void shouldSelectJBossAs() { // pre-conditions // operation // verification assertCartridge(IStandaloneCartridge.NAME_JBOSSAS, LatestVersionOf.jbossAs().get(connection)); } @Test public void shouldSelectJBossEap() { // pre-conditions // operation // verification assertCartridge(IStandaloneCartridge.NAME_JBOSSEAP, LatestVersionOf.jbossEap().get(connection)); } @Test public void shouldSelectJBossEws() { // pre-conditions // operation // verification assertCartridge(IStandaloneCartridge.NAME_JBOSSEWS, LatestVersionOf.jbossEws().get(connection)); } @Test public void shouldSelectJenkins() { // pre-conditions // operation // verification assertCartridge(IStandaloneCartridge.NAME_JENKINS, LatestVersionOf.jenkins().get(connection)); } @Test public void shouldSelectPerl() { // pre-conditions // operation // verification assertCartridge(IStandaloneCartridge.NAME_PERL, LatestVersionOf.perl().get(connection)); } @Test public void shouldSelectPhp() { // pre-conditions // operation // verification assertCartridge(IStandaloneCartridge.NAME_PHP, LatestVersionOf.php().get(connection)); } @Test public void shouldSelectPython() { // pre-conditions // operation // verification assertCartridge(IStandaloneCartridge.NAME_PYTHON, LatestVersionOf.python().get(connection)); } @Test public void shouldSelectRuby() { // pre-conditions // operation // verification assertCartridge(IStandaloneCartridge.NAME_RUBY, LatestVersionOf.ruby().get(connection)); } @Test public void shouldSelectZend() { // pre-conditions // operation // verification assertCartridge(IStandaloneCartridge.NAME_ZEND, LatestVersionOf.zend().get(connection)); } @Test public void shouldSelectHaProxy() { // pre-conditions // operation // verification assertCartridge(IEmbeddedCartridge.NAME_HAPROXY, LatestVersionOf.haProxy().get(connection)); } @Test public void shouldSelectJenkinsClient() { // pre-conditions // operation // verification assertCartridge(IEmbeddedCartridge.NAME_JENKINS_CLIENT, LatestVersionOf.jenkinsClient().get(connection)); } @Test public void shouldSelectMongoDb() { // pre-conditions // operation // verification assertCartridge(IEmbeddedCartridge.NAME_MONGODB, LatestVersionOf.mongoDB().get(connection)); } @Test public void shouldSelectMySql() { // pre-conditions // operation // verification assertCartridge(IEmbeddedCartridge.NAME_MYSQL, LatestVersionOf.mySQL().get(connection)); } @Test public void shouldSelectPhpMyAdmin() { // pre-conditions // operation // verification assertCartridge(IEmbeddedCartridge.NAME_PHPMYADMIN, LatestVersionOf.phpMyAdmin().get(connection)); } @Test public void shouldSelectpostgreSql() { // pre-conditions // operation // verification assertCartridge(IEmbeddedCartridge.NAME_POSTGRESQL, LatestVersionOf.postgreSQL().get(connection)); } @Test public void shouldSelectRockmongo() { // pre-conditions // operation // verification assertCartridge(IEmbeddedCartridge.NAME_ROCKMONGO, LatestVersionOf.rockMongo().get(connection)); } @Test public void shouldSelectMongoByNameSubstring() { // pre-conditions // operation // verification assertCartridge(IEmbeddedCartridge.NAME_MONGODB, new CartridgeNameQuery(IEmbeddedCartridge.NAME_MONGODB).get(connection.getEmbeddableCartridges())); } @Test public void shouldSelectRockmongoByNameRegex() { // pre-conditions // operation // verification assertCartridge(IEmbeddedCartridge.NAME_MONGODB, new CartridgeNameRegexQuery(IEmbeddedCartridge.NAME_MONGODB + ".*").get(connection.getEmbeddableCartridges())); } private void assertCartridge(String expectedName, ICartridge cartridge) { assertThat(cartridge).isNotNull(); assertThat(cartridge.getName()).startsWith(expectedName); } }