[embjopr-commits] EMBJOPR SVN: r283 - in trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit: as5 and 2 other directories.

embjopr-commits at lists.jboss.org embjopr-commits at lists.jboss.org
Wed Apr 8 13:45:15 EDT 2009


Author: ozizka at redhat.com
Date: 2009-04-08 13:45:15 -0400 (Wed, 08 Apr 2009)
New Revision: 283

Modified:
   trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/EmbjoprTestCase.java
   trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/EarTest.java
   trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/exceptions/HtmlElementNotFoundException.java
   trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/util/ActiveConditionChecker.java
   trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/util/EmbJoprTestToolkit.java
Log:
EAR and WAR tests updated, EJTT updated

Modified: trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/EmbjoprTestCase.java
===================================================================
--- trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/EmbjoprTestCase.java	2009-04-08 00:45:35 UTC (rev 282)
+++ trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/EmbjoprTestCase.java	2009-04-08 17:45:15 UTC (rev 283)
@@ -113,7 +113,7 @@
         WebClientSpec wcSpec = new WebClientSpec("/", BrowserVersion.FIREFOX_3);
 
         // This is temporary because embedded Jopr can't find /js/rhq.js
-        wcSpec.getWebClient().setThrowExceptionOnFailingStatusCode(false);
+        wcSpec.getWebClient().setThrowExceptionOnFailingStatusCode(true);
 
         // Always press OK for confirm dialogs
         wcSpec.getWebClient().setConfirmHandler(new SimpleConfirmHandler(true));
@@ -125,6 +125,7 @@
         this.server = jsfSession.getJSFServerSession(); 
 
 				this.ejtt = new EmbJoprTestToolkit(client, server);
+				this.ejtt.setCurrentTest(this);
     }
 
 		@Override

Modified: trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/EarTest.java
===================================================================
--- trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/EarTest.java	2009-04-08 00:45:35 UTC (rev 282)
+++ trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/EarTest.java	2009-04-08 17:45:15 UTC (rev 283)
@@ -37,6 +37,7 @@
 import junit.framework.TestSuite;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.math.NumberUtils;
+import org.apache.commons.lang.math.RandomUtils;
 import org.jboss.jopr.jsfunit.AppConstants.DeployableTypes;
 import org.jboss.jopr.jsfunit.exceptions.*;
 import org.jboss.jopr.jsfunit.util.EmbJoprTestToolkit;
@@ -92,7 +93,7 @@
 	 *
 	 * FAILED: JMX doesn't report EAR as deployed: eardeployment.ear
 	 */ 
