You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ri...@apache.org on 2009/08/07 20:14:31 UTC

svn commit: r802128 - in /qpid/trunk/qpid/java: broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java systests/src/main/java/org/apache/qpid/server/logging/ManagementLoggingTest.java

Author: ritchiem
Date: Fri Aug  7 18:14:30 2009
New Revision: 802128

URL: http://svn.apache.org/viewvc?rev=802128&view=rev
Log:
QPID-2002 : Addition of Management Logging

Added:
    qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/logging/ManagementLoggingTest.java
Modified:
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java?rev=802128&r1=802127&r2=802128&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java Fri Aug  7 18:14:30 2009
@@ -27,6 +27,8 @@
 import org.apache.qpid.server.registry.IApplicationRegistry;
 import org.apache.qpid.server.security.auth.database.PrincipalDatabase;
 import org.apache.qpid.server.security.auth.rmi.RMIPasswordAuthenticator;
+import org.apache.qpid.server.logging.actors.CurrentActor;
+import org.apache.qpid.server.logging.messages.ManagementConsoleMessages;
 
 import javax.management.JMException;
 import javax.management.MBeanServer;
@@ -91,6 +93,9 @@
 
     public void start() throws IOException, ConfigurationException
     {
+
+        CurrentActor.get().message(ManagementConsoleMessages.MNG_1001());
+        
         //check if system properties are set to use the JVM's out-of-the-box JMXAgent
         if (areOutOfTheBoxJMXOptionsSet())
         {
@@ -160,6 +165,8 @@
                 
                 _log.info("JMX ConnectorServer using SSL keystore file " + ksf.getAbsolutePath());
                 _startupLog.info("JMX ConnectorServer using SSL keystore file " + ksf.getAbsolutePath());
+
+                CurrentActor.get().message(ManagementConsoleMessages.MNG_1006(ksf.getAbsolutePath()));
             }
 
             //check the key store password is set
@@ -186,6 +193,10 @@
                      (port +PORT_EXPORT_OFFSET) + ") with SSL");
             _startupLog.warn("Starting JMX ConnectorServer on port '"+ port + "' (+" + 
                      (port +PORT_EXPORT_OFFSET) + ") with SSL");
+
+            CurrentActor.get().message(ManagementConsoleMessages.MNG_1002("SSL RMI Registry", port));
+            CurrentActor.get().message(ManagementConsoleMessages.MNG_1002("SSL RMI ConnectorServer", port + PORT_EXPORT_OFFSET));
+
         }
         else
         {
@@ -195,6 +206,8 @@
 
             _log.warn("Starting JMX ConnectorServer on port '" + port + "' (+" + (port +PORT_EXPORT_OFFSET) + ")");
             _startupLog.warn("Starting JMX ConnectorServer on port '" + port + "' (+" + (port +PORT_EXPORT_OFFSET) + ")");
+            CurrentActor.get().message(ManagementConsoleMessages.MNG_1002("RMI Registry", port));
+            CurrentActor.get().message(ManagementConsoleMessages.MNG_1002("RMI ConnectorServer", port + PORT_EXPORT_OFFSET));
         }
 
         //add a JMXAuthenticator implementation the env map to authenticate the RMI based JMX connector server
