[embjopr-commits] EMBJOPR SVN: r308 - 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
Fri Apr 17 16:28:10 EDT 2009


Author: fjuma
Date: 2009-04-17 16:28:10 -0400 (Fri, 17 Apr 2009)
New Revision: 308

Added:
   trunk/jsfunit/testdata/destinations/CreateOperationExistingQueue-service.xml
   trunk/jsfunit/testdata/destinations/CreateOperationExistingTopic-service.xml
   trunk/jsfunit/testdata/destinations/DestroyOperationExistingQueue-service.xml
   trunk/jsfunit/testdata/destinations/DestroyOperationExistingTopic-service.xml
   trunk/jsfunit/testdata/destinations/ListAllMessagesMultipleMessagesExistingTopic-service.xml
   trunk/jsfunit/testdata/destinations/ListAllSubscriptionsHtmlMultipleSubscribersExistingTopic-service.xml
   trunk/jsfunit/testdata/destinations/ListAllSubscriptionsMultipleSubscribersExistingTopic-service.xml
   trunk/jsfunit/testdata/destinations/ListDurableSubscriptionsHtmlMultipleSubscribersExistingTopic-service.xml
   trunk/jsfunit/testdata/destinations/ListDurableSubscriptionsMultipleSubscribersExistingTopic-service.xml
   trunk/jsfunit/testdata/destinations/ListMessageCounterHistoryExistingQueue-service.xml
   trunk/jsfunit/testdata/destinations/ListMessageCounterMultipleMessagesExistingQueue-service.xml
   trunk/jsfunit/testdata/destinations/ListNonDurableSubscriptionsHtmlMultipleSubscribersExistingTopic-service.xml
   trunk/jsfunit/testdata/destinations/ListNonDurableSubscriptionsMultipleSubscribersExistingTopic-service.xml
   trunk/jsfunit/testdata/destinations/RemoveAllMessagesMultipleMessagesExistingQueue-service.xml
   trunk/jsfunit/testdata/destinations/RemoveAllMessagesMultipleMessagesExistingTopic-service.xml
   trunk/jsfunit/testdata/destinations/ResetMessageCounterHistoryMultipleMessagesExistingQueue-service.xml
   trunk/jsfunit/testdata/destinations/ResetMessageCounterMultipleMessagesExistingQueue-service.xml
   trunk/jsfunit/testdata/destinations/StartOperationExistingQueue-service.xml
   trunk/jsfunit/testdata/destinations/StartOperationExistingTopic-service.xml
   trunk/jsfunit/testdata/destinations/StopOperationExistingQueue-service.xml
   trunk/jsfunit/testdata/destinations/StopOperationExistingTopic-service.xml
Modified:
   trunk/core/src/main/webapp/secure/resourceInstanceOperation.xhtml
   trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/JMSTest.java
   trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/ResourceTestBase.java
   trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/util/EmbJoprTestToolkit.java
Log:
Adding operations tests for JMS Topics and Queues.


Modified: trunk/core/src/main/webapp/secure/resourceInstanceOperation.xhtml
===================================================================
--- trunk/core/src/main/webapp/secure/resourceInstanceOperation.xhtml	2009-04-17 19:11:41 UTC (rev 307)
+++ trunk/core/src/main/webapp/secure/resourceInstanceOperation.xhtml	2009-04-17 20:28:10 UTC (rev 308)
@@ -89,7 +89,7 @@
 <div class="instructionalText">
     <h:outputText rendered="#{operationHistory ne null}"> 
         #{messages['control.resourceInstance.status.details1a']}
-        <a href="javascript:window.location.reload(true)">#{messages['control.resourceInstance.status.details1b']}</a>
+        <a id="refreshLink" href="javascript:window.location.reload(true)">#{messages['control.resourceInstance.status.details1b']}</a>
     </h:outputText>
 </div>
                   
@@ -168,14 +168,14 @@
                                             nullConfigurationMessage="null config!"
                                             nullConfigurationStyle="InfoBlock"/>
                             </h:panelGroup>
-                            <h:panelGroup rendered="#{selectedHistory.parameters eq null}">
+                            <h:panelGroup id="noParameters" rendered="#{selectedHistory.parameters eq null}">
                                 <i>None</i>
                             </h:panelGroup>
 
                             <!-- Results -->
                             <h:panelGroup layout="block" rendered="#{selectedHistory.status eq 'SUCCESS'}">
                                 <h3>#{messages['control.resourceInstance.previous.results']}</h3>
-                                <h:panelGroup rendered="#{selectedHistory.results ne null and selectedHistory.operationDefinition.resultsConfigurationDefinition ne null}">
+                                <h:panelGroup id="operationResults" rendered="#{selectedHistory.results ne null and selectedHistory.operationDefinition.resultsConfigurationDefinition ne null}">
                                     <onc:config configurationDefinition="#{selectedHistory.operationDefinition.resultsConfigurationDefinition}"
                                                 configuration="#{selectedHistory.results}"
                                                 readOnly="true"
@@ -183,7 +183,7 @@
                                                 nullConfigurationMessage="null config!"
                                                 nullConfigurationStyle="InfoBlock"/>
                                 </h:panelGroup>
-                                <h:panelGroup rendered="#{selectedHistory.results eq null or selectedHistory.operationDefinition.resultsConfigurationDefinition eq null}">
+                                <h:panelGroup id="noResults" rendered="#{selectedHistory.results eq null or selectedHistory.operationDefinition.resultsConfigurationDefinition eq null}">
                                     <i>None</i>
                                 </h:panelGroup>
                             </h:panelGroup>

Modified: trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/JMSTest.java
===================================================================
--- trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/JMSTest.java	2009-04-17 19:11:41 UTC (rev 307)
+++ trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/JMSTest.java	2009-04-17 20:28:10 UTC (rev 308)
@@ -58,6 +58,7 @@
 import javax.jms.TextMessage;
 import javax.jms.JMSException;
 import javax.naming.NamingException;
+import org.jboss.jms.destination.JBossDestination;
 
 /**
  * This class contains tests for managing JMS topics and queues
@@ -122,6 +123,30 @@
     private static final String DEPTH_DELTA = "Depth Delta";
     private static final String TIME_LAST_UPDATE = "Time Last Update";
     
+    // Common operations 
+    private static final String CREATE = "Create";
+    private static final String DESTROY = "Destroy";
+    private static final String LIST_ALL_MSGS = "List All Messages";
+    private static final String LIST_DURABLE_MSGS = "List Durable Messages";
+    private static final String LIST_NON_DURABLE_MSGS = "List Non Durable Messages";
+    private static final String REMOVE_ALL_MSGS = "Remove All Messages";
+    private static final String START = "Start";
+    private static final String STOP = "Stop";
+    
+    // Topic-specific operations
+    private static final String LIST_ALL_SUB = "List All Subscriptions";
+    private static final String LIST_ALL_SUB_AS_HTML = "List All Subscriptions As HTML";
+    private static final String LIST_DURABLE_SUB = "List Durable Subscriptions";
+    private static final String LIST_DURABLE_SUB_AS_HTML = "List Durable Subscriptions As HTML";
+    private static final String LIST_NON_DURABLE_SUB = "List Non Durable Subscriptions";
+    private static final String LIST_NON_DURABLE_SUB_AS_HTML = "List Non Durable Subscriptions As HTML";
+    
+    // Queue-specific operations
+    private static final String LIST_MSG_COUNTER_AS_HTML = "List Message Counter As HTML";
+    private static final String LIST_MSG_COUNTER_HISTORY_AS_HTML = "List Message Counter History As HTML";
+    private static final String RESET_MSG_COUNTER = "Reset Message Counter";
+    private static final String RESET_MSG_COUNTER_HISTORY = "Reset Message Counter History";
+    
     private static final long SCHEDULED_TIME = 3600000;
     
     private TopicConnection topicConnection = null;
@@ -130,6 +155,8 @@
     private static final String DLQ = "jboss.messaging.destination:name=DLQ,service=Queue";
     private static final String EXPIRY_QUEUE = "jboss.messaging.destination:name=ExpiryQueue,service=Queue";
     private static final String SERVER_PEER = "jboss.messaging:service=ServerPeer";
+    private static final String DURABLE = "Durable";
+    private static final String NON_DURABLE = "Non Durable";
     
     /**
      * Create a new topic or queue using the given destination type and properties.
@@ -160,7 +187,7 @@
     protected Map<String, MetaValue> createQueue(String queueName) throws IOException, EmbJoprTestException {
     
         Map<String, MetaValue> propertiesMap = new LinkedHashMap<String, MetaValue>();
-        propertiesMap.put("name", SimpleValueSupport.wrap(queueName));
+        propertiesMap.put("name", SimpleValueSupport.wrap(queueName)); 
         propertiesMap.put("JNDIName", SimpleValueSupport.wrap(queueName));
         propertiesMap.put("clustered", SimpleValueSupport.wrap(Boolean.FALSE));
         propertiesMap.put("downCacheSize", SimpleValueSupport.wrap(new Integer(1500)));
@@ -325,6 +352,17 @@
     }
     
     /**
+     * Create a queue session and then send the given number
+     * of messages to the given queue.
+     */
+    protected void createQueueSessionAndSendMessages(int numMessages, 
+                                                     String jndiName) throws Exception {
+        QueueSession session = createQueueSession();
+        Queue queue = getQueue(jndiName);
+        sendMessages(session, queue, numMessages);
+    }
+    
+    /**
      * Create a QueueSender for the given queue and schedule the
      * given number of messages.
      */
@@ -411,7 +449,64 @@
  	   super.tearDown();
  	   disconnect();
     }
+    
+    /**
+     * Create a topic session, a durable subscriber, and a non-durable
+     * subscriber. Then, send the specified number of messages to the
+     * given topic.
+     */
+    protected void createTopicSessionAndSendMessages(int numMessages,
+                                                     String jndiName) throws Exception {
+        TopicSession session = createTopicSession();
+        Topic topic = getTopic(jndiName);
+        
+        // Create 1 durable subscriber, 1 non-durable subscriber
+        // and then publish the specified number of messages
+        createDurableTopicSubscriber(session, topic, jndiName + "Subscriber");
+        createNonDurableTopicSubscriber(session, topic);
+        
+        publishMessages(session, topic, numMessages);
+    }
 