-	public void testBasicEarDeployment() throws IOException, EmbJoprTestException
+	public void XtestBasicEarDeployment() throws IOException, EmbJoprTestException
 	{
 
 		try {
@@ -171,7 +172,7 @@
 
 	 *  PASSED.
 	 */
-	public void testNavigationToEar() throws IOException, HtmlElementNotFoundException, ActionOutOfSyncException, ActionNotAvailableException, EmbJoprTestException, InterruptedException
+	public void XtestNavigationToEar() throws IOException, HtmlElementNotFoundException, ActionOutOfSyncException, ActionNotAvailableException, EmbJoprTestException, InterruptedException
 	{
 
 		// JBossAS Servers node 
@@ -297,7 +298,7 @@
 	 * junit.framework.ComparisonFailure: expected:<eardeployment.ear> but was:<ondra-redhat>
      at org.jboss.jopr.jsfunit.as5.EarTest.testEarSummaryTab(EarTest.java:323)
 	 */
-	public void testEarSummaryTab() throws EmbJoprTestException, IOException, Exception {
+	public void XtestEarSummaryTab() throws EmbJoprTestException, IOException, Exception {
 
 		final int DEPLOY_TIMEOUT_SEC = 20;
 
@@ -388,7 +389,7 @@
 	 *
 	 * FAILS because some of the values are read-only.  EMBJOPR-96
 	 */
-	public void testEarConfigurationTab() throws IOException, EmbJoprTestException {
+	public void XtestEarConfigurationTab() throws IOException, EmbJoprTestException {
 
 		// Deploy the EAR.
 		String earFilePath = ejtt.getTestDataDir() +"/ear/"+ BASIC_EAR;
@@ -441,7 +442,7 @@
 	 *
 	 * FAILS because some of the values are read-only.  EMBJOPR-96
 	 */
-	public void testEarConfigurationTabCancel() throws IOException, EmbJoprTestException {
+	public void XtestEarConfigurationTabCancel() throws IOException, EmbJoprTestException {
 
 		// Deploy the EAR.
 		String earFilePath = ejtt.getTestDataDir() +"/ear/"+ BASIC_EAR;
@@ -491,8 +492,10 @@
 	 * Redeploys EAR.
 	 *
 	 * Fails because of EMBJOPR-109 - HTTP Status 500 - Error in Seam/JSF
+	 * Fails because of EMBJOPR-42 - javax.el.ELException: org.jboss.seam.RequiredException:
+	 *     @Out attribute requires non-null value: updateBackingContentAction.packageDetails
 	 */
-	public void testEarRedeployment() throws IOException, EmbJoprTestException {
+	public void XtestEarRedeployment() throws IOException, EmbJoprTestException {
 
 		// Deploy the EAR.
 		String earFilePath = ejtt.getTestDataDir() +"/ear/"+ BASIC_EAR;
@@ -568,7 +571,7 @@
 	/**
 	 * Checks EAR metrics tab.
 	 */
-	public void testEarMetricsTab() throws IOException, EmbJoprTestException {
+	public void XtestEarMetricsTab() throws IOException, EmbJoprTestException {
 
 		// Deploy the EAR.
 		String earFilePath = ejtt.getTestDataDir() + "/ear/"+BASIC_EAR;
@@ -663,11 +666,12 @@
 		// We have to use hotdeploy - can't upload a directory.
 		log.info("Unzipping ear/"+EAR_UNPACKED_ZIP);
 		unzipToDeployDir("ear/"+EAR_UNPACKED_ZIP, "");
+		ejtt.sleep(5000); // 5 sec is default deployment scanner interval.
 
 		try {
 				// Loop, wait for the app to appear.
 				log.info("Waiting for EAR to appear.");
-				ejtt.deployment.waitActivelyForDeployment( DeployableTypes.EAR, EAR_UNPACKED, 5000, 5 );
+				ejtt.deployment.waitActivelyForDeployment( DeployableTypes.EAR, EAR_UNPACKED, 5000, 8, this);
 
 
 				ejtt.getNavTree().getNodeByLabel(NAV_EAR).click();
@@ -729,11 +733,10 @@
 
 		}
 		finally {
-			DebugUtils.writeFile("target/testEarWithWar-beforeUndeployment.html", client.getPageAsText() );///
-			undeployEar(BASIC_EAR);
+			//DebugUtils.writeFile("target/testEarWithWar-beforeUndeployment.html", client.getPageAsText() );///
+			undeployEar(DEPLOYABLE_NAME);
 		}
 
-
 	}
 
 
@@ -744,6 +747,11 @@
 
 
 
+	/**
+	 * Stops and Starts an EAR with WAR in the Control tab.
+	 *
+	 * FAILS because of EMBJOPR-133.
+	 */
 	public void testStopAndStartEar() throws IOException, EmbJoprTestException
 	{
 		final String DEPLOYABLE_NAME = EAR_WITH_WAR_COUNTER;
@@ -797,11 +805,13 @@
 			// Check the latest message.
 			/*
 			HtmlTable operationHistoryTable = ejtt.getTabMenu().getTabContentBox().getOperationHistoryTable().getElement();
-			HtmlTableRow tr = operationHistoryTable.getFirstByXPath("tr[contains(@class, 'rich-table-firstrow')]");
+			HtmlTableRow tr = operationHistoryTable.getFirstByXPath("tbody/tr[contains(@class, 'rich-table-firstrow')]");
 			assertTrue( tr.getTextContent().contains("Success") );
 			/**/
 			DebugUtils.writeFile("target/testStopAndStartEar-opsTable.html", client.getPageAsText() );///
-			assertTrue( ejtt.getTabMenu().getTabContentBox().getOperationsHistoryTable().wasLastOperationSuccesful() );
+			OperationStatusType status = ejtt.getTabMenu().getTabContentBox().getOperationsHistoryTable().getLastOperationStatus();
+			assertEquals("Stop operation did not succeed, the status is: "+status, OperationStatusType.SUCCESS, status);
+			//assertTrue( ejtt.getTabMenu().getTabContentBox().getOperationsHistoryTable().wasLastOperationSuccesful() );
 
 
 			// Assert that the app is stopped.
@@ -813,9 +823,15 @@
 			ejtt.tabMenu.getTabContentBox().getButtonByLabel("Start").click();
 
 			// Check the latest message. TODO: EJTT class for ops history table?
+			/*
 			HtmlTable operationHistoryTable = ejtt.getTabMenu().getTabContentBox().getOperationsHistoryTable().getElement();
-			HtmlTableRow tr = operationHistoryTable.getFirstByXPath("tr[contains(@class, 'rich-table-firstrow')]");
+			HtmlTableRow tr = operationHistoryTable.getFirstByXPath("tbody/tr[contains(@class, 'rich-table-firstrow')]");
 			assertTrue( tr.getTextContent().contains("Success") );
+			*/
+			DebugUtils.writeFile("target/testStopAndStartEar-opsTable2.html", client.getPageAsText() );///
+			status = ejtt.getTabMenu().getTabContentBox().getOperationsHistoryTable().getLastOperationStatus();
+			assertEquals("Start operation did not succeed, the status is: "+status, OperationStatusType.SUCCESS, status);
+			//assertTrue( ejtt.getTabMenu().getTabContentBox().getOperationsHistoryTable().wasLastOperationSuccesful() );
 
 
 			// Assert that the app is running.
@@ -838,6 +854,8 @@
 
 	/**
 	 * Restarts the EAR in Control tab and checks whether it was really restarted.
+	 *
+	 * FAILS because of EMBJOPR-133.
 	 */
 	public void testRestartEar() throws IOException, EmbJoprTestException
 	{
@@ -889,11 +907,17 @@
 			ejtt.tabMenu.getTabContentBox().getButtonByLabel("Restart").click();
 
 			// Check the latest message. TODO: EJTT class for ops history table?
+			/*
 			HtmlTable operationHistoryTable = ejtt.getTabMenu().getTabContentBox().getOperationsHistoryTable().getElement();
-			HtmlTableRow tr = operationHistoryTable.getFirstByXPath("tr[contains(@class, 'rich-table-firstrow')]");
+			HtmlTableRow tr = operationHistoryTable.getFirstByXPath("tbody/tr[contains(@class, 'rich-table-firstrow')]");
 			assertTrue( tr.getTextContent().contains("Success") );
+			*/
+			//assertTrue( ejtt.getTabMenu().getTabContentBox().getOperationsHistoryTable().wasLastOperationSuccesful() );
+			OperationStatusType status = ejtt.getTabMenu().getTabContentBox().getOperationsHistoryTable().getLastOperationStatus();
+			assertEquals("Stop operation did not succeed, the status is: "+status, OperationStatusType.SUCCESS, status);
 
 
+
 			// Assert that the app is running.
       page = (HtmlPage)webClient.getPage(testPageUrl);
 			assert( 200 == page.getWebResponse().getStatusCode() );
@@ -1182,6 +1206,14 @@
 
 		ejtt.getTabMenu().clickSummaryTab();
 
+		/// Debug log - we're getting HTTP 500 here :/
+		String dumpFile = "target/undeployEar-"+(1000+RandomUtils.nextInt(1000))+".html";
+		log.debug("Dumping page to "+dumpFile);
+		DebugUtils.writeFile( dumpFile, client.getPageAsText());
+		int httpStatusCode = client.getContentPage().getWebResponse().getStatusCode();
+		if( 200 != httpStatusCode )
+			log.warn("Status code before undeployment is: "+httpStatusCode);
+
 		HtmlButtonInput deleteButton = getAppDeleteButton( earFileName );
 		deleteButton.click();
 

Modified: trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/exceptions/HtmlElementNotFoundException.java
===================================================================
--- trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/exceptions/HtmlElementNotFoundException.java	2009-04-08 00:45:35 UTC (rev 282)
+++ trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/exceptions/HtmlElementNotFoundException.java	2009-04-08 17:45:15 UTC (rev 283)
@@ -1,6 +1,7 @@
 package org.jboss.jopr.jsfunit.exceptions;
 
-import org.jboss.jopr.jsfunit.exceptions.EmbJoprTestException;
+import org.jboss.jopr.jsfunit.DebugUtils;
+import org.jboss.jopr.jsfunit.EmbjoprTestCase;
 
 /**
  *
@@ -15,6 +16,21 @@
 		super(message);
 	}
 
+	/** Writes the current page to a file named "<testName>-ElNotFound.html". */
+	public HtmlElementNotFoundException(String message, EmbjoprTestCase test)
+					/*throws FileNotFoundException, IOException*/
+	{
+		super(message);
+
+		if( null == test ) return;
+
+		try {
+			DebugUtils.writeFile("target/"+test.getName() + "-ElmNotFoundEx.html", test.getClient().getPageAsText());
+		} catch (Throwable ex) {
+			// ... 
+		}
+	}
+
 	public HtmlElementNotFoundException(String message, Throwable cause) {
 		super(message, cause);
 	}

Modified: trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/util/ActiveConditionChecker.java
===================================================================
--- trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/util/ActiveConditionChecker.java	2009-04-08 00:45:35 UTC (rev 282)
+++ trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/util/ActiveConditionChecker.java	2009-04-08 17:45:15 UTC (rev 283)
@@ -84,7 +84,7 @@
 	// This has nothing to do with condition checking, but is convenient shorthand...
 	public ActiveConditionChecker dumpPageOnTimeout(EmbjoprTestCase test) {
 		if( null == test ) return this;
-		return dumpPageOnTimeout( test.getName()+".html", test.getClient() );
+		return dumpPageOnTimeout( test.getName()+"-timeout.html", test.getClient() );
 	}
 
 	// This has nothing to do with condition checking, but is convenient shorthand...

Modified: trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/util/EmbJoprTestToolkit.java
===================================================================
--- trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/util/EmbJoprTestToolkit.java	2009-04-08 00:45:35 UTC (rev 282)
+++ trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/util/EmbJoprTestToolkit.java	2009-04-08 17:45:15 UTC (rev 283)
@@ -6,7 +6,6 @@
 import com.gargoylesoftware.htmlunit.Page;
 import java.util.*;
 
-import java.util.logging.Level;
 import org.jboss.jopr.jsfunit.exceptions.*;
 import com.gargoylesoftware.htmlunit.html.*;
 import com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine;
@@ -59,6 +58,9 @@
 
 	public EmbJoprTestToolkit getEjtt(){ return this; }
 
+	private EmbjoprTestCase currentTest = null;
+	public EmbjoprTestCase getCurrentTest() {		return currentTest;	}
+	public void setCurrentTest(EmbjoprTestCase currentTest) {		this.currentTest = currentTest; }
 
 
 
@@ -244,7 +246,7 @@
 			DomElement navTreeForm = (DomElement)client.getElement(ID_NAV_TREE_FORM);
 			if( null == navTreeForm ){
 				try {
-					DebugUtils.writeFile("getNodeByLabel-IDnotFound.html", client.getPageAsText());
+					DebugUtils.writeFile("target/getNodeByLabel-IDnotFound.html", client.getPageAsText());
 				}catch(Exception ex){
 					log.error("Caught when writing file: "+ex);
 				}
@@ -410,10 +412,13 @@
 		public TabContentBox getTabContentBox() throws HtmlElementNotFoundException
 		{
 			HtmlElement contentElement = (HtmlElement) client.getElement("content");
+			if( null == contentElement )
+				throw new HtmlElementNotFoundException("#content element not found.", currentTest);
+
 			String xPath = "div[@class='tabmenubox' or @class='notabmenubox']";
 			HtmlElement tabContentBox = (HtmlElement) contentElement.getFirstByXPath(xPath);
 			if( null == tabContentBox )
-				throw new HtmlElementNotFoundException("Tab content box not found using XPath: "+xPath);
+				throw new HtmlElementNotFoundException("Tab content box not found using XPath: "+xPath, currentTest);
 
 			return new TabContentBox(tabContentBox);
 		}
@@ -1016,15 +1021,21 @@
 
 
 
+	/**
+	 * Table which shows the result of an operation.
+	 */
 	public class OperationsHistoryTable extends ContentTable {
 
 		public OperationsHistoryTable(HtmlTable element) {
 			super(element);
 		}
 
-
-		public boolean wasLastOperationSuccesful() throws HtmlElementNotFoundException
-		{
+		/**
+		 * Returns the status row of the last operation.
+		 * @throws org.jboss.jopr.jsfunit.exceptions.HtmlElementNotFoundException
+		 *         when the table has no rows or XPath fails to find the status row.
+		 */
+		public HtmlTableRow getLastOperationRow() throws HtmlElementNotFoundException{
 			if( 0 == this.getRows().size() )
 				throw new HtmlElementNotFoundException(
 								"Operation table has no rows (no operations are listed).");
@@ -1035,13 +1046,51 @@
 				throw new HtmlElementNotFoundException(
 								"Operation status row not recognized; used XPath: "+xPath);
 			}
+			return tr;
+		}
+
+		public OperationStatusType getLastOperationStatus() throws HtmlElementNotFoundException {
+			HtmlTableRow tr = getLastOperationRow();
+			OperationStatusType status = OperationStatusType.fromStatusText( tr.getTextContent() );
+			if( null == status )
+				throw new HtmlElementNotFoundException(
+								"Operation status not recognized. Row text: "+tr.getTextContent());
+			return status;
+		}
+
+		public boolean wasLastOperationSuccesful() throws HtmlElementNotFoundException
+		{
+			HtmlTableRow tr = getLastOperationRow();
 			return tr.getTextContent().contains("Success");
 		}
 
+	}
+	
+	/**
+	 * Generalization of status result types.
+	 */
+	public enum OperationStatusType {
+		SUCCESS("Success"), FAILURE("Failed"), IN_PROGRESS("In progress");
 
+		private String statusText;
+		public String getStatusText() {			return statusText;		}
+
+		OperationStatusType( String statusText ){
+			this.statusText = statusText;
+		}
+
+		public static OperationStatusType fromStatusText( String text ){
+			for( OperationStatusType type : OperationStatusType.values() ){
+				if( text.toLowerCase().contains( type.getStatusText().toLowerCase() )  )
+					return type;
+			}
+			//log.debug("Unrecognized operation status: "+text);
+			return null;
+		}
 	}
 
 
+
 	/**
 	 * Row of a content table.
 	 * Contains convenience methods for accessing content table rows in EmbJopr.
@@ -1324,7 +1373,7 @@
 			try { DebugUtils.writeFile(dumpFileName, client.getPageAsText()); }
 			catch (Exception ex) { log.warn("getLinkInsideForm(): "+ ex.toString()); }
 
-			throw new HtmlElementNotFoundException("Form element of given ID not found: "+formId);
+			throw new HtmlElementNotFoundException("Form element of given ID not found: "+formId, this.getCurrentTest());
 		}
 
 		String xPath = ".//a[contains(normalize-space(), '"+linkLabel+"')]";
@@ -1610,7 +1659,7 @@
 			}
 			catch( EmbJoprTestException ex ){ throw ex; }
 			catch( IOException ex ){ throw ex; }
-			// Wrap all exceptions to EmbJoprTestException.
+			// Wrap all other exceptions to EmbJoprTestException.
 			catch( Exception ex ){
 				throw new EmbJoprTestException("Exception thrown while actively waiting for condition.", ex);
 			}




More information about the embjopr-commits mailing list