@@ -233,7 +246,7 @@
                 try
                 {   
                     //manually bind the connector server to the registry at key 'jmxrmi', like the out-of-the-box agent                        
-                    _rmiRegistry.bind("jmxrmi", rmiConnectorServerStub);   
+                    _rmiRegistry.bind("jmxrmi", rmiConnectorServerStub);
                 }
                 catch (AlreadyBoundException abe)
                 {   
@@ -263,6 +276,8 @@
         MBeanServerForwarder mbsf = MBeanInvocationHandlerImpl.newProxyInstance();
         cs.setMBeanServerForwarder(mbsf);
         cs.start();
+
+        CurrentActor.get().message(ManagementConsoleMessages.MNG_1004());
     }
 
     /*
@@ -366,6 +381,8 @@
                 _log.error("Exception unregistering MBean '"+ name +"': " + e.getMessage());
             }
         }
+
+        CurrentActor.get().message(ManagementConsoleMessages.MNG_1005());        
     }
 
 }

Added: qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/logging/ManagementLoggingTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/logging/ManagementLoggingTest.java?rev=802128&view=auto
==============================================================================
--- qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/logging/ManagementLoggingTest.java (added)
+++ qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/logging/ManagementLoggingTest.java Fri Aug  7 18:14:30 2009
@@ -0,0 +1,378 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.logging;
+
+import junit.framework.AssertionFailedError;
+import org.apache.qpid.util.LogMonitor;
+
+import java.util.List;
+
+/**
+ * Management Console Test Suite
+ *
+ * The Management Console test suite validates that the follow log messages as specified in the Functional Specification.
+ *
+ * This suite of tests validate that the management console messages occur correctly and according to the following format:
+ *
+ * MNG-1001 : Startup
+ * MNG-1002 : Starting : <service> : Listening on port <Port>
+ * MNG-1003 : Shutting down : <service> : port <Port>
+ * MNG-1004 : Ready
+ * MNG-1005 : Stopped
+ * MNG-1006 : Using SSL Keystore : <path>
+ */
+public class ManagementLoggingTest extends AbstractTestLogging
+{
+    private static final String MNG_PREFIX = "MNG-";
+
+    public void setUp() throws Exception
+    {
+        // We either do this here or have a null check in tearDown.
+        // As when this test is run against profiles other than java it will NPE
+        _monitor = new LogMonitor(_outputFile);
+        //We explicitly do not call super.setUp as starting up the broker is
+        //part of the test case.
+
+    }
+
+    /**
+     * Description:
+     * Using the startup configuration validate that the management startup
+     * message is logged correctly.
+     * Input:
+     * Standard configuration with management enabled
+     * Output:
+     *
+     * <date> MNG-1001 : Startup
+     *
+     * Constraints:
+     * This is the FIRST message logged by MNG
+     * Validation Steps:
+     *
+     * 1. The BRK ID is correct
+     * 2. This is the FIRST message logged by MNG
+     */
+    public void testManagementStartupEnabled() throws Exception
+    {
+        // This test only works on external java brokers due to the fact that
+        // Management is disabled on InVM brokers.
+        if (isJavaBroker() && isExternalBroker())
+        {
+            //Ensure management is on
+            setConfigurationProperty("management.enabled", "true");
+
+            startBroker();
+
+            // Now we can create the monitor as _outputFile will now be defined
+            _monitor = new LogMonitor(_outputFile);
+
+            List<String> results = _monitor.findMatches(MNG_PREFIX);
+            try
+            {
+                // Validation
+
+                assertTrue("MNGer message not logged", results.size() > 0);
+
+                String log = getLog(results.get(0));
+
+                //1
+                validateMessageID("MNG-1001", log);
+
+                //2
+                results = _monitor.findMatches("MNG-1001");
+                assertEquals("More than one startup message found.",
+                             1, results.size());
+
+                //3
+                assertEquals("Startup log message is not 'Startup'.", "Startup",
+                             getMessageString(log));
+            }
+            catch (AssertionFailedError afe)
+            {
+                System.err.println("Log Dump:");
+                for (String log : results)
+                {
+                    System.err.println(log);
+                }
+                throw afe;
+            }
+        }
+    }
+
+    /**
+     * Description:
+     * Verify that when management is disabled in the configuration file the
+     * startup message is not logged.
+     * Input:
+     * Standard configuration with management disabled
+     * Output:
+     * NO MNG messages
+     * Validation Steps:
+     *
+     * 1. Validate that no MNG messages are produced.
+     */
+    public void testManagementStartupDisabled() throws Exception
+    {
+        // This test only works on external java brokers due to the fact that
+        // Management is disabled on InVM brokers.
+        if (isJavaBroker() && isExternalBroker())
+        {
+            //Ensure management is off
+            setConfigurationProperty("management.enabled", "false");
+
+            startBroker();
+
+            // Now we can create the monitor as _outputFile will now be defined
+            _monitor = new LogMonitor(_outputFile);
+
+            List<String> results = _monitor.findMatches(MNG_PREFIX);
+            try
+            {
+                // Validation
+
+                assertEquals("MNGer messages logged", 0, results.size());
+            }
+            catch (AssertionFailedError afe)
+            {
+                System.err.println("Log Dump:");
+                for (String log : results)
+                {
+                    System.err.println(log);
+                }
+                throw afe;
+            }
+        }
+    }
+
+    /**
+     * The two MNG-1002 messages are logged at the same time so lets test them
+     * at the same time.
+     *
+     * Description:
+     * Using the default configuration validate that the RMI Registry socket is
+     * correctly reported as being opened
+     *
+     * Input:
+     * The default configuration file
+     * Output:
+     *
+     * <date> MESSAGE MNG-1002 : Starting : RMI Registry : Listening on port 8999
+     *
+     * Constraints:
+     * The RMI ConnectorServer and Registry log messages do not have a prescribed order
+     * Validation Steps:
+     *
+     * 1. The MNG ID is correct
+     * 2. The specified port is the correct '8999'
+     *
+     * Description:
+     * Using the default configuration validate that the RMI ConnectorServer
+     * socket is correctly reported as being opened
+     *
+     * Input:
+     * The default configuration file
+     * Output:
+     *
+     * <date> MESSAGE MNG-1002 : Starting : RMI ConnectorServer : Listening on port 9099
+     *
+     * Constraints:
+     * The RMI ConnectorServer and Registry log messages do not have a prescribed order
+     * Validation Steps:
+     *
+     * 1. The MNG ID is correct
+     * 2. The specified port is the correct '9099'
+     */
+    public void testManagementStartupRMIEntries() throws Exception
+    {
+        // This test only works on external java brokers due to the fact that
+        // Management is disabled on InVM brokers.
+        if (isJavaBroker() && isExternalBroker())
+        {
+            //Ensure management is on
+            setConfigurationProperty("management.enabled", "true");
+
+            startBroker();
+
+            // Now we can create the monitor as _outputFile will now be defined
+            _monitor = new LogMonitor(_outputFile);
+
+            List<String> results = _monitor.findMatches("MNG-1002");
+            try
+            {
+                // Validation
+
+                assertEquals("MNGer message not logged expected message", 2, results.size());
+
+                String log = getLog(results.get(0));
+
+                //1
+                validateMessageID("MNG-1002", log);
+
+                // Validate we only have one MNG-1002
+                results = _monitor.findMatches("MNG-1002");
+                assertEquals("More than two RMI entries found.",
+                             2, results.size());
+
+                // We expect the RMI Server port to be 100 higher than
+                // the RMIConnector Server Port                
+                int mPort = getPort() + (DEFAULT_MANAGEMENT_PORT - DEFAULT_PORT);
+                assertTrue("RMI Registry port not as expected(" + mPort + ").:" + getMessageString(log),
+                           getMessageString(log).endsWith(String.valueOf(mPort)));
+
+                log = getLog(results.get(1));
+
+                //1
+                validateMessageID("MNG-1002", log);
+
+                // We expect the RMIConnector Server port to be 100 higher than
+                // the RMI Server Port
+                mPort = getPort() + (DEFAULT_MANAGEMENT_PORT - DEFAULT_PORT) + 100;
+                assertTrue("RMI ConnectorServer port not as expected(" + mPort + ").:" + getMessageString(log),
+                           getMessageString(log).endsWith(String.valueOf(mPort)));
+            }
+            catch (AssertionFailedError afe)
+            {
+                System.err.println("Log Dump:");
+                for (String log : results)
+                {
+                    System.err.println(log);
+                }
+                throw afe;
+            }
+        }
+    }
+
+    /**
+     * Description:
+     * Using the default configuration validate that the RMI ConnectorServer socket is correctly reported as being opened
+     * Input:
+     * The default configuration file
+     * Output:
+     *
+     * <date> MESSAGE MNG-1002 : Starting : RMI ConnectorServer : Listening on port 9099
+     *
+     * Constraints:
+     * The RMI ConnectorServer and Registry log messages do not have a prescribed order
+     * Validation Steps:
+     *
+     * 1. The MNG ID is correct
+     * 2. The specified port is the correct '9099'
+     */
+    public void testManagementStartupRMIConnectorServer() throws Exception
+    {
+        // This test only works on external java brokers due to the fact that
+        // Management is disabled on InVM brokers.
+        if (isJavaBroker() && isExternalBroker())
+        {
+            //Ensure management is on
+            setConfigurationProperty("management.enabled", "true");
+
+            startBroker();
+
+            // Now we can create the monitor as _outputFile will now be defined
+            _monitor = new LogMonitor(_outputFile);
+
+            List<String> results = _monitor.findMatches(MNG_PREFIX);
+            try
+            {
+                // Validation
+
+                assertTrue("MNGer message not logged", results.size() > 0);
+
+            }
+            catch (AssertionFailedError afe)
+            {
+                System.err.println("Log Dump:");
+                for (String log : results)
+                {
+                    System.err.println(log);
+                }
+                throw afe;
+            }
+        }
+    }
+
+    /**
+     * Description:
+     * Using the default configuration with SSL enabled for the management port the SSL Keystore path should be reported via MNG-1006
+     * Input:
+     * Management SSL enabled default configuration.
+     * Output:
+     *
+     * <date> MESSAGE MNG-1006 : Using SSL Keystore : test_resources/ssl/keystore.jks
+     *
+     * Validation Steps:
+     *
+     * 1. The MNG ID is correct
+     * 2. The keystore path is as specified in the configuration
+     */
+    public void testManagementStartupSSLKeystore() throws Exception
+    {
+        // This test only works on external java brokers due to the fact that
+        // Management is disabled on InVM brokers.
+        if (isJavaBroker() && isExternalBroker())
+        {
+            //Ensure management is on
+            setConfigurationProperty("management.enabled", "true");
+            // This test requires we have an ssl connection
+            setConfigurationProperty("management.ssl.enabled", "true");
+
+            startBroker();
+
+            // Now we can create the monitor as _outputFile will now be defined
+            _monitor = new LogMonitor(_outputFile);
+
+            List<String> results = _monitor.findMatches("MNG-1006");
+            try
+            {
+                // Validation
+
+                assertTrue("MNGer message not logged", results.size() > 0);
+
+                String log = getLog(results.get(0));
+
+                //1
+                validateMessageID("MNG-1006", log);
+
+                // Validate we only have one MNG-1002
+                results = _monitor.findMatches("MNG-1006");
+                assertEquals("More than one SSL Keystore entry found.",
+                             1, results.size());
+
+                // We expect the RMIConnector Server port to be 100 higher than
+                // the RMI Server Port
+                int mPort = getPort() + (DEFAULT_MANAGEMENT_PORT - DEFAULT_PORT) + 100;
+                assertTrue("SSL Keystore entry expected(" + mPort + ").:" + getMessageString(log),
+                           getMessageString(log).endsWith(getConfigurationStringProperty("management.ssl.keyStorePath")));
+            }
+            catch (AssertionFailedError afe)
+            {
+                System.err.println("Log Dump:");
+                for (String log : results)
+                {
+                    System.err.println(log);
+                }
+                throw afe;
+            }
+        }
+
+    }
+}



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org