+    /**
+     * Create a topic session and the given number of durable subscribers.
+     */
+    protected void createTopicSessionAndDurableSubscribers(int numSubscribers,
+                                                           String jndiName) throws Exception {
+        TopicSession session = createTopicSession();
+        Topic topic = getTopic(jndiName);
+        
+        for(int i = 0; i < numSubscribers; i++) {
+            createDurableTopicSubscriber(session, topic, jndiName + "Subscriber" + i);
+        }
+    }
+    
+    /**
+     * Create a topic session and the given number of non-durable subscribers.
+     */
+    protected void createTopicSessionAndNonDurableSubscribers(int numSubscribers,
+                                                              String jndiName) throws Exception {
+        TopicSession session = createTopicSession();
+        Topic topic = getTopic(jndiName);
+        
+        for(int i = 0; i < numSubscribers; i++) {
+            createNonDurableTopicSubscriber(session, topic);
+        }
+    }
+    
+    /**
+     * Create a topic session and the given number of durable and non-durable subscribers.
+     */
+    protected void createTopicSessionAndMultipleSubscribers(int numSubscribers,
+                                                            String jndiName) throws Exception {
+        TopicSession session = createTopicSession();
+        Topic topic = getTopic(jndiName);
+        
+        for(int i = 0; i < numSubscribers; i++) {
+            createNonDurableTopicSubscriber(session, topic);
+            createDurableTopicSubscriber(session, topic, jndiName + "Subscriber" + i);
+        }
+    }
 
     /*
      * CREATION TESTS
@@ -1435,10 +1530,8 @@
      private void checkQueueMetricsAfterOneMessage(String jndiName) throws Exception {
     	 
     	 // Send 1 message to the queue
-    	 QueueSession session = createQueueSession();
-         Queue queue = getQueue(jndiName);
-         sendMessages(session, queue, 1);
-         
+    	 createQueueSessionAndSendMessages(1, jndiName);
+            
          // Set up the expected values
          Map<String, String> expectedMetrics = new LinkedHashMap<String, String>();
          expectedMetrics.put(CONSUMER_COUNT, "0.0");
@@ -1486,9 +1579,7 @@
      private void checkQueueMetricsAfterMultipleMessages(String jndiName) throws Exception {
     	 
     	 // Send multiple messages to the queue
-    	 QueueSession session = createQueueSession();
-         Queue queue = getQueue(jndiName);
-         sendMessages(session, queue, 3);
+    	 createQueueSessionAndSendMessages(3, jndiName);
          
          // Set up the expected values
          Map<String, String> expectedMetrics = new LinkedHashMap<String, String>();
@@ -1646,9 +1737,7 @@
      private void checkQueueMetricTimeLastUpdate(String jndiName) throws Exception {
          
          // Send a message to the queue
-         QueueSession session = createQueueSession();
-         Queue queue = getQueue(jndiName);
-         sendMessages(session, queue, 1);
+         createQueueSessionAndSendMessages(1, jndiName);
          
     	 ArrayList<String> expectedMetric = new ArrayList<String>();
     	 expectedMetric.add(TIME_LAST_UPDATE);
@@ -1669,7 +1758,6 @@
                                           Map<String, String> expectedMetrics,
                                           ArrayList<String> summaryMetrics,
                                           DestinationType destinationType) throws Exception {
-    	 
          checkResourceMetrics(JMS_NAV_LABEL, destinationType.getNavLabel(), 
                               jndiName, expectedMetrics, summaryMetrics);
 
@@ -1677,4 +1765,1307 @@
     	 disconnect();
     	 deleteDestination(destinationType, jndiName);  
      }
+     
+     /*
+      * OPERATIONS TESTS
+      */
+     
+     /* OPERATION #1 - REMOVE ALL MESSAGES - APPLIES TO TOPICS AND QUEUES */
+     
+     /**
+      * Test Name: testRemoveAllMessagesAfterTopicCreation
+      * Assertion: Verify that the metrics remain unchanged
+      * after executing the "Remove All Messages" operation for a topic
+      * when there are no messages.
+      */
+     public void testRemoveAllMessagesAfterTopicCreation() throws Exception {
+         String jndiName = "RemoveAllMessagesAfterTopicCreation"; 
+
+         // Create the topic first
+         createTopic(jndiName);
+
+         // Set up the expected values
+         Map<String, String> expectedMetrics = new LinkedHashMap<String, String>();
+         expectedMetrics.put(ALL_MSG_COUNT, "0.0");
+         expectedMetrics.put(ALL_SUB_COUNT, "0.0");
+         expectedMetrics.put(DURABLE_MSG_COUNT, "0.0");
+         expectedMetrics.put(NON_DURABLE_MSG_COUNT, "0.0");
+         expectedMetrics.put(DURABLE_SUB_COUNT, "0.0");
+         expectedMetrics.put(NON_DURABLE_SUB_COUNT, "0.0");
+
+         performDestinationOperationAndCheckMetrics(DestinationType.TOPIC, 
+                                                    jndiName, REMOVE_ALL_MSGS,
+                                                    expectedMetrics,
+                                                    getTopicSummaryMetrics());
+     }
+     
+     /**
+      * Test Name: testTopicRemoveAllMessagesAfterMultipleMessages
+      * Assertion: Verify that the metrics are updated accordingly
+      * after executing the "Remove All Messages" operation for a topic
+      * when the topic has multiple messages.
+      */
+     public void DISABLEDtestTopicRemoveAllMessagesAfterMultipleMessages() throws Exception {
+         String jndiName = "TopicRemoveAllMessagesAfterMultipleMessages"; 
+
+         // Create the topic first
+         createTopic(jndiName);
+         topicRemoveAllMessagesAfterMultipleMessages(jndiName);
+     }
+     
+     /**
+      * Test Name: testTopicRemoveAllMessagesAfterMultipleMessagesUsingExistingServiceFile
+      * Assertion: Verify that the metrics are updated accordingly
+      * after executing the "Remove All Messages" operation for a topic
+      * when the topic has multiple messages. Use a topic that already exists.
+      */
+     public void DISABLEDtestTopicRemoveAllMessagesAfterMultipleMessagesUsingExistingServiceFile() throws Exception {
+         String jndiName = "RemoveAllMessagesMultipleMessagesExistingTopic";
+         
+         expandNavTreeArrow(JMS_NAV_LABEL); 
+         topicRemoveAllMessagesAfterMultipleMessages(jndiName);
+     }
+     
+     /**
+      * Common code for the testTopicRemoveAllMessagesAfterMultipleMessages*
+      * tests.
+      */
+     private void topicRemoveAllMessagesAfterMultipleMessages(String jndiName) throws Exception {
+         createTopicSessionAndSendMessages(2, jndiName);
+         
+         // Wait for messages to be delivered before removing them
+         Thread.sleep(10000);
+         
+         // Set up the expected values
+         Map<String, String> expectedMetrics = new LinkedHashMap<String, String>();
+         expectedMetrics.put(ALL_MSG_COUNT, "0.0");
+         expectedMetrics.put(ALL_SUB_COUNT, "2.0");
+         expectedMetrics.put(DURABLE_MSG_COUNT, "0.0");
+         expectedMetrics.put(NON_DURABLE_MSG_COUNT, "0.0");
+         expectedMetrics.put(DURABLE_SUB_COUNT, "1.0");
+         expectedMetrics.put(NON_DURABLE_SUB_COUNT, "1.0");
+
+         performDestinationOperationAndCheckMetrics(DestinationType.TOPIC, 
+                                                    jndiName, REMOVE_ALL_MSGS,
+                                                    expectedMetrics,
+                                                    getTopicSummaryMetrics());
+     }
+     
+     /**
+      * Test Name: testRemoveAllMessagesAfterQueueCreation
+      * Assertion: Verify that the metrics remain unchanged
+      * after executing the "Remove All Messages" operation for a queue
+      * when there are no messages.
+      */
+     public void testRemoveAllMessagesAfterQueueCreation() throws Exception {
+
+         String jndiName = "RemoveAllMessagesMAfterQueueCreation"; 
+
+         // Create the queue first
+         createQueue(jndiName);
+
+         // Set up the expected values
+         Map<String, String> expectedMetrics = new LinkedHashMap<String, String>();
+         expectedMetrics.put(CONSUMER_COUNT, "0.0");
+         expectedMetrics.put(DELIVERING_COUNT, "0.0");
+         expectedMetrics.put(MSG_COUNT, "0.0");
+         expectedMetrics.put(SCHEDULED_MSG_COUNT, "0.0");
+         expectedMetrics.put(COUNT, "0.0");
+         expectedMetrics.put(COUNT_DELTA, "0.0");
+         expectedMetrics.put(DEPTH, "0.0");
+         expectedMetrics.put(DEPTH_DELTA, "0.0");
+         
+         performDestinationOperationAndCheckMetrics(DestinationType.QUEUE, 
+                                                    jndiName, REMOVE_ALL_MSGS,
+                                                    expectedMetrics,
+                                                    getQueueSummaryMetrics());
+     }
+     
+     /**
+      * Test Name: testQueueRemoveAllMessagesAfterMultipleMessages
+      * Assertion: Verify that the metrics are updated appropriately
+      * after executing the "Remove All Messages" operation for a queue
+      * when there are multiple messages in the queue. 
+      */
+     public void DISABLEDtestQueueRemoveAllMessagesAfterMultipleMessages() throws Exception {
+         String jndiName = "QueueRemoveAllMessagesAfterMultipleMessages";
+         
+         // Create the queue first
+         createQueue(jndiName);
+         queueRemoveAllMessagesAfterMultipleMessages(jndiName);
+     }
+     
+     /**
+      * Test Name: testQueueRemoveAllMessagesAfterMultipleMessagesUsingExistingServicefile
+      * Assertion: Verify that the metrics are updated appropriately
+      * after executing the "Remove All Messages" operation for a queue
+      * when there are multiple messages in the queue. Use a queue that
+      * already exists.
+      */
+     public void DISABLEDtestQueueRemoveAllMessagesAfterMultipleMessagesUsingExistingServiceFile() throws Exception {
+         String jndiName = "RemoveAllMessagesMultipleMessagesExistingQueue";
+         
+         expandNavTreeArrow(JMS_NAV_LABEL); 
+         queueRemoveAllMessagesAfterMultipleMessages(jndiName);
+     }
+     
+     /**
+      * Common code for the testQueueRemoveAllMessagesAfterMultipleMessages*
+      * tests.
+      */
+     private void queueRemoveAllMessagesAfterMultipleMessages(String jndiName) throws Exception {
+         createQueueSessionAndSendMessages(2, jndiName);
+         
+         // Wait for messages to be delivered before removing them
+         Thread.sleep(10000);
+         
+         // Set up the expected values
+         Map<String, String> expectedMetrics = new LinkedHashMap<String, String>();
+         expectedMetrics.put(CONSUMER_COUNT, "0.0");
+         expectedMetrics.put(DELIVERING_COUNT, "0.0");
+         expectedMetrics.put(MSG_COUNT, "0.0");
+         expectedMetrics.put(SCHEDULED_MSG_COUNT, "0.0");
+         expectedMetrics.put(COUNT, "2.0");
+         expectedMetrics.put(COUNT_DELTA, "2.0");
+         expectedMetrics.put(DEPTH, "0.0");
+         expectedMetrics.put(DEPTH_DELTA, "0.0");
+         
+         performDestinationOperationAndCheckMetrics(DestinationType.QUEUE, 
+                                                    jndiName, REMOVE_ALL_MSGS,
+                                                    expectedMetrics,
+                                                    getQueueSummaryMetrics());
+     }
+     
+     /* OPERATION #2 - RESET MESSAGE COUNTER - APPLIES TO QUEUES ONLY */
+     
+     /**
+      * Test Name: testResetMessageCounterAfterQueueCreation
+      * Assertion: Verify that the queue metrics are correct
+      * after executing the "Reset Message Counter" operation for a queue
+      * right after creation.
+      */
+     public void testResetMessageCounterAfterQueueCreation() throws Exception {
+         String jndiName = "ResetMessageCounterAfterQueueCreation"; 
+
+         // Create the queue first
+         createQueue(jndiName);
+         
+         // Set up the expected values
+         Map<String, String> expectedMetrics = new LinkedHashMap<String, String>();
+         expectedMetrics.put(CONSUMER_COUNT, "0.0");
+         expectedMetrics.put(DELIVERING_COUNT, "0.0");
+         expectedMetrics.put(MSG_COUNT, "0.0");
+         expectedMetrics.put(SCHEDULED_MSG_COUNT, "0.0");
+         expectedMetrics.put(COUNT, "0.0");
+         expectedMetrics.put(COUNT_DELTA, "0.0");
+         expectedMetrics.put(DEPTH, "0.0");
+         expectedMetrics.put(DEPTH_DELTA, "0.0");
+         
+         performDestinationOperationAndCheckMetrics(DestinationType.QUEUE, 
+                                                    jndiName, RESET_MSG_COUNTER,
+                                                    expectedMetrics,
+                                                    getQueueSummaryMetrics());
+     }
+     
+     /**
+      * Test Name: testQueueResetMessageCounterAfterMultipleMessages
+      * Assertion: Verify that the queue metrics are correct
+      * after executing the "Reset Message Counter" operation for a queue
+      * when there are multiple messages in the queue.
+      */
+     public void testQueueResetMessageCounterAfterMultipleMessages() throws Exception {
+         String jndiName = "QueueResetMessageCounterAfterMultipleMessages"; 
+
+         // Create the queue first
+         createQueue(jndiName);   
+         resetMessageCounterAfterMultipleMessages(jndiName);
+     }
+     
+     /**
+      * Test Name: testQueueResetMessageCounterAfterMultipleMessagesUsingExistingServiceFile
+      * Assertion: Verify that the queue metrics are correct
+      * after executing the "Reset Message Counter" operation for a queue
+      * when there are multiple messages in the queue. Use a queue that 
+      * already exists.
+      */
+     public void testQueueResetMessageCounterAfterMultipleMessagesUsingExistingServiceFile() throws Exception {
+         String jndiName = "ResetMessageCounterMultipleMessagesExistingQueue";
+        
+         expandNavTreeArrow(JMS_NAV_LABEL); 
+         resetMessageCounterAfterMultipleMessages(jndiName);
+     }
+      
+     
+     /**
+      * Common code for the testQueueResetMessageCounterAfterMultipleMessages*
+      * tests.
+      */
+     private void resetMessageCounterAfterMultipleMessages(String jndiName) throws Exception {
+         createQueueSessionAndSendMessages(3, jndiName);
+         
+         // Set up the expected values
+         Map<String, String> expectedMetrics = new LinkedHashMap<String, String>();
+         expectedMetrics.put(CONSUMER_COUNT, "0.0");
+         expectedMetrics.put(DELIVERING_COUNT, "0.0");
+         expectedMetrics.put(MSG_COUNT, "3.0");
+         expectedMetrics.put(SCHEDULED_MSG_COUNT, "0.0");
+         expectedMetrics.put(COUNT, "0.0");
+         expectedMetrics.put(COUNT_DELTA, "0.0");
+         expectedMetrics.put(DEPTH, "3.0");
+         expectedMetrics.put(DEPTH_DELTA, "3.0");
+         
+         performDestinationOperationAndCheckMetrics(DestinationType.QUEUE, 
+                                                    jndiName, RESET_MSG_COUNTER,
+                                                    expectedMetrics,
+                                                    getQueueSummaryMetrics());
+     }
+     
+     /* OPERATION #3 - RESET MESSAGE COUNTER HISTORY - APPLIES TO QUEUES ONLY */
+     
+     /**
+      * Test Name: testResetMessageCounterHistoryAfterQueueCreation
+      * Assertion: Verify that the queue metrics are correct after
+      * executing the "Reset Message Counter History" operation for a queue
+      * after creation.
+      */
+     public void testResetMessageCounterHistoryAfterQueueCreation() throws Exception {
+         String jndiName = "ResetMessageCounterHistoryAfterQueueCreation"; 
+
+         // Create the queue first
+         createQueue(jndiName);
+         
+         // Set up the expected values
+         Map<String, String> expectedMetrics = new LinkedHashMap<String, String>();
+         expectedMetrics.put(CONSUMER_COUNT, "0.0");
+         expectedMetrics.put(DELIVERING_COUNT, "0.0");
+         expectedMetrics.put(MSG_COUNT, "0.0");
+         expectedMetrics.put(SCHEDULED_MSG_COUNT, "0.0");
+         expectedMetrics.put(COUNT, "0.0");
+         expectedMetrics.put(COUNT_DELTA, "0.0");
+         expectedMetrics.put(DEPTH, "0.0");
+         expectedMetrics.put(DEPTH_DELTA, "0.0");
+         
+         performDestinationOperationAndCheckMetrics(DestinationType.QUEUE, 
+                                                    jndiName, RESET_MSG_COUNTER_HISTORY,
+                                                    expectedMetrics,
+                                                    getQueueSummaryMetrics());
+     }
+     
+     /**
+      * Test Name: testQueueResetMessageCounterHistoryAfterMultipleMessages
+      * Assertion: Verify that the queue metrics are correct after
+      * executing the "Reset Message Counter History" operation for a queue
+      * that has multiple messages.
+      */
+     public void testQueueResetMessageCounterHistoryAfterMultipleMessages() throws Exception {
+         String jndiName = "QueueResetMessageCounterHistoryAfterMultipleMessages"; 
+
+         // Create the queue first
+         createQueue(jndiName);   
+         queueResetMessageCounterHistoryAfterMultipleMessages(jndiName);
+     }
+     
+     /**
+      * Test Name: testQueueResetMessageCounterHistoryAfterMultipleMessagesUsingExistingServiceFile
+      * Assertion: Verify that the queue metrics are correct after
+      * executing the "Reset Message Counter History" operation for a queue
+      * that has multiple messages. Use a queue that already exists.
+      */
+     public void testQueueResetMessageCounterHistoryAfterMultipleMessagesUsingExsitingServiceFile() throws Exception {
+         String jndiName = "ResetMessageCounterHistoryMultipleMessagesExistingQueue";
+        
+         expandNavTreeArrow(JMS_NAV_LABEL);
+         queueResetMessageCounterHistoryAfterMultipleMessages(jndiName);
+     }
+     
+     /**
+      * Common code for the testQueueResetMessageCounterHistoryAfterMultipleMessages*
+      * tests.
+      */
+     private void queueResetMessageCounterHistoryAfterMultipleMessages(String jndiName) throws Exception {
+         createQueueSessionAndSendMessages(3, jndiName);
+         
+         // Set up the expected values
+         Map<String, String> expectedMetrics = new LinkedHashMap<String, String>();
+         expectedMetrics.put(CONSUMER_COUNT, "0.0");
+         expectedMetrics.put(DELIVERING_COUNT, "0.0");
+         expectedMetrics.put(MSG_COUNT, "3.0");
+         expectedMetrics.put(SCHEDULED_MSG_COUNT, "0.0");
+         expectedMetrics.put(COUNT, "3.0");
+         expectedMetrics.put(COUNT_DELTA, "3.0");
+         expectedMetrics.put(DEPTH, "3.0");
+         expectedMetrics.put(DEPTH_DELTA, "3.0");
+         
+         performDestinationOperationAndCheckMetrics(DestinationType.QUEUE, 
+                                                    jndiName, RESET_MSG_COUNTER_HISTORY,
+                                                    expectedMetrics,
+                                                    getQueueSummaryMetrics());
+     }
+     
+     /* OPERATION #4 - LIST ALL SUBSCRIPTIONS - APPLIES ONLY TO TOPICS */
+    
+     /**
+      * Test Name: testListAllSubscriptionsAfterTopicCreation
+      * Assertion: Make sure that the correct results get displayed
+      * after the "List All Subscriptions" operation is invoked for
+      * a topic right after creation.
+      */
+     public void testListAllSubscriptionsAfterTopicCreation() throws Exception {
+         String jndiName = "ListAllSubscriptionsAfterTopicCreation"; 
+
+         // Create the topic first
+         createTopic(jndiName);
+         
+         performListSubscriptionsAndCheckResults(jndiName, LIST_ALL_SUB, Boolean.TRUE);
+     }
+     
+     
+     /**
+      * Test Name: testTopicListAllSubscriptionsAfterMultipleSubscribers
+      * Assertion: Verify that the correct results get displayed after invoking 
+      * the "List All Subscriptions" operation for a topic that has multiple subscribers.
+      */
+     public void testTopicListAllSubscriptionsAfterMultipleSubscribers() throws Exception {
+         String jndiName = "ListAllSubscriptionsAfterMultipleSubscribers"; 
+
+         // Create the topic first
+         createTopic(jndiName);
+         
+         listAllSubscriptionsAfterMultipleSubscribers(jndiName);
+     }
+     
+     /**
+      * Test Name: testTopicListAllSubscriptionsAfterMultipleSubscribersUsingExistingServiceFile
+      * Assertion: Verify that the correct results get displayed after invoking 
+      * the "List All Subscriptions" operation for a topic that has multiple subscribers.
+      * Use a topic that already exists.
+      */
+     public void testTopicListAllSubscriptionsAfterMultipleSubscribersUsingExistingServiceFile() throws Exception {
+         String jndiName = "ListAllSubscriptionsMultipleSubscribersExistingTopic"; 
+
+         expandNavTreeArrow(JMS_NAV_LABEL);
+         listAllSubscriptionsAfterMultipleSubscribers(jndiName);
+     }
+
+     /**
+      * Common code for the testListAllSubscriptionsAfterMultipleSubscribers* tests.
+      */
+     private void listAllSubscriptionsAfterMultipleSubscribers(String jndiName) throws Exception {
+         TopicSession session = createTopicSession();
+         Topic topic = getTopic(jndiName);
+
+         // Create multiple subscriptions (2 durable ones, 2 non-durable ones)
+         for(int i = 0; i < 2; i++) {
+             createDurableTopicSubscriber(session, topic, jndiName + "Subscriber" + i);
+             createNonDurableTopicSubscriber(session, topic);
+         }
+         
+         performListSubscriptionsAndCheckResults(jndiName, LIST_ALL_SUB, 
+                                                 Boolean.FALSE);
+     }
+     
+     /* OPERATION #5 - LIST DURABLE SUBSCRIPTIONS - APPLIES TO TOPICS ONLY */
+     
+     /**
+      * Test Name: testListDurableSubscriptionsAfterTopicCreation
+      * Assertion: Make sure that the correct results get displayed
+      * after the "List Durable Subscriptions" operation is invoked for
+      * a topic right after creation.
+      */
+     public void testListDurableSubscriptionsAfterTopicCreation() throws Exception {
+         String jndiName = "ListDurableSubscriptionsAfterTopicCreation"; 
+
+         // Create the topic first
+         createTopic(jndiName);
+         
+         performListSubscriptionsAndCheckResults(jndiName, LIST_DURABLE_SUB, Boolean.TRUE);
+     }
+    
+     /**
+      * Test Name: testTopicListDurableSubscriptionsAfterMultipleSubscribers
+      * Assertion: Verify that the correct results get displayed after invoking 
+      * the "List Durable Subscriptions" operation for a topic that has multiple 
+      * durable subscribers.
+      */
+     public void testTopicListDurableSubscriptionsAfterMultipleSubscribers() throws Exception {
+         String jndiName = "ListDurableSubscriptionsAfterMultipleSubscribers"; 
+
+         // Create the topic first
+         createTopic(jndiName);
+         
+         listDurableSubscriptionsAfterMultipleSubscribers(jndiName);
+     }
+     
+     /**
+      * Test Name: testTopicListDurableSubscriptionsAfterMultipleSubscribersUsingExistingServiceFile
+      * Assertion: Verify that the correct results get displayed after invoking 
+      * the "List Durable Subscriptions" operation for a topic that has multiple 
+      * durable subscribers. Use a topic that already exists.
+      */
+     public void testTopicListDurableSubscriptionsAfterMultipleSubscribersUsingExistingServiceFile() throws Exception {
+         String jndiName = "ListDurableSubscriptionsMultipleSubscribersExistingTopic"; 
+
+         expandNavTreeArrow(JMS_NAV_LABEL);
+         listDurableSubscriptionsAfterMultipleSubscribers(jndiName);
+     }
+     
+     /**
+      * Common code for the testListDurableSubscriptionsAfterMultipleSubscribers* tests.
+      */
+     private void listDurableSubscriptionsAfterMultipleSubscribers(String jndiName) throws Exception {
+         createTopicSessionAndDurableSubscribers(2, jndiName);
+         
+         performListSubscriptionsAndCheckResults(jndiName, LIST_DURABLE_SUB, 
+                                                 Boolean.FALSE);
+     }
+     
+     /* OPERATION #6 - LIST NON DURABLE SUBSCRIPTIONS - APPLIES TO TOPICS ONLY*/
+     
+     /**
+      * Test Name: testListNonDurableSubscriptionsAfterTopicCreation
+      * Assertion: Make sure that the correct results get displayed
+      * after the "List Non Durable Subscriptions" operation is invoked for
+      * a topic right after creation.
+      */
+     public void testListNonDurableSubscriptionsAfterTopicCreation() throws Exception {
+         String jndiName = "ListNonDurableSubscriptionsAfterTopicCreation"; 
+
+         // Create the topic first
+         createTopic(jndiName);
+         
+         performListSubscriptionsAndCheckResults(jndiName, LIST_NON_DURABLE_SUB, Boolean.TRUE);
+     }
+     
+     /**
+      * Test Name: testTopicListNonDurableSubscriptionsAfterMultipleSubscribers
+      * Assertion: Verify that the correct results get displayed after invoking 
+      * the "List Non Durable Subscriptions" operation for a topic that has multiple 
+      * non-durable subscribers.
+      */
+     public void testTopicListNonDurableSubscriptionsAfterMultipleSubscribers() throws Exception {
+         String jndiName = "ListNonDurableSubscriptionsAfterMultipleSubscribers"; 
+
+         // Create the topic first
+         createTopic(jndiName);
+         
+         listNonDurableSubscriptionsAfterMultipleSubscribers(jndiName);
+     }
+     
+     /**
+      * Test Name: testTopicListNonDurableSubscriptionsAfterMultipleSubscribersUsingExistingServiceFile
+      * Assertion: Verify that the correct results get displayed after invoking 
+      * the "List Non Durable Subscriptions" operation for a topic that has multiple 
+      * non-durable subscribers. Use a topic that already exists.
+      */
+     public void testTopicListNonDurableSubscriptionsAfterMultipleSubscribersUsingExistingServiceFile() throws Exception {
+         String jndiName = "ListNonDurableSubscriptionsMultipleSubscribersExistingTopic"; 
+
+         expandNavTreeArrow(JMS_NAV_LABEL);
+         listNonDurableSubscriptionsAfterMultipleSubscribers(jndiName);
+     }
+     
+     /**
+      * Common code for the testListNonDurableSubscriptionsAfterMultipleSubscribers* tests.
+      */
+     private void listNonDurableSubscriptionsAfterMultipleSubscribers(String jndiName) throws Exception {
+         createTopicSessionAndNonDurableSubscribers(2, jndiName);
+         
+         performListSubscriptionsAndCheckResults(jndiName, LIST_NON_DURABLE_SUB, 
+                                                 Boolean.FALSE);
+     }
+     
+     
+     /* OPERATION #7 - LIST MESSAGE COUNTER AS HTML - APPLIES TO QUEUES ONLY */
+     
+     /**
+      * Test Name: testListMessageCounterAsHTMLAfterQueueCreation
+      * Assertion: Make sure that the "List Message Counter As HTML" 
+      * operation for queues is executed successfully after creating
+      * a new queue.
+      */
+     public void testListMessageCounterAsHTMLAfterQueueCreation() throws Exception {
+         ArrayList<String> expectedValues = new ArrayList<String>();
+         
+         String jndiName = "ListMessageCounterAfterQueueCreation"; 
+
+         //Create the queue first
+         createQueue(jndiName);
+         
+         // Set up the expected result
+         StringBuffer expectedBuffer = new StringBuffer();
+         expectedBuffer.append(formatTableCell(DestinationType.QUEUE.getName()));
+         expectedBuffer.append(formatTableCell(DestinationType.QUEUE.getName() 
+                                               + "." + jndiName));
+         expectedBuffer.append(formatTableCell("-"));  // Subscription
+         expectedBuffer.append(formatTableCell("-"));  // Durable 
+         expectedBuffer.append(formatTableCell("0"));  // Count
+         expectedBuffer.append(formatTableCell("-"));  // Count delta
+         expectedBuffer.append(formatTableCell("0"));  // Depth
+         expectedBuffer.append(formatTableCell("-"));  // Depth delta
+         
+         expectedValues.add(expectedBuffer.toString());
+         
+         performListAsHtmlOperation(jndiName, 
+                                    DestinationType.QUEUE, 
+                                    LIST_MSG_COUNTER_AS_HTML, 
+                                    Boolean.FALSE,
+                                    expectedValues);     
+     }
+     
+     /**
+      * Test Name: testListMessageCounterAsHTMLAfterMultipleMessages
+      * Assertion: Make sure that the "List Message Counter As HTML" 
+      * operation for queues returns the correct results when the queue has
+      * multiple messages. 
+      */
+     public void testListMessageCounterAsHTMLAfterMultipleMessagess() throws Exception {
+         String jndiName = "ListMessageCounterAfterMultipleMessages";
+         
+         // Create the queue first
+         createQueue(jndiName);
+         
+         listMessageCounterAsHtmlAfterMultipleMessages(jndiName);
+     }
+     
+     /**
+      * Test Name: testListMessageCounterAsHTMLAfterMultipleMessagesUsingExistingServiceFile
+      * Assertion: Make sure that the "List Message Counter As HTML" 
+      * operation for queues returns the correct results when the queue has
+      * multiple messages. Use a queue that already exists.
+      */
+     public void testListMessageCounterAsHTMLAfterMultipleMessagesUsingExistingServiceFile() throws Exception {
+         String jndiName = "ListMessageCounterMultipleMessagesExistingQueue";
+         expandNavTreeArrow(JMS_NAV_LABEL);
+         
+         listMessageCounterAsHtmlAfterMultipleMessages(jndiName); 
+     }
+     
+     /**
+      * Common code for the testListMessageCounterAsHTMLAfterMultipleMessages* tests.
+      */
+     private void listMessageCounterAsHtmlAfterMultipleMessages(String jndiName) throws Exception {
+         ArrayList<String> expectedValues = new ArrayList<String>();
+         
+         // Send some messages to the queue
+         createQueueSessionAndSendMessages(2, jndiName);
+         
+         // Set up the expected result
+         StringBuffer expectedBuffer = new StringBuffer();
+         expectedBuffer.append(formatTableCell(DestinationType.QUEUE.getName()));
+         expectedBuffer.append(formatTableCell(DestinationType.QUEUE.getName()
+                                               + "." + jndiName));
+         expectedBuffer.append(formatTableCell("-"));  // Subscription
+         expectedBuffer.append(formatTableCell("-"));  // Durable 
+         expectedBuffer.append(formatTableCell("2"));  // Count
+         expectedBuffer.append(formatTableCell("2"));  // Count delta
+         expectedBuffer.append(formatTableCell("2"));  // Depth
+         expectedBuffer.append(formatTableCell("2"));  // Depth delta
+         
+         expectedValues.add(expectedBuffer.toString());
+         
+         performListAsHtmlOperation(jndiName, 
+                                    DestinationType.QUEUE, 
+                                    LIST_MSG_COUNTER_AS_HTML, 
+                                    Boolean.FALSE,
+                                    expectedValues);
+     }
+     
+     /* OPERATION #8 - LIST MESSAGE COUNTER HISTORY AS HTML - APPLIES TO QUEUES ONLY*/
+     
+     /**
+      * Test Name: testListMessageCounterHistoryAsHTMLAfterQueueCreation
+      * Assertion: Make sure that the "List Message Counter History As HTML" 
+      * operation for queues returns the correct results after creating
+      * a new queue.
+      */
+     public void testListMessageCounterHistoryAsHTMLAfterQueueCreation() throws Exception {
+         String jndiName = "ListMessageCounterHistoryAfterQueueCreation"; 
+         
+         ArrayList<String> expectedValue = new ArrayList<String>();
+         expectedValue.add("");
+
+         //Create the queue first
+         createQueue(jndiName);
+         
+         performListAsHtmlOperation(jndiName, 
+                                    DestinationType.QUEUE, 
+                                    LIST_MSG_COUNTER_HISTORY_AS_HTML, 
+                                    Boolean.FALSE,
+                                    expectedValue);
+     }
+     
+     /**
+      * Test Name: testListMessageCounterHistoryAsHTMLUsingExistingServiceFile
+      * Assertion: Make sure that the "List Message Counter History As HTML" 
+      * operation for queues returns the correct results. Use a queue that already
+      * exists.
+      */
+     public void testListMessageCounterHistoryAsHTMLUsingExistingServiceFile() throws Exception {
+         String jndiName = "ListMessageCounterHistoryExistingQueue";
+         
+         ArrayList<String> expectedValue = new ArrayList<String>();
+         expectedValue.add("");
+         
+         expandNavTreeArrow(JMS_NAV_LABEL);
+         
+         performListAsHtmlOperation(jndiName, 
+                                    DestinationType.QUEUE, 
+                                    LIST_MSG_COUNTER_HISTORY_AS_HTML, 
+                                    Boolean.FALSE,
+                                    expectedValue); 
+     }
+     
+     /* OPERATION #9 - LIST DURABLE SUBSCRIPTIONS AS HTML - APPLIES TO TOPICS ONLY */
+     
+     /**
+      * Test Name: testListDurableSubscriptionsAsHTMLAfterTopicCreation
+      * Assertion: Make sure that the "List Durable Subscriptions As HTML" 
+      * operation for topics returns the correct results after creating
+      * a new topic.
+      */
+     public void testListDurableSubscriptionsAsHTMLAfterTopicCreation() throws Exception {
+         String jndiName = "ListDurableSubscriptionsHtmlAfterTopicCreation"; 
+
+         // Create the topic first
+         createTopic(jndiName);
+         
+         performListAsHtmlOperationAfterCreation(jndiName, 
+                                                 DestinationType.TOPIC, 
+                                                 LIST_DURABLE_SUB_AS_HTML, 
+                                                 Boolean.FALSE);
+     }
+     
+     /**
+      * Test Name: testListDurableSubscriptionsAsHTMLAfterMultipleSubscribers
+      * Assertion: Make sure that the "List Durable Subscriptions As HTML" 
+      * operation for topics returns the correct results when the topic
+      * has multiple durable subscribers.
+      */
+     public void testListDurableSubscriptionsAsHTMLAfterMultipleSubscribers() 
+         throws Exception {
+         
+         String jndiName = "ListDurableSubscriptionsHtmlAfterMultipleSubscribers";
+         createTopic(jndiName);
+         
+         listDurableSubscriptionsAsHtmlAfterMultipleSubscribers(jndiName);
+     }
+     
+     /**
+      * Test Name: testListDurableSubscriptionsAsHTMLAfterMultipleSubscribersUsingExistingServiceFile
+      * Assertion: Make sure that the "List Durable Subscriptions As HTML" 
+      * operation for topics returns the correct results when the topic
+      * has multiple durable subscribers. Use a topic that already exists.
+      */
+     public void testListDurableSubscriptionsAsHTMLAfterMultipleSubscribersUsingExistingServiceFile() 
+         throws Exception {
+         
+         String jndiName = "ListDurableSubscriptionsHtmlMultipleSubscribersExistingTopic";
+         expandNavTreeArrow(JMS_NAV_LABEL);
+         
+         listDurableSubscriptionsAsHtmlAfterMultipleSubscribers(jndiName);
+     }
+     
+     /**
+      * Common code for the listDurableSubscriptionsAfterMultipleSubscribers* tests.
+      */
+     private void listDurableSubscriptionsAsHtmlAfterMultipleSubscribers(String jndiName) throws Exception {
+         ArrayList<String> expectedValues = new ArrayList<String>();
+         
+         // Create some durable subscribers
+         createTopicSessionAndDurableSubscribers(2, jndiName);
+         
+         // Set up the expected result
+         StringBuffer expectedBuffer1 = new StringBuffer();
+         expectedBuffer1.append(formatTableCell(CLIENT_ID + "." + jndiName + "Subscriber0")); // Id
+         expectedBuffer1.append(formatTableCell(DURABLE)); // Durable
+         expectedBuffer1.append(formatTableCell(jndiName + "Subscriber0"));  // Subscription Name
+         expectedBuffer1.append(formatTableCell(CLIENT_ID));  // Client Id
+         expectedBuffer1.append(formatTableCell(""));  // Selector
+         expectedBuffer1.append(formatTableCell("0"));  // Message Count
+         
+         expectedValues.add(expectedBuffer1.toString());
+         
+         StringBuffer expectedBuffer2 = new StringBuffer();
+         expectedBuffer2.append(formatTableCell(CLIENT_ID + "." + jndiName + "Subscriber1")); // Id
+         expectedBuffer2.append(formatTableCell(DURABLE)); // Durable
+         expectedBuffer2.append(formatTableCell(jndiName + "Subscriber1"));  // Subscription Name
+         expectedBuffer2.append(formatTableCell(CLIENT_ID));  // Client Id
+         expectedBuffer2.append(formatTableCell(""));  // Selector
+         expectedBuffer2.append(formatTableCell("0"));  // Message Count
+         
+         expectedValues.add(expectedBuffer2.toString());
+         
+         performListAsHtmlOperation(jndiName, 
+                                    DestinationType.TOPIC, 
+                                    LIST_DURABLE_SUB_AS_HTML, 
+                                    Boolean.FALSE,
+                                    expectedValues);
+     }
+     
+     /* OPERATION #10 - LIST NON DURABLE SUBSCRIPTIONS AS HTML - APPPLIES ONLY TO TOPICS */
+     
+     /**
+      * Test Name: testListNonDurableSubscriptionsAsHTMLAfterTopicCreation
+      * Assertion: Make sure that the "List Non Durable Subscriptions As HTML" 
+      * operation for topics returns the correct results after creating
+      * a new topic.
+      */
+     public void testListNonDurableSubscriptionsAsHTMLAfterTopicCreation() throws Exception {
+         String jndiName = "ListNonDurableSubscriptionsHtmlAfterTopicCreation"; 
+
+         // Create the topic first
+         createTopic(jndiName);
+          
+         performListAsHtmlOperationAfterCreation(jndiName, 
+                                                 DestinationType.TOPIC, 
+                                                 LIST_NON_DURABLE_SUB_AS_HTML, 
+                                                 Boolean.FALSE);
+     }
+     
+     /**
+      * Test Name: testListNonDurableSubscriptionsAsHTMLAfterMultipleSubscribers
+      * Assertion: Make sure that the "List Non Durable Subscriptions As HTML" 
+      * operation for topics returns the correct results when the topic
+      * has multiple non durable subscribers.
+      */
+     public void testListNonDurableSubscriptionsAsHTMLAfterMultipleSubscribers() 
+         throws Exception {
+         
+         String jndiName = "ListNonDurableSubscriptionsHtmlAfterMultipleSubscribers";
+         createTopic(jndiName);
+         
+         listNonDurableSubscriptionsAsHtmlAfterMultipleSubscribers(jndiName);
+     }
+     
+     /**
+      * Test Name: testListNonDurableSubscriptionsAsHTMLAfterMultipleSubscribersUsingExistingServiceFile
+      * Assertion: Make sure that the "List Non Durable Subscriptions As HTML" 
+      * operation for topics returns the correct results when the topic
+      * has multiple non durable subscribers. Use a topic that already exists.
+      */
+     public void testListNonDurableSubscriptionsAsHTMLAfterMultipleSubscribersUsingExistingServiceFile() 
+         throws Exception {
+         
+         String jndiName = "ListNonDurableSubscriptionsHtmlMultipleSubscribersExistingTopic";
+         expandNavTreeArrow(JMS_NAV_LABEL);
+         
+         listNonDurableSubscriptionsAsHtmlAfterMultipleSubscribers(jndiName);
+     }
+     
+     /**
+      * Common code for the listNonDurableSubscriptionsAfterMultipleSubscribers* tests.
+      */
+     private void listNonDurableSubscriptionsAsHtmlAfterMultipleSubscribers(String jndiName) throws Exception {
+         ArrayList<String> expectedValues = new ArrayList<String>();
+         
+         // Create some non durable subscribers
+         createTopicSessionAndNonDurableSubscribers(2, jndiName);
+         
+         // Set up the expected result
+         StringBuffer expectedBuffer = new StringBuffer();
+         expectedBuffer.append(formatTableCell(NON_DURABLE)); // Durable
+         expectedBuffer.append(formatTableCell(""));  // Subscription Name
+         expectedBuffer.append(formatTableCell(""));  // Client Id
+         expectedBuffer.append(formatTableCell(""));  // Selector
+         expectedBuffer.append(formatTableCell("0"));  // Message Count
+         
+         expectedValues.add(expectedBuffer.toString());
+         
+         performListAsHtmlOperation(jndiName, 
+                                    DestinationType.TOPIC, 
+                                    LIST_NON_DURABLE_SUB_AS_HTML, 
+                                    Boolean.FALSE,
+                                    expectedValues);
+     }
+     
+     /* OPERATION #11 - LIST ALL SUBSCRIPTIONS AS HTML - APPPLIES ONLY TO TOPICS */
+     
+     /**
+      * Test Name: testListAllSubscriptionsAsHTMLAfterTopicCreation
+      * Assertion: Make sure that the "List All Subscriptions As HTML" 
+      * operation for topics returns the correct results after creating
+      * a new topic.
+      */
+     public void testListAllSubscriptionsAsHTMLAfterTopicCreation() throws Exception {
+         String jndiName = "ListAllSubscriptionsHtmlAfterTopicCreation"; 
+
+         // Create the topic first
+         createTopic(jndiName);
+         
+         performListAsHtmlOperationAfterCreation(jndiName, 
+                                                 DestinationType.TOPIC, 
+                                                 LIST_ALL_SUB_AS_HTML, 
+                                                 Boolean.FALSE);
+     }
+     
+     /**
+      * Test Name: testListAllSubscriptionsAsHTMLAfterMultipleSubscribers
+      * Assertion: Make sure that the "List All Subscriptions As HTML" 
+      * operation for topics returns the correct results when the topic
+      * has multiple durable subscribers.
+      */
+     public void testListAllSubscriptionsAsHTMLAfterMultipleSubscribers() 
+         throws Exception {
+         
+         String jndiName = "ListAllSubscriptionsHtmlAfterMultipleSubscribers";
+         createTopic(jndiName);
+         
+         listAllSubscriptionsAsHtmlAfterMultipleSubscribers(jndiName);
+     }
+     
+     /**
+      * Test Name: testListAllSubscriptionsAsHTMLAfterMultipleSubscribersUsingExistingServiceFile
+      * Assertion: Make sure that the "List All Subscriptions As HTML" 
+      * operation for topics returns the correct results when the topic
+      * has multiple durable subscribers. Use a topic that already exists.
+      */
+     public void testListAllSubscriptionsAsHTMLAfterMultipleSubscribersUsingExistingServiceFile() 
+         throws Exception {
+         
+         String jndiName = "ListAllSubscriptionsHtmlMultipleSubscribersExistingTopic";
+         expandNavTreeArrow(JMS_NAV_LABEL);
+         
+         listAllSubscriptionsAsHtmlAfterMultipleSubscribers(jndiName);
+     }
+     
+     /**
+      * Common code for the listAllSubscriptionsAfterMultipleSubscribers* tests.
+      */
+     private void listAllSubscriptionsAsHtmlAfterMultipleSubscribers(String jndiName) throws Exception {
+         ArrayList<String> expectedValues = new ArrayList<String>();
+         
+         // Create a non-durable and durable subscriber
+         createTopicSessionAndMultipleSubscribers(1, jndiName);
+         
+         // Set up the expected result
+         StringBuffer expectedBuffer1 = new StringBuffer();
+         expectedBuffer1.append(formatTableCell(NON_DURABLE)); // Durable
+         expectedBuffer1.append(formatTableCell(""));  // Subscription Name
+         expectedBuffer1.append(formatTableCell(""));  // Client Id
+         expectedBuffer1.append(formatTableCell(""));  // Selector
+         expectedBuffer1.append(formatTableCell("0"));  // Message Count
+        
+         expectedValues.add(expectedBuffer1.toString());
+         
+         StringBuffer expectedBuffer2 = new StringBuffer();
+         expectedBuffer2.append(TABLE_ROW_DELIM);
+         expectedBuffer2.append(formatTableCell(CLIENT_ID + "." + jndiName + "Subscriber0")); // Id
+         expectedBuffer2.append(formatTableCell(DURABLE)); // Durable
+         expectedBuffer2.append(formatTableCell(jndiName + "Subscriber0"));  // Subscription Name
+         expectedBuffer2.append(formatTableCell(CLIENT_ID));  // Client Id
+         expectedBuffer2.append(formatTableCell(""));  // Selector
+         expectedBuffer2.append(formatTableCell("0"));  // Message Count
+         
+         expectedValues.add(expectedBuffer2.toString());
+         
+         performListAsHtmlOperation(jndiName, 
+                                    DestinationType.TOPIC, 
+                                    LIST_ALL_SUB_AS_HTML, 
+                                    Boolean.FALSE,
+                                    expectedValues);
+     }
+     
+     /**
+      * Common code for the List*AsHTML tests.
+      */
+     private void performListAsHtmlOperation(String jndiName, 
+                                             DestinationType destinationType,
+                                             String operationName,
+                                             Boolean takesParameters,
+                                             ArrayList<String> expectedValues) throws Exception {
+         
+         performResourceOperation(JMS_NAV_LABEL, destinationType.getNavLabel(), 
+                                  jndiName, operationName, takesParameters);
+         
+         // Click on the "Show/Hide Details" link
+         HtmlAnchor detailsLink = getLinkInsideForm(OPERATION_HISTORY_FORM, OPERATION_DETAILS);
+         detailsLink.click();
+         
+         // Get the result of the operation
+         HtmlForm form = (HtmlForm)client.getElement(OPERATION_HISTORY_FORM);
+         HtmlInput input = (HtmlInput)form.getFirstByXPath(".//input[@class='property-value-input']");
+         assertNotNull("Could not get the result of the operation", input);
+         
+         String result = input.getValueAttribute();
+         
+         String shortenedResult = result.substring(result.indexOf(TABLE_CELL_DELIM),
+                                                   result.lastIndexOf(TABLE_ROW_END_DELIM));
+         
+         log.info("Operation result was: " + shortenedResult);
+         
+         assertFalse("The result of the operation was an empty string", result.equals(""));
+         for(int i = 0; i < expectedValues.size(); i++) {
+             assertTrue("Expected the result to contain:\n\n" + expectedValues.get(i) + "\n\nbut was:\n\n" + shortenedResult,
+                         shortenedResult.contains(expectedValues.get(i)));
+         }
+         
+         // Clean up
+         disconnect();
+         deleteDestination(destinationType, jndiName); 
+     }
+     
+     /**
+      * Common code for the List*AsHTML*After*Creation tests.
+      */
+     private void performListAsHtmlOperationAfterCreation(String jndiName, 
+                                                          DestinationType destinationType,
+                                                          String operationName,
+                                                          Boolean takesParameters) throws Exception {
+         
+         performResourceOperation(JMS_NAV_LABEL, destinationType.getNavLabel(), 
+                                  jndiName, operationName, takesParameters);
+         
+         // Click on the "Show/Hide Details" link
+         HtmlAnchor detailsLink = getLinkInsideForm(OPERATION_HISTORY_FORM, OPERATION_DETAILS);
+         detailsLink.click();
+         
+         // Get the result of the operation
+         HtmlForm form = (HtmlForm)client.getElement(OPERATION_HISTORY_FORM);
+         HtmlInput input = (HtmlInput)form.getFirstByXPath(".//input[@class='property-value-input']");
+         assertNotNull("Could not get the result of the operation", input);
+         
+         String result = input.getValueAttribute();
+         
+         log.info("Operation result was: " + result);
+         
+         assertFalse("The result of the operation was an empty string", result.equals(""));
+         
+         // Clean up
+         disconnect();
+         deleteDestination(destinationType, jndiName); 
+     }
+         
+     /* OPERATION #12 - CREATE - APPLIES TO TOPICS AND QUEUES */
+     
+     /**
+      * Test Name: testTopicCreateOperation
+      * Assertion: Make sure that the "Create" operation for topics is executed 
+      * successfully.
+      */
+     public void testTopicCreateOperation() throws Exception {
+         String jndiName = "TopicCreate"; 
+
+         // Create the topic first
+         createTopic(jndiName);  
+         performServletLifecycleOperation(jndiName, DestinationType.TOPIC, 
+                                          CREATE, Boolean.TRUE);
+     }
+     
+     /**
+      * Test Name: testTopicCreateOperationUsingExistingServiceFile
+      * Assertion: Make sure that the "Create" operation for topics is executed 
+      * successfully. Use a topic that already exists.
+      */
+     public void testTopicCreateOperationUsingExistingServiceFile() throws Exception {
+         String jndiName = "CreateOperationExistingTopic"; 
+         
+         expandNavTreeArrow(JMS_NAV_LABEL);
+         performServletLifecycleOperation(jndiName, DestinationType.TOPIC, 
+                                          CREATE, Boolean.TRUE);
+     }
+     
+     /**
+      * Test Name: testQueueCreateOperation
+      * Assertion: Make sure that the "Create" operation for queues is executed 
+      * successfully.
+      */
+     public void testQueueCreateOperation() throws Exception {
+         String jndiName = "QueueCreate"; 
+
+         // Create the queue first
+         createQueue(jndiName);  
+         performServletLifecycleOperation(jndiName, DestinationType.QUEUE, 
+                                          CREATE, Boolean.TRUE);
+     }
+     
+     /**
+      * Test Name: testQueueCreateOperationUsingExistingServiceFile
+      * Assertion: Make sure that the "Create" operation for queues is executed 
+      * successfully. Use a queue that already exists.
+      */
+     public void testQueueCreateOperationUsingExistingServiceFile() throws Exception {
+         String jndiName = "CreateOperationExistingQueue"; 
+         
+         expandNavTreeArrow(JMS_NAV_LABEL);
+         performServletLifecycleOperation(jndiName, DestinationType.QUEUE, 
+                                          CREATE, Boolean.TRUE);
+     }
+     
+     /* OPERATION #13 - START - APPLIES TO TOPICS AND QUEUES */
+     
+     /**
+      * Test Name: testTopicStartOperation
+      * Assertion: Make sure that the "Start" operation for topics is executed 
+      * successfully.
+      */
+     public void testTopicStartOperation() throws Exception {
+         String jndiName = "TopicStart"; 
+
+         // Create the topic first
+         createTopic(jndiName);
+         performServletLifecycleOperation(jndiName, DestinationType.TOPIC, 
+                                          START, Boolean.TRUE);
+         
+     }
+     
+     /**
+      * Test Name: testTopicStartOperationUsingExistingServiceFile
+      * Assertion: Make sure that the "Start" operation for topics is executed 
+      * successfully. Use a topic that already exists.
+      */
+     public void testTopicStartOperationUsingExistingServiceFile() throws Exception {
+         String jndiName = "StartOperationExistingTopic"; 
+
+         expandNavTreeArrow(JMS_NAV_LABEL);
+         performServletLifecycleOperation(jndiName, DestinationType.TOPIC, 
+                                          START, Boolean.TRUE);
+         
+     }
+     
+     /**
+      * Test Name: testQueueStartOperation
+      * Assertion: Make sure that the "Start" operation for queues is executed 
+      * successfully.
+      */
+     public void testQueueStartOperation() throws Exception {
+         String jndiName = "QueueStart"; 
+
+         // Create the queue first
+         createQueue(jndiName);
+         performServletLifecycleOperation(jndiName, DestinationType.QUEUE, 
+                                          START, Boolean.TRUE);
+         
+     }
+     
+     /**
+      * Test Name: testQueueStartOperationUsingExistingServiceFile
+      * Assertion: Make sure that the "Start" operation for queues is executed 
+      * successfully. Use a queue that already exists.
+      */
+     public void testQueueStartOperationUsingExistingServiceFile() throws Exception {
+         String jndiName = "StartOperationExistingQueue"; 
+
+         expandNavTreeArrow(JMS_NAV_LABEL);
+         performServletLifecycleOperation(jndiName, DestinationType.QUEUE, 
+                                          START, Boolean.TRUE);
+         
+     }
+     
+     /* OPERATION #14 - DESTROY - APPLIES TO TOPICS AND QUEUES */
+     
+     /**
+      * Test Name: testTopicDestroyOperation
+      * Assertion: Make sure that the "Destroy" operation for topics is executed 
+      * successfully.
+      */
+     public void testTopicDestroyOperation() throws Exception {
+         String jndiName = "TopicDestroy"; 
+
+         // Create the topic first
+         createTopic(jndiName);
+         performServletLifecycleOperation(jndiName, DestinationType.TOPIC, 
+                                          DESTROY, Boolean.FALSE);
+         
+     }
+     
+     /**
+      * Test Name: testTopicDestroyOperationUsingExistingServiceFile
+      * Assertion: Make sure that the "Destroy" operation for topics is executed 
+      * successfully. Use a topic that already exists.
+      */
+     public void testTopicDestroyOperationUsingExistingServiceFile() throws Exception {
+         String jndiName = "DestroyOperationExistingTopic"; 
+
+         expandNavTreeArrow(JMS_NAV_LABEL);
+         performServletLifecycleOperation(jndiName, DestinationType.TOPIC, 
+                                          DESTROY, Boolean.FALSE);
+         
+     }
+     
+     /**
+      * Test Name: testQueueDestroyOperation
+      * Assertion: Make sure that the "Destroy" operation for queues is executed 
+      * successfully.
+      */
+     public void testQueueDestroyOperation() throws Exception {
+         String jndiName = "QueueDestroy"; 
+
+         // Create the queue first
+         createQueue(jndiName);
+         performServletLifecycleOperation(jndiName, DestinationType.QUEUE, 
+                                          DESTROY, Boolean.FALSE);
+         
+     }
+     
+     /**
+      * Test Name: testQueueDestroyOperationUsingExistingServiceFile
+      * Assertion: Make sure that the "Destroy" operation for queues is executed 
+      * successfully. Use a queue that already exists.
+      */
+     public void testQueueDestroyOperationUsingExistingServiceFile() throws Exception {
+         String jndiName = "DestroyOperationExistingQueue"; 
+
+         expandNavTreeArrow(JMS_NAV_LABEL);
+         performServletLifecycleOperation(jndiName, DestinationType.QUEUE, 
+                                          DESTROY, Boolean.FALSE);
+         
+     }
+     
+     /* OPERATION #15 - STOP - APPLIES TO TOPICS AND QUEUES */
+     
+     /**
+      * Test Name: testTopicStopOperation
+      * Assertion: Make sure that the "Stop" operation for topics is executed 
+      * successfully.
+      */
+     public void testTopicStopOperation() throws Exception {
+         String jndiName = "TopicStop"; 
+
+         // Create the topic first
+         createTopic(jndiName);
+         performServletLifecycleOperation(jndiName, DestinationType.TOPIC, 
+                                          STOP, Boolean.FALSE);
+         
+     }
+     
+     /**
+      * Test Name: testTopicStopOperationUsingExistingServiceFile
+      * Assertion: Make sure that the "Stop" operation for topics is executed 
+      * successfully. Use a topic that already exists.
+      */
+     public void testTopicStopOperationUsingExistingServiceFile() throws Exception {
+         String jndiName = "StopOperationExistingTopic"; 
+
+         expandNavTreeArrow(JMS_NAV_LABEL);
+         performServletLifecycleOperation(jndiName, DestinationType.TOPIC, 
+                                          STOP, Boolean.FALSE);
+         
+     }
+     
+     /**
+      * Test Name: testQueueStopOperation
+      * Assertion: Make sure that the "Stop" operation for queues is executed 
+      * successfully.
+      */
+     public void testQueueStopOperation() throws Exception {
+         String jndiName = "QueueStop"; 
+
+         // Create the queue first
+         createQueue(jndiName);
+         performServletLifecycleOperation(jndiName, DestinationType.QUEUE, 
+                                          STOP, Boolean.FALSE);
+         
+     }
+     
+     /**
+      * Test Name: testQueueStopOperationUsingExistingServiceFile
+      * Assertion: Make sure that the "Stop" operation for queues is executed 
+      * successfully. Use a queue that already exists.
+      */
+     public void testQueueStopOperationUsingExistingServiceFile() throws Exception {
+         String jndiName = "StopOperationExistingQueue"; 
+
+         expandNavTreeArrow(JMS_NAV_LABEL);
+         performServletLifecycleOperation(jndiName, DestinationType.QUEUE, 
+                                          STOP, Boolean.FALSE);
+         
+     }
+        
+     /**
+      * Common code for the Create/Start/Stop/Destroy operations. 
+      */
+     private void performServletLifecycleOperation(String jndiName, 
+                                                   DestinationType destinationType,
+                                                   String operationName,
+                                                   Boolean isActiveDestination) throws Exception {
+        
+         performResourceOperation(JMS_NAV_LABEL, destinationType.getNavLabel(), 
+                                  jndiName, operationName, Boolean.FALSE);
+
+         // Make sure the correct parameters ("None") and the
+         // the correct results ("None") are displayed
+         checkNoParametersAndNoResults();
+
+         // Make sure the list of active destinations is updated,
+         // if necessary
+         JMXUtils jmxUtils = JMXUtils.getInstanceForLocalJBoss();
+         ObjectName deploymentMBean = new ObjectName("jboss.messaging:service=ServerPeer");
+         Object activeDestinations = jmxUtils.getMBeanAttribute(deploymentMBean, "Destinations");
+         
+         Boolean inActiveDestinationsList = false;
+         Iterator i = ((Set)activeDestinations).iterator();
+         
+         while(i.hasNext()) {
+             JBossDestination destination = (JBossDestination)i.next();
+             if(destination.getName().equals(jndiName)) {
+                 inActiveDestinationsList = true;
+                 break;
+             }
+         }
+
+         String errorMessage;
+         if(isActiveDestination) {
+             errorMessage = "The destination was not in the list of active destinations";
+         } else {
+             errorMessage = "The destination should not be in the list of active destinations";
+         }
+         assertEquals(errorMessage, isActiveDestination, inActiveDestinationsList);
+         
+         // Clean up
+         disconnect();
+         deleteDestination(destinationType, jndiName); 
+     }
+     
+     /**
+      * Common code for the list subscriptions tests.
+      * 
+      * @param isEmptyList - whether or not the list of subscriptions that
+      * gets displayed should be empty
+      */
+     private void performListSubscriptionsAndCheckResults(String jndiName,
+                                                          String operationName,
+                                                          Boolean isEmptyList) throws Exception {
+         performResourceOperation(JMS_NAV_LABEL, DestinationType.TOPIC.getNavLabel(), 
+                                  jndiName, operationName, Boolean.FALSE);
+
+         // Make sure the operation parameters and results are displayed
+         // correctly
+         HtmlAnchor detailsLink = getLinkInsideForm(OPERATION_HISTORY_FORM, OPERATION_DETAILS);
+         detailsLink.click();
+         
+         String actualOperationResults = ((HtmlSpan)client.getElement(OPERATION_RESULTS)).getTextContent();
+         
+         String shortenedResult = actualOperationResults.substring(actualOperationResults.indexOf("Viewing"), 
+                                                                   actualOperationResults.indexOf("]") + 1);
+         log.info("Operation result was: " + shortenedResult);
+         
+         if(!isEmptyList) {
+             assertFalse("Expected non-empty list but was: '" + shortenedResult + "'",
+                         actualOperationResults.contains(EMPTY_LIST));
+         } else {
+             assertTrue("Expected empty list but was: '" + shortenedResult + "'",
+                         actualOperationResults.contains(EMPTY_LIST));
+         }
+         
+         // Clean up
+         disconnect();
+         deleteDestination(DestinationType.TOPIC, jndiName); 
+     }
+     
+     /**
+      * Common code for the operations tests.
+      */
+     private void performDestinationOperationAndCheckMetrics(DestinationType destinationType, 
+                                                             String jndiName,
+                                                             String operationName,
+                                                             Map<String, String> expectedMetrics,
+                                                             ArrayList<String> summaryMetrics) throws Exception {
+         performResourceOperationAndCheckMetrics(JMS_NAV_LABEL, destinationType.getNavLabel(), 
+                                                 jndiName, operationName, expectedMetrics,
+                                                 summaryMetrics, Boolean.FALSE);  
+        
+         // Clean up
+         disconnect();
+         deleteDestination(destinationType, jndiName);  
+     }
 }

