/******************************************************************************* * Copyright (c) 2007 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.client.utils; import static org.fest.assertions.Assertions.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.io.IOException; import java.net.URL; import java.util.Collection; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.fest.assertions.AssertExtension; import com.openshift.client.IApplication; import com.openshift.client.IDomain; import com.openshift.client.IField; import com.openshift.client.IGearProfile; import com.openshift.client.ISeverity; import com.openshift.client.Message; import com.openshift.client.Messages; import com.openshift.client.OpenShiftException; import com.openshift.client.cartridge.IEmbeddableCartridge; import com.openshift.client.cartridge.IEmbeddedCartridge; import com.openshift.client.cartridge.IStandaloneCartridge; import com.openshift.client.cartridge.query.LatestEmbeddableCartridge; import com.openshift.internal.client.utils.StreamUtils; /** * @author André Dietisheim */ public class ApplicationAssert implements AssertExtension { public static final Pattern APPLICATION_URL_PATTERN = Pattern.compile("https*://(.+)-([^\\.]+)\\.(.+)/(.*)"); public static final Pattern GIT_URL_PATTERN = Pattern.compile("ssh://(.+)@(.+)-([^\\.]+)\\.(.+)/~/git/(.+).git/"); private static final long APPLICATION_WAIT_TIMEOUT = 2 * 60 * 1000L; private IApplication application; public ApplicationAssert(IApplication application) { assertThat(application).isNotNull(); this.application = application; } public ApplicationAssert hasName(String name) { assertEquals(name, application.getName()); return this; } public ApplicationAssert hasUUID(String uuid) { assertEquals(uuid, application.getUUID()); return this; } public ApplicationAssert hasUUID() { assertNotNull(application.getUUID()); return this; } public ApplicationAssert hasCartridge(IStandaloneCartridge cartridge) { assertEquals(cartridge, application.getCartridge()); return this; } public ApplicationAssert hasCreationTime(String creationTime) { assertEquals(creationTime, application.getCreationTime()); return this; } public ApplicationAssert hasCreationTime() { assertNotNull(application.getCreationTime()); return this; } public ApplicationAssert hasGitUrl(String gitUrl) { assertEquals(gitUrl, application.getGitUrl()); return this; } public ApplicationAssert hasValidGitUrl() { Matcher matcher = GIT_URL_PATTERN.matcher(application.getGitUrl()); assertTrue(matcher.matches()); assertEquals(5, matcher.groupCount()); assertEquals(application.getUUID(), matcher.group(1)); assertEquals(application.getName(), matcher.group(2)); assertEquals(application.getDomain().getSuffix(), matcher.group(4)); assertEquals(application.getName(), matcher.group(5)); return this; } public ApplicationAssert hasInitialGitUrl() { assertThat(application.getInitialGitUrl()).isNotEmpty(); return this; } public ApplicationAssert hasNoInitialGitUrl() { assertThat(application.getInitialGitUrl()).isNull(); return this; } public ApplicationAssert hasInitialGitUrl(String initialGitUrl) { assertThat(application.getInitialGitUrl()).isEqualTo(initialGitUrl); return this; } public ApplicationAssert hasApplicationUrl(String applicationUrl) { assertEquals(applicationUrl, application.getApplicationUrl()); return this; } public ApplicationAssert hasValidApplicationUrl() { assertApplicationUrl(); return this; } private void assertApplicationUrl() { Matcher matcher = APPLICATION_URL_PATTERN.matcher(application.getApplicationUrl()); assertTrue(matcher.matches()); assertTrue(matcher.groupCount() >= 3); assertEquals(application.getName(), matcher.group(1)); IDomain domain = application.getDomain(); assertEquals(domain.getId(), matcher.group(2)); assertEquals(domain.getSuffix(), matcher.group(3)); } public ApplicationAssert hasGearProfile(IGearProfile gearProfile) { assertThat(application.getGearProfile()).isEqualTo(gearProfile); return this; } public ApplicationAssert hasEmbeddedCartridges(LatestEmbeddableCartridge... selectors) throws OpenShiftException { for (LatestEmbeddableCartridge selector : selectors) { hasEmbeddedCartridge(selector); } return this; } public ApplicationAssert hasEmbeddedCartridge(LatestEmbeddableCartridge selector) throws OpenShiftException { hasEmbeddedCartridge(selector.get(application)); return this; } public ApplicationAssert hasEmbeddedCartridge(IEmbeddableCartridge... cartridges) throws OpenShiftException { for (IEmbeddableCartridge cartridge : cartridges) { hasEmbeddedCartridge(cartridge); } return this; } public ApplicationAssert hasEmbeddedCartridge(IEmbeddableCartridge cartridge) throws OpenShiftException { assertTrue(application.hasEmbeddedCartridge(cartridge)); return this; } public ApplicationAssert hasEmbeddedCartridgeNames(String... embeddableCartridgeNames) throws OpenShiftException { if (embeddableCartridgeNames.length == 0) { assertEquals(0, application.getEmbeddedCartridges().size()); } for (String cartridgeName : embeddableCartridgeNames) { assertTrue(application.hasEmbeddedCartridge(cartridgeName)); } return this; } public ApplicationAssert hasEmbeddableCartridges(int numberOf) { assertNotNull(application.getEmbeddedCartridges()); assertEquals(numberOf, application.getEmbeddedCartridges().size()); return this; } public ApplicationAssert hasNotEmbeddableCartridgeNames(String... embeddableCartridgeNames) throws OpenShiftException { for (String cartridgeName : embeddableCartridgeNames) { assertFalse(application.hasEmbeddedCartridge(cartridgeName)); } return this; } public ApplicationAssert hasNotEmbeddableCartridges(LatestEmbeddableCartridge... selectors) throws OpenShiftException { for (LatestEmbeddableCartridge selector : selectors) { assertThat(application.hasEmbeddedCartridge(selector.get(application))).isFalse(); } return this; } public ApplicationAssert hasAlias(String... aliasNames) { if (aliasNames.length == 0) { assertEquals(0, application.getAliases().size()); } for (String cartridgeName : aliasNames) { assertTrue(application.hasAlias(cartridgeName)); } return this; } public void hasNotEmbeddableCartridge(LatestEmbeddableCartridge constraint) { hasNotEmbeddableCartridge(constraint.get(application)); } public void hasNotEmbeddableCartridge(IEmbeddableCartridge cartridge) { hasNotEmbeddableCartridge(cartridge.getName()); } public void hasNotEmbeddableCartridge(String name) { assertNull(getEmbeddableCartridge(name)); } public void assertThatDoesntContainCartridges(Collection<IEmbeddableCartridge> shouldNotBeContained, List<IEmbeddedCartridge> cartridges) { for(IEmbeddableCartridge shouldNot : shouldNotBeContained) { assertFalse(cartridges.contains(shouldNot)); } } private IEmbeddedCartridge getEmbeddableCartridge(String name) { IEmbeddedCartridge matchingCartridge = null; for (IEmbeddedCartridge cartridge : application.getEmbeddedCartridges()) { if (name.equals(cartridge.getName())) { matchingCartridge = cartridge; break; } } return matchingCartridge; } public void assertThatContainsCartridges(Collection<IEmbeddableCartridge> shouldBeContained, List<IEmbeddedCartridge> cartridgesToCheck) { for (IEmbeddableCartridge cartridge : shouldBeContained) { assertTrue(cartridgesToCheck.contains(cartridge)); } } public ApplicationAssert pageContains(String page, String contains) throws IOException { URL appUrl = new URL(application.getApplicationUrl() + page); assertThat(application.waitForAccessible(APPLICATION_WAIT_TIMEOUT)).isTrue(); String content = StreamUtils.readToString(appUrl.openConnection().getInputStream()); assertThat(content).contains(contains); return this; } public ApplicationAssert hasMessage(IField field, ISeverity severity) throws IOException { Messages messages = application.getMessages(); assertThat(messages).isNotNull(); List<Message> matchingMessages = messages.getBy(field, severity); assertThat(matchingMessages).isNotEmpty(); return this; } public ApplicationAssert hasMessage(IField field) throws IOException { Messages messages = application.getMessages(); assertThat(messages).isNotNull(); List<Message> matchingMessages = messages.getBy(field); assertThat(matchingMessages).isNotEmpty(); return this; } public ApplicationAssert hasResultFieldOrResultSeverityMessage() throws IOException { Messages messages = application.getMessages(); assertThat(messages).isNotNull(); List<Message> matchingMessages = messages.getBy(IField.RESULT); if (matchingMessages == null || matchingMessages.isEmpty()) { matchingMessages = messages.getBy(IField.DEFAULT, ISeverity.RESULT); assertThat(matchingMessages).isNotEmpty(); } return this; } public ApplicationAssert hasDomain(IDomain domain) { assertThat(application.getDomain()).isEqualTo(domain); return this; } }