Modified: trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/ResourceTestBase.java
===================================================================
--- trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/ResourceTestBase.java	2009-04-17 19:11:41 UTC (rev 307)
+++ trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/ResourceTestBase.java	2009-04-17 20:28:10 UTC (rev 308)
@@ -36,6 +36,9 @@
 import org.jboss.jopr.jsfunit.exceptions.EmbJoprTestException;
 import java.util.ArrayList;
 import java.util.Iterator;
+import org.jboss.jopr.jsfunit.util.EmbJoprTestToolkit;
+import org.jboss.jopr.jsfunit.util.EmbJoprTestToolkit.NavTreeNode;
+import org.jboss.jopr.jsfunit.exceptions.*;
 
 /**
  * This class contains basic methods for creating, configuring, and deleting
@@ -61,6 +64,28 @@
     public static final String DELETE_MESSAGE = "Successfully deleted ";
     public static final String UPDATE_MESSAGE = "Successfully updated ";
     
+    // Operations history table
+    public static final String OPERATION_DETAILS = "(Show/Hide Details)";
+    
+    // Operations table constants
+    public static final String OPERATION_HISTORY_FORM = "operationHistoryForm";
+    public static final String DATA_TABLE = "dataTable";
+    public static final String INPROGRESS = "In Progress";
+    public static final String SUCCESSFUL = "Successful";
+    public static final String FAILED = "Failed";
+    public static final String REFRESH_OPERATIONS_TABLE = "refreshLink";
+    public static final int OPERATION_STATUS_COLUMN = 2;
+    public static final int FIRST_ROW = 1;
+    public static final String NO_PARAMETERS = "noParameters";
+    public static final String NO_RESULTS = "noResults";
+    public static final String OPERATION_RESULTS = "operationResults";
+    public static final String NONE = "None";
+    public static final String EMPTY_LIST = "[]";
+    public static final String TABLE_CELL_DELIM = "<td>";
+    public static final String TABLE_CELL_END_DELIM = "</td>";
+    public static final String TABLE_ROW_DELIM = "<tr>";
+    public static final String TABLE_ROW_END_DELIM = "</tr>";
+    
     /**
      * Create a new resource using the given type, template, and properties.
      *   
@@ -212,17 +237,80 @@
                                   String resourceName,
                                   String tabName) throws Exception {
         //refreshTreeNode(resourceCategory);
-        ClickableElement resourceTypeArrow = getNavTreeArrow(resourceSubCategory);
-        resourceTypeArrow.click();
-
-        HtmlAnchor resource = getNavTreeLink(resourceName);
-        resource.click();
-
+    	NavTreeNode resourceSubCategoryNode = ejtt.getNavTree().getNodeByLabel(resourceSubCategory);
+    	if(!resourceSubCategoryNode.isExpanded()) {
+    		expandNavTreeArrow(resourceSubCategory);
+    	}
+    	
+        clickNavTreeLink(resourceName);
+      
         HtmlAnchor tabLink = (HtmlAnchor)client.getElement(tabName);
         tabLink.click();
     }
     
     /**
+     * Perform the given operation on the given resource.
+     * 
+     * performResourceOperation() assumes that the resource tree 
+     * node (eg. "JMS Destinations", "Datasources", etc.) is already 
+     * expanded when this method is called.
+     */
+    protected void performResourceOperation(String resourceCategory, 
+                                            String resourceSubCategory,
+                                            String resourceName,
+                                            String operationName,
+                                            Boolean takesParameters) throws Exception{
+
+        navigateToPage(resourceCategory, resourceSubCategory, 
+                       resourceName, CONTROL_TAB);
+
+        HtmlForm form = (HtmlForm)client.getElement("operation_form");
+        String xpath = ".//input[@value=\"" + operationName + "\"]";
+
+        HtmlButtonInput operationButton = (HtmlButtonInput)form.getFirstByXPath(xpath);
+        operationButton.click();
+        
+        if(takesParameters) {
+            
+            // Use default values
+            client.click("parametersForm:okButton");
+        }
+        
+        waitForResourceOperationToFinish();
+
+        // Make sure the operation completed successfully
+        String status = getLatestOperationStatus();
+        assertTrue("The status of the operation was: " + status, status.contains(SUCCESSFUL));
+    }
+    
+    /**
+     * Check if the latest resource operation has completed.
+     */
+    protected void waitForResourceOperationToFinish() throws HtmlElementNotFoundException, IOException, InterruptedException {
+        
+        for(int i = 0; i < 10; i++) {
+            
+            String status = getLatestOperationStatus();
+            
+            if(status.contains(INPROGRESS)) {
+                Thread.sleep(100);
+                client.click(REFRESH_OPERATIONS_TABLE);
+            } else { 
+                
+                // The operation has completed
+                break;
+            }
+        }
+    }
+    
+    /**
+     * Get the status of the latest operation.
+     */
+    protected String getLatestOperationStatus() throws HtmlElementNotFoundException {
+        return ejtt.getTabMenu().getTabContentBox().getOperationsHistoryTable().getTableCell(FIRST_ROW, OPERATION_STATUS_COLUMN);
+    }
+    
+    /**
      * Make sure that the metrics corresponding to the given resource
      * are correct.
      *
@@ -272,7 +360,7 @@
             actual = normalizeIfDoubleExpected(expected, actual);
             assertEquals(errorMessage + " '" + metricName + "'", expected, actual);
         }
-    }
+    }   
 
     /**
      * Make sure that the specified metrics corresponding to the given resource
@@ -298,4 +386,60 @@
             assertTrue(errorMessage + "'" + metricName + "' but was: " + actual, !actual.equals(nullValue));
         }
     }
+    
+    /**
+     * Perform the given operation for the given resource and
+     * then make sure that the metrics associated with the resource
+     * were updated appropriately.
+     */
+    protected void performResourceOperationAndCheckMetrics(String resourceCategory,
+                                                           String resourceSubCategory,
+                                                           String resourceName,
+                                                           String operationName,
+                                                           Map<String, String> expectedMetrics,
+                                                           ArrayList<String> summaryMetrics,
+                                                           Boolean takesParameters) throws Exception {
+        performResourceOperation(resourceCategory, resourceSubCategory, 
+                                 resourceName, operationName, takesParameters);
+
+        // Assumes the operation takes no parameters and does not return any
+        // results
+        checkNoParametersAndNoResults();
+
+        // Verify that the metrics were updated appropriately
+        checkResourceMetrics(resourceCategory, resourceSubCategory, resourceName,
+                             expectedMetrics, summaryMetrics);
+    }
+    
+    /**
+     * Make sure the appropriate text gets displayed in the operations
+     * history table when the operation has no parameters and returns
+     * no results.
+     */
+    protected void checkNoParametersAndNoResults() throws IOException {
+        
+        // Make sure the operation parameters and results are displayed
+        // correctly
+        HtmlAnchor detailsLink = getLinkInsideForm(OPERATION_HISTORY_FORM, OPERATION_DETAILS);
+        detailsLink.click();
+        
+        String actualOperationParameters = ((HtmlSpan)client.getElement(NO_PARAMETERS)).getTextContent();
+        String actualOperationResults = ((HtmlSpan)client.getElement(NO_RESULTS)).getTextContent();
+      
+        assertTrue("Incorrect operation parameters displayed in the operations history table: "
+                   + "expected: " + NONE + " but was: " + actualOperationParameters,
+                   actualOperationParameters.contains(NONE));
+        assertTrue("Incorrect operation results displayed in the operations history table: "
+                   + "expected: " + NONE + " but was: " + actualOperationResults,
+                   actualOperationResults.contains(NONE));
+    }
+    
+    /**
+     * Return table cell value in html format.
+     * Used for resource operations that return results in html format.
+     */
+    protected String formatTableCell(String cellValue) {
+        String cellValueAsHtml = TABLE_CELL_DELIM + cellValue + TABLE_CELL_END_DELIM;
+        return cellValueAsHtml;
+    }
 }

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-17 19:11:41 UTC (rev 307)
+++ trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/util/EmbJoprTestToolkit.java	2009-04-17 20:28:10 UTC (rev 308)
@@ -775,7 +775,7 @@
 
 		public static final String ID_CATEGORY_DATA_TABLE = "categorySummaryForm:dataTable";
 		public static final String ID_RESOURCE_DATA_TABLE = "resourceSummaryForm:dataTable";
-
+		
 		protected HtmlTable element;
 		public HtmlTable getElement() {			return element;		}
 
@@ -822,8 +822,18 @@
 		private Map<String, Integer> colIndexes = null;
 		//private boolean analyzedButNotFound = false;
 
+		/**
+		 * Return the table cell given by the row and column.
+		 */
+		public String getTableCell(int rowIndex, int columnIndex) throws HtmlElementNotFoundException {
+		    List<HtmlTableRow> rows = element.getRows();
 
+		    HtmlTableRow tableRow = rows.get(rowIndex);
+		    HtmlTableCell tableCell = tableRow.getCell(columnIndex);
 
+		    return tableCell.asText();
+		}
+
 		/**
 		 * Returns the first row that contains given text, or throws HtmlElementNotFoundException.
 		 * @param text

Added: trunk/jsfunit/testdata/destinations/CreateOperationExistingQueue-service.xml
===================================================================
--- trunk/jsfunit/testdata/destinations/CreateOperationExistingQueue-service.xml	                        (rev 0)
+++ trunk/jsfunit/testdata/destinations/CreateOperationExistingQueue-service.xml	2009-04-17 20:28:10 UTC (rev 308)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<server>
+    <mbean xmbean-dd="xmdesc/Queue-xmbean.xml" name="jboss.messaging.destination:service=Queue,name=CreateOperationExistingQueue" code="org.jboss.jms.server.destination.QueueService">
+        <annotation>@org.jboss.system.deployers.managed.ManagementObjectClass(code=org.jboss.jms.server.destination.QueueServiceMO)</annotation>
+        <attribute name="JNDIName">CreateOperationExistingQueue</attribute>
+        <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
+        <depends>jboss.messaging:service=PostOffice</depends>
+    </mbean>
+</server>

Added: trunk/jsfunit/testdata/destinations/CreateOperationExistingTopic-service.xml
===================================================================
--- trunk/jsfunit/testdata/destinations/CreateOperationExistingTopic-service.xml	                        (rev 0)
+++ trunk/jsfunit/testdata/destinations/CreateOperationExistingTopic-service.xml	2009-04-17 20:28:10 UTC (rev 308)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<server>
+    <mbean xmbean-dd="xmdesc/Topic-xmbean.xml" name="jboss.messaging.destination:service=Topic,name=CreateOperationExistingTopic" code="org.jboss.jms.server.destination.TopicService">
+        <annotation>@org.jboss.system.deployers.managed.ManagementObjectClass(code=org.jboss.jms.server.destination.TopicServiceMO)</annotation>
+        <attribute name="JNDIName">CreateOperationExistingTopic</attribute>
+        <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
+        <depends>jboss.messaging:service=PostOffice</depends>
+    </mbean>
+</server>

Added: trunk/jsfunit/testdata/destinations/DestroyOperationExistingQueue-service.xml
===================================================================
--- trunk/jsfunit/testdata/destinations/DestroyOperationExistingQueue-service.xml	                        (rev 0)
+++ trunk/jsfunit/testdata/destinations/DestroyOperationExistingQueue-service.xml	2009-04-17 20:28:10 UTC (rev 308)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<server>
+    <mbean xmbean-dd="xmdesc/Queue-xmbean.xml" name="jboss.messaging.destination:service=Queue,name=DestroyOperationExistingQueue" code="org.jboss.jms.server.destination.QueueService">
+        <annotation>@org.jboss.system.deployers.managed.ManagementObjectClass(code=org.jboss.jms.server.destination.QueueServiceMO)</annotation>
+        <attribute name="JNDIName">DestroyOperationExistingQueue</attribute>
+        <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
+        <depends>jboss.messaging:service=PostOffice</depends>
+    </mbean>
+</server>

Added: trunk/jsfunit/testdata/destinations/DestroyOperationExistingTopic-service.xml
===================================================================
--- trunk/jsfunit/testdata/destinations/DestroyOperationExistingTopic-service.xml	                        (rev 0)
+++ trunk/jsfunit/testdata/destinations/DestroyOperationExistingTopic-service.xml	2009-04-17 20:28:10 UTC (rev 308)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<server>
+    <mbean xmbean-dd="xmdesc/Topic-xmbean.xml" name="jboss.messaging.destination:service=Topic,name=DestroyOperationExistingTopic" code="org.jboss.jms.server.destination.TopicService">
+        <annotation>@org.jboss.system.deployers.managed.ManagementObjectClass(code=org.jboss.jms.server.destination.TopicServiceMO)</annotation>
+        <attribute name="JNDIName">DestroyOperationExistingTopic</attribute>
+        <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
+        <depends>jboss.messaging:service=PostOffice</depends>
+    </mbean>
+</server>

Added: trunk/jsfunit/testdata/destinations/ListAllMessagesMultipleMessagesExistingTopic-service.xml
===================================================================
--- trunk/jsfunit/testdata/destinations/ListAllMessagesMultipleMessagesExistingTopic-service.xml	                        (rev 0)
+++ trunk/jsfunit/testdata/destinations/ListAllMessagesMultipleMessagesExistingTopic-service.xml	2009-04-17 20:28:10 UTC (rev 308)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<server>
+    <mbean xmbean-dd="xmdesc/Topic-xmbean.xml" name="jboss.messaging.destination:service=Topic,name=ListAllMessagesMultipleMessagesExistingTopic" code="org.jboss.jms.server.destination.TopicService">
+        <annotation>@org.jboss.system.deployers.managed.ManagementObjectClass(code=org.jboss.jms.server.destination.TopicServiceMO)</annotation>
+        <attribute name="JNDIName">ListAllMessagesMultipleMessagesExistingTopic</attribute>
+        <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
+        <depends>jboss.messaging:service=PostOffice</depends>
+    </mbean>
+</server>

Added: trunk/jsfunit/testdata/destinations/ListAllSubscriptionsHtmlMultipleSubscribersExistingTopic-service.xml
===================================================================
--- trunk/jsfunit/testdata/destinations/ListAllSubscriptionsHtmlMultipleSubscribersExistingTopic-service.xml	                        (rev 0)
+++ trunk/jsfunit/testdata/destinations/ListAllSubscriptionsHtmlMultipleSubscribersExistingTopic-service.xml	2009-04-17 20:28:10 UTC (rev 308)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<server>
+    <mbean xmbean-dd="xmdesc/Topic-xmbean.xml" name="jboss.messaging.destination:service=Topic,name=ListAllSubscriptionsHtmlMultipleSubscribersExistingTopic" code="org.jboss.jms.server.destination.TopicService">
+        <annotation>@org.jboss.system.deployers.managed.ManagementObjectClass(code=org.jboss.jms.server.destination.TopicServiceMO)</annotation>
+        <attribute name="JNDIName">ListAllSubscriptionsHtmlMultipleSubscribersExistingTopic</attribute>
+        <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
+        <depends>jboss.messaging:service=PostOffice</depends>
+    </mbean>
+</server>

Added: trunk/jsfunit/testdata/destinations/ListAllSubscriptionsMultipleSubscribersExistingTopic-service.xml
===================================================================
--- trunk/jsfunit/testdata/destinations/ListAllSubscriptionsMultipleSubscribersExistingTopic-service.xml	                        (rev 0)
+++ trunk/jsfunit/testdata/destinations/ListAllSubscriptionsMultipleSubscribersExistingTopic-service.xml	2009-04-17 20:28:10 UTC (rev 308)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<server>
+    <mbean xmbean-dd="xmdesc/Topic-xmbean.xml" name="jboss.messaging.destination:service=Topic,name=ListAllSubscriptionsMultipleSubscribersExistingTopic" code="org.jboss.jms.server.destination.TopicService">
+        <annotation>@org.jboss.system.deployers.managed.ManagementObjectClass(code=org.jboss.jms.server.destination.TopicServiceMO)</annotation>
+        <attribute name="JNDIName">ListAllSubscriptionsMultipleSubscribersExistingTopic</attribute>
+        <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
+        <depends>jboss.messaging:service=PostOffice</depends>
+    </mbean>
+</server>

Added: trunk/jsfunit/testdata/destinations/ListDurableSubscriptionsHtmlMultipleSubscribersExistingTopic-service.xml
===================================================================
--- trunk/jsfunit/testdata/destinations/ListDurableSubscriptionsHtmlMultipleSubscribersExistingTopic-service.xml	                        (rev 0)
+++ trunk/jsfunit/testdata/destinations/ListDurableSubscriptionsHtmlMultipleSubscribersExistingTopic-service.xml	2009-04-17 20:28:10 UTC (rev 308)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<server>
+    <mbean xmbean-dd="xmdesc/Topic-xmbean.xml" name="jboss.messaging.destination:service=Topic,name=ListDurableSubscriptionsHtmlMultipleSubscribersExistingTopic" code="org.jboss.jms.server.destination.TopicService">
+        <annotation>@org.jboss.system.deployers.managed.ManagementObjectClass(code=org.jboss.jms.server.destination.TopicServiceMO)</annotation>
+        <attribute name="JNDIName">ListDurableSubscriptionsHtmlMultipleSubscribersExistingTopic</attribute>
+        <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
+        <depends>jboss.messaging:service=PostOffice</depends>
+    </mbean>
+</server>

Added: trunk/jsfunit/testdata/destinations/ListDurableSubscriptionsMultipleSubscribersExistingTopic-service.xml
===================================================================
--- trunk/jsfunit/testdata/destinations/ListDurableSubscriptionsMultipleSubscribersExistingTopic-service.xml	                        (rev 0)
+++ trunk/jsfunit/testdata/destinations/ListDurableSubscriptionsMultipleSubscribersExistingTopic-service.xml	2009-04-17 20:28:10 UTC (rev 308)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<server>
+    <mbean xmbean-dd="xmdesc/Topic-xmbean.xml" name="jboss.messaging.destination:service=Topic,name=ListDurableSubscriptionsMultipleSubscribersExistingTopic" code="org.jboss.jms.server.destination.TopicService">
+        <annotation>@org.jboss.system.deployers.managed.ManagementObjectClass(code=org.jboss.jms.server.destination.TopicServiceMO)</annotation>
+        <attribute name="JNDIName">ListDurableSubscriptionsMultipleSubscribersExistingTopic</attribute>
+        <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
+        <depends>jboss.messaging:service=PostOffice</depends>
+    </mbean>
+</server>

Added: trunk/jsfunit/testdata/destinations/ListMessageCounterHistoryExistingQueue-service.xml
===================================================================
--- trunk/jsfunit/testdata/destinations/ListMessageCounterHistoryExistingQueue-service.xml	                        (rev 0)
+++ trunk/jsfunit/testdata/destinations/ListMessageCounterHistoryExistingQueue-service.xml	2009-04-17 20:28:10 UTC (rev 308)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<server>
+    <mbean xmbean-dd="xmdesc/Queue-xmbean.xml" name="jboss.messaging.destination:service=Queue,name=ListMessageCounterHistoryExistingQueue" code="org.jboss.jms.server.destination.QueueService">
+        <annotation>@org.jboss.system.deployers.managed.ManagementObjectClass(code=org.jboss.jms.server.destination.QueueServiceMO)</annotation>
+        <attribute name="JNDIName">ListMessageCounterHistoryExistingQueue</attribute>
+        <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
+        <depends>jboss.messaging:service=PostOffice</depends>
+    </mbean>
+</server>

Added: trunk/jsfunit/testdata/destinations/ListMessageCounterMultipleMessagesExistingQueue-service.xml
===================================================================
--- trunk/jsfunit/testdata/destinations/ListMessageCounterMultipleMessagesExistingQueue-service.xml	                        (rev 0)
+++ trunk/jsfunit/testdata/destinations/ListMessageCounterMultipleMessagesExistingQueue-service.xml	2009-04-17 20:28:10 UTC (rev 308)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<server>
+    <mbean xmbean-dd="xmdesc/Queue-xmbean.xml" name="jboss.messaging.destination:service=Queue,name=ListMessageCounterMultipleMessagesExistingQueue" code="org.jboss.jms.server.destination.QueueService">
+        <annotation>@org.jboss.system.deployers.managed.ManagementObjectClass(code=org.jboss.jms.server.destination.QueueServiceMO)</annotation>
+        <attribute name="JNDIName">ListMessageCounterMultipleMessagesExistingQueue</attribute>
+        <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
+        <depends>jboss.messaging:service=PostOffice</depends>
+    </mbean>
+</server>

Added: trunk/jsfunit/testdata/destinations/ListNonDurableSubscriptionsHtmlMultipleSubscribersExistingTopic-service.xml
===================================================================
--- trunk/jsfunit/testdata/destinations/ListNonDurableSubscriptionsHtmlMultipleSubscribersExistingTopic-service.xml	                        (rev 0)
+++ trunk/jsfunit/testdata/destinations/ListNonDurableSubscriptionsHtmlMultipleSubscribersExistingTopic-service.xml	2009-04-17 20:28:10 UTC (rev 308)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<server>
+    <mbean xmbean-dd="xmdesc/Topic-xmbean.xml" name="jboss.messaging.destination:service=Topic,name=ListNonDurableSubscriptionsHtmlMultipleSubscribersExistingTopic" code="org.jboss.jms.server.destination.TopicService">
+        <annotation>@org.jboss.system.deployers.managed.ManagementObjectClass(code=org.jboss.jms.server.destination.TopicServiceMO)</annotation>
+        <attribute name="JNDIName">ListNonDurableSubscriptionsHtmlMultipleSubscribersExistingTopic</attribute>
+        <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
+        <depends>jboss.messaging:service=PostOffice</depends>
+    </mbean>
+</server>

Added: trunk/jsfunit/testdata/destinations/ListNonDurableSubscriptionsMultipleSubscribersExistingTopic-service.xml
===================================================================
--- trunk/jsfunit/testdata/destinations/ListNonDurableSubscriptionsMultipleSubscribersExistingTopic-service.xml	                        (rev 0)
+++ trunk/jsfunit/testdata/destinations/ListNonDurableSubscriptionsMultipleSubscribersExistingTopic-service.xml	2009-04-17 20:28:10 UTC (rev 308)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<server>
+    <mbean xmbean-dd="xmdesc/Topic-xmbean.xml" name="jboss.messaging.destination:service=Topic,name=ListNonDurableSubscriptionsMultipleSubscribersExistingTopic" code="org.jboss.jms.server.destination.TopicService">
+        <annotation>@org.jboss.system.deployers.managed.ManagementObjectClass(code=org.jboss.jms.server.destination.TopicServiceMO)</annotation>
+        <attribute name="JNDIName">ListNonDurableSubscriptionsMultipleSubscribersExistingTopic</attribute>
+        <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
+        <depends>jboss.messaging:service=PostOffice</depends>
+    </mbean>
+</server>

Added: trunk/jsfunit/testdata/destinations/RemoveAllMessagesMultipleMessagesExistingQueue-service.xml
===================================================================
--- trunk/jsfunit/testdata/destinations/RemoveAllMessagesMultipleMessagesExistingQueue-service.xml	                        (rev 0)
+++ trunk/jsfunit/testdata/destinations/RemoveAllMessagesMultipleMessagesExistingQueue-service.xml	2009-04-17 20:28:10 UTC (rev 308)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<server>
+    <mbean xmbean-dd="xmdesc/Queue-xmbean.xml" name="jboss.messaging.destination:service=Queue,name=RemoveAllMessagesMultipleMessagesExistingQueue" code="org.jboss.jms.server.destination.QueueService">
+        <annotation>@org.jboss.system.deployers.managed.ManagementObjectClass(code=org.jboss.jms.server.destination.QueueServiceMO)</annotation>
+        <attribute name="JNDIName">RemoveAllMessagesMultipleMessagesExistingQueue</attribute>
+        <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
+        <depends>jboss.messaging:service=PostOffice</depends>
+    </mbean>
+</server>

Added: trunk/jsfunit/testdata/destinations/RemoveAllMessagesMultipleMessagesExistingTopic-service.xml
===================================================================
--- trunk/jsfunit/testdata/destinations/RemoveAllMessagesMultipleMessagesExistingTopic-service.xml	                        (rev 0)
+++ trunk/jsfunit/testdata/destinations/RemoveAllMessagesMultipleMessagesExistingTopic-service.xml	2009-04-17 20:28:10 UTC (rev 308)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<server>
+    <mbean xmbean-dd="xmdesc/Topic-xmbean.xml" name="jboss.messaging.destination:service=Topic,name=RemoveAllMessagesMultipleMessagesExistingTopic" code="org.jboss.jms.server.destination.TopicService">
+        <annotation>@org.jboss.system.deployers.managed.ManagementObjectClass(code=org.jboss.jms.server.destination.TopicServiceMO)</annotation>
+        <attribute name="JNDIName">RemoveAllMessagesMultipleMessagesExistingTopic</attribute>
+        <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
+        <depends>jboss.messaging:service=PostOffice</depends>
+    </mbean>
+</server>

Added: trunk/jsfunit/testdata/destinations/ResetMessageCounterHistoryMultipleMessagesExistingQueue-service.xml
===================================================================
--- trunk/jsfunit/testdata/destinations/ResetMessageCounterHistoryMultipleMessagesExistingQueue-service.xml	                        (rev 0)
+++ trunk/jsfunit/testdata/destinations/ResetMessageCounterHistoryMultipleMessagesExistingQueue-service.xml	2009-04-17 20:28:10 UTC (rev 308)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<server>
+    <mbean xmbean-dd="xmdesc/Queue-xmbean.xml" name="jboss.messaging.destination:service=Queue,name=ResetMessageCounterHistoryMultipleMessagesExistingQueue" code="org.jboss.jms.server.destination.QueueService">
+        <annotation>@org.jboss.system.deployers.managed.ManagementObjectClass(code=org.jboss.jms.server.destination.QueueServiceMO)</annotation>
+        <attribute name="JNDIName">ResetMessageCounterHistoryMultipleMessagesExistingQueue</attribute>
+        <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
+        <depends>jboss.messaging:service=PostOffice</depends>
+    </mbean>
+</server>

Added: trunk/jsfunit/testdata/destinations/ResetMessageCounterMultipleMessagesExistingQueue-service.xml
===================================================================
--- trunk/jsfunit/testdata/destinations/ResetMessageCounterMultipleMessagesExistingQueue-service.xml	                        (rev 0)
+++ trunk/jsfunit/testdata/destinations/ResetMessageCounterMultipleMessagesExistingQueue-service.xml	2009-04-17 20:28:10 UTC (rev 308)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<server>
+    <mbean xmbean-dd="xmdesc/Queue-xmbean.xml" name="jboss.messaging.destination:service=Queue,name=ResetMessageCounterMultipleMessagesExistingQueue" code="org.jboss.jms.server.destination.QueueService">
+        <annotation>@org.jboss.system.deployers.managed.ManagementObjectClass(code=org.jboss.jms.server.destination.QueueServiceMO)</annotation>
+        <attribute name="JNDIName">ResetMessageCounterMultipleMessagesExistingQueue</attribute>
+        <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
+        <depends>jboss.messaging:service=PostOffice</depends>
+    </mbean>
+</server>

Added: trunk/jsfunit/testdata/destinations/StartOperationExistingQueue-service.xml
===================================================================
--- trunk/jsfunit/testdata/destinations/StartOperationExistingQueue-service.xml	                        (rev 0)
+++ trunk/jsfunit/testdata/destinations/StartOperationExistingQueue-service.xml	2009-04-17 20:28:10 UTC (rev 308)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<server>
+    <mbean xmbean-dd="xmdesc/Queue-xmbean.xml" name="jboss.messaging.destination:service=Queue,name=StartOperationExistingQueue" code="org.jboss.jms.server.destination.QueueService">
+        <annotation>@org.jboss.system.deployers.managed.ManagementObjectClass(code=org.jboss.jms.server.destination.QueueServiceMO)</annotation>
+        <attribute name="JNDIName">StartOperationExistingQueue</attribute>
+        <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
+        <depends>jboss.messaging:service=PostOffice</depends>
+    </mbean>
+</server>

Added: trunk/jsfunit/testdata/destinations/StartOperationExistingTopic-service.xml
===================================================================
--- trunk/jsfunit/testdata/destinations/StartOperationExistingTopic-service.xml	                        (rev 0)
+++ trunk/jsfunit/testdata/destinations/StartOperationExistingTopic-service.xml	2009-04-17 20:28:10 UTC (rev 308)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<server>
+    <mbean xmbean-dd="xmdesc/Topic-xmbean.xml" name="jboss.messaging.destination:service=Topic,name=StartOperationExistingTopic" code="org.jboss.jms.server.destination.TopicService">
+        <annotation>@org.jboss.system.deployers.managed.ManagementObjectClass(code=org.jboss.jms.server.destination.TopicServiceMO)</annotation>
+        <attribute name="JNDIName">StartOperationExistingTopic</attribute>
+        <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
+        <depends>jboss.messaging:service=PostOffice</depends>
+    </mbean>
+</server>

Added: trunk/jsfunit/testdata/destinations/StopOperationExistingQueue-service.xml
===================================================================
--- trunk/jsfunit/testdata/destinations/StopOperationExistingQueue-service.xml	                        (rev 0)
+++ trunk/jsfunit/testdata/destinations/StopOperationExistingQueue-service.xml	2009-04-17 20:28:10 UTC (rev 308)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<server>
+    <mbean xmbean-dd="xmdesc/Queue-xmbean.xml" name="jboss.messaging.destination:service=Queue,name=StopOperationExistingQueue" code="org.jboss.jms.server.destination.QueueService">
+        <annotation>@org.jboss.system.deployers.managed.ManagementObjectClass(code=org.jboss.jms.server.destination.QueueServiceMO)</annotation>
+        <attribute name="JNDIName">StopOperationExistingQueue</attribute>
+        <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
+        <depends>jboss.messaging:service=PostOffice</depends>
+    </mbean>
+</server>

Added: trunk/jsfunit/testdata/destinations/StopOperationExistingTopic-service.xml
===================================================================
--- trunk/jsfunit/testdata/destinations/StopOperationExistingTopic-service.xml	                        (rev 0)
+++ trunk/jsfunit/testdata/destinations/StopOperationExistingTopic-service.xml	2009-04-17 20:28:10 UTC (rev 308)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<server>
+    <mbean xmbean-dd="xmdesc/Topic-xmbean.xml" name="jboss.messaging.destination:service=Topic,name=StopOperationExistingTopic" code="org.jboss.jms.server.destination.TopicService">
+        <annotation>@org.jboss.system.deployers.managed.ManagementObjectClass(code=org.jboss.jms.server.destination.TopicServiceMO)</annotation>
+        <attribute name="JNDIName">StopOperationExistingTopic</attribute>
+        <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
+        <depends>jboss.messaging:service=PostOffice</depends>
+    </mbean>
+</server>




More information about the embjopr-commits mailing list