You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by at...@apache.org on 2010/01/13 23:02:06 UTC

svn commit: r898959 - in /incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/cm: ./ ConfigurationAdminMBeanTest.java

Author: atk
Date: Wed Jan 13 22:02:06 2010
New Revision: 898959

URL: http://svn.apache.org/viewvc?rev=898959&view=rev
Log:
ARIES-36 Adding integration tests

Added:
    incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/cm/
    incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/cm/ConfigurationAdminMBeanTest.java   (with props)

Added: incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/cm/ConfigurationAdminMBeanTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/cm/ConfigurationAdminMBeanTest.java?rev=898959&view=auto
==============================================================================
--- incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/cm/ConfigurationAdminMBeanTest.java (added)
+++ incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/cm/ConfigurationAdminMBeanTest.java Wed Jan 13 22:02:06 2010
@@ -0,0 +1,270 @@
+/**
+ *  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.aries.jmx.cm;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.ops4j.pax.exam.CoreOptions.provision;
+import static org.ops4j.pax.swissbox.tinybundles.core.TinyBundles.modifyBundle;
+import static org.ops4j.pax.swissbox.tinybundles.core.TinyBundles.newBundle;
+import static org.ops4j.pax.swissbox.tinybundles.core.TinyBundles.withBnd;
+
+import java.io.InputStream;
+import java.util.Dictionary;
+
+import javax.management.InstanceNotFoundException;
+import javax.management.ObjectName;
+import javax.management.openmbean.TabularData;
+
+import org.apache.aries.jmx.AbstractIntegrationTest;
+import org.apache.aries.jmx.codec.PropertyData;
+import org.apache.aries.jmx.test.bundlea.api.InterfaceA;
+import org.apache.aries.jmx.test.bundleb.api.InterfaceB;
+import org.apache.aries.jmx.test.bundleb.api.MSF;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.ops4j.pax.exam.CoreOptions;
+import org.ops4j.pax.exam.Customizer;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.Configuration;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.Constants;
+import org.osgi.framework.Filter;
+import org.osgi.jmx.service.cm.ConfigurationAdminMBean;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.util.tracker.ServiceTracker;
+
+/**
+ * 
+ *
+ * @version $Rev$ $Date$
+ */
+public class ConfigurationAdminMBeanTest extends AbstractIntegrationTest {
+
+    @Configuration
+    public static Option[] configuration() {
+        Option[] options = CoreOptions
+                .options(
+                        CoreOptions.equinox(),
+                        mavenBundle("org.apache.felix", "org.apache.felix.configadmin"),
+                        mavenBundle("org.ops4j.pax.logging", "pax-logging-api"),
+                        mavenBundle("org.ops4j.pax.logging", "pax-logging-service"),
+                        mavenBundle("org.osgi", "org.osgi.compendium"),
+                        mavenBundle("org.apache.aries.jmx", "org.apache.aries.jmx"),
+                        new Customizer() {
+                            public InputStream customizeTestProbe(InputStream testProbe) throws Exception {
+                                return modifyBundle(testProbe)
+                                           .removeHeader(Constants.DYNAMICIMPORT_PACKAGE)
+                                           .set(Constants.REQUIRE_BUNDLE, "org.apache.aries.jmx.test.bundlea,org.apache.aries.jmx.test.bundleb")
+                                           .build(withBnd());
+                            }
+                        },
+                        provision(newBundle()
+                                .add(org.apache.aries.jmx.test.bundlea.Activator.class)
+                                .add(org.apache.aries.jmx.test.bundlea.api.InterfaceA.class)
+                                .add(org.apache.aries.jmx.test.bundlea.impl.A.class)
+                                .set(Constants.BUNDLE_SYMBOLICNAME, "org.apache.aries.jmx.test.bundlea")
+                                .set(Constants.BUNDLE_VERSION, "2.0.0")
+                                .set(Constants.EXPORT_PACKAGE, "org.apache.aries.jmx.test.bundlea.api;version=2.0.0")
+                                .set(Constants.IMPORT_PACKAGE,
+                                        "org.osgi.framework;version=1.5.0,org.osgi.util.tracker,org.apache.aries.jmx.test.bundleb.api;version=1.1.0;resolution:=optional" +
+                                        ",org.osgi.service.cm")
+                                .set(Constants.BUNDLE_ACTIVATOR,
+                                        org.apache.aries.jmx.test.bundlea.Activator.class.getName())
+                                .build(withBnd())),
+                        provision(newBundle()
+                                .add(org.apache.aries.jmx.test.bundleb.Activator.class)
+                                .add(org.apache.aries.jmx.test.bundleb.api.InterfaceB.class)
+                                .add(org.apache.aries.jmx.test.bundleb.api.MSF.class)
+                                .add(org.apache.aries.jmx.test.bundleb.impl.B.class)
+                                .set(Constants.BUNDLE_SYMBOLICNAME,"org.apache.aries.jmx.test.bundleb")
+                                .set(Constants.BUNDLE_VERSION, "1.0.0")
+                                .set(Constants.EXPORT_PACKAGE,"org.apache.aries.jmx.test.bundleb.api;version=1.1.0")
+                                .set(Constants.IMPORT_PACKAGE,"org.osgi.framework;version=1.5.0,org.osgi.util.tracker" +
+                                        ",org.osgi.service.cm")
+                                .set(Constants.BUNDLE_ACTIVATOR,
+                                        org.apache.aries.jmx.test.bundleb.Activator.class.getName())
+                                .build(withBnd()))
+                        );
+        options = updateOptions(options);
+        return options;
+    }
+    
+    @Before
+    public void doSetUp() throws Exception {
+        super.setUp();
+        int i=0;
+        while (true) {
+            try {
+                mbeanServer.getObjectInstance(new ObjectName(ConfigurationAdminMBean.OBJECTNAME));
+                break;
+            } catch (InstanceNotFoundException e) {
+                if (i == 5) {
+                    throw new Exception("ConfigurationAdminMBean not available after waiting 5 seconds");
+                }
+            }
+            i++;
+            Thread.sleep(1000);
+        }
+    }
+    
+    @Ignore("ManagedServiceFactory tests failing.. " +
+            "Some issues surrounding creating a factory configuration and then retrieving by pid to update.. Needs investigation")
+    @Test
+    @SuppressWarnings("unchecked")
+    public void testMBeanInterface() throws Exception {
+        
+        ConfigurationAdminMBean mbean = getMBean(ConfigurationAdminMBean.OBJECTNAME, ConfigurationAdminMBean.class);
+        assertNotNull(mbean);
+       
+        // get bundles
+        
+        Bundle a = getBundle("org.apache.aries.jmx.test.bundlea");
+        assertNotNull(a);
+        
+        Bundle b = getBundle("org.apache.aries.jmx.test.bundleb");
+        assertNotNull(b);
+       
+        
+        // get services
+        
+        ServiceTracker trackerA = new ServiceTracker(bundleContext, InterfaceA.class.getName(), null);
+        trackerA.open();
+        InterfaceA managedServiceA = (InterfaceA) trackerA.getService();
+        assertNotNull(managedServiceA);
+        
+        Filter filter = bundleContext.createFilter("(" + Constants.SERVICE_PID + "=jmx.test.B.factory)");
+        ServiceTracker trackerMSF = new ServiceTracker(bundleContext, filter, null);
+        trackerMSF.open();
+        MSF managedFactory = (MSF) trackerMSF.getService();
+        assertNotNull(managedFactory);
+        
+        ServiceTracker tracker = new ServiceTracker(bundleContext, ConfigurationAdmin.class.getName(), null);
+        tracker.open();
+        ConfigurationAdmin configAdmin = (ConfigurationAdmin) tracker.getService();
+        assertNotNull(configAdmin);
+        
+        // ManagedService operations
+        
+        assertNull(managedServiceA.getConfig());
+        
+        // create a configuration for A
+        TabularData data = mbean.getProperties("org.apache.aries.jmx.test.ServiceA");
+        assertEquals(0, data.size());
+        
+        PropertyData<String> p1 = PropertyData.newInstance("A1", "first");
+        data.put(p1.toCompositeData());
+        PropertyData<Integer> p2 = PropertyData.newInstance("A2", 2);
+        data.put(p2.toCompositeData());
+        
+        mbean.update("org.apache.aries.jmx.test.ServiceA", data);
+        
+        Thread.sleep(1000);
+        Dictionary<String, Object> config = managedServiceA.getConfig();
+        assertNotNull(config);
+        assertEquals(3, config.size());
+        assertEquals("org.apache.aries.jmx.test.ServiceA", config.get(Constants.SERVICE_PID));
+        assertEquals("first", config.get("A1"));
+        assertEquals(2, config.get("A2"));
+        
+        //delete
+        mbean.delete("org.apache.aries.jmx.test.ServiceA", a.getLocation());
+        
+        Thread.sleep(1000);
+        assertNull(managedServiceA.getConfig());
+        
+        
+        // ManagedServiceFactory operations
+        
+        String cpid = mbean.createFactoryConfiguration("jmx.test.B.factory");
+        assertNotNull(cpid);
+        assertTrue(cpid.contains("jmx.test.B.factory"));
+        
+        TabularData fConfig = mbean.getProperties(cpid);
+        assertNotNull(fConfig);
+        assertEquals(0, fConfig.values().size());
+        
+        PropertyData<String> prop1 = PropertyData.newInstance("B1", "value1");
+        fConfig.put(prop1.toCompositeData());
+        PropertyData<Boolean> prop2 = PropertyData.newInstance("B2", true);
+        fConfig.put(prop2.toCompositeData());
+        
+        mbean.update(cpid, fConfig);
+        
+        Thread.sleep(1000);
+        
+        InterfaceB configured = managedFactory.getConfigured(cpid);
+        assertNotNull(configured);
+        config = configured.getConfig();
+        assertNotNull(config);
+        assertTrue(config.size() >= 4);
+        assertEquals("jmx.test.B.factory", config.get(ConfigurationAdmin.SERVICE_FACTORYPID));
+        assertEquals(cpid, config.get(Constants.SERVICE_PID));
+        assertEquals("value1", config.get("B1"));
+        assertEquals("true", config.get("B2"));
+        
+        assertEquals("jmx.test.B.factory", mbean.getFactoryPid(cpid));
+        
+        mbean.delete(cpid);
+        
+        Thread.sleep(1000);
+        
+        assertNull(managedFactory.getConfigured(cpid));
+       
+        // list operations
+        
+        data = mbean.getProperties("org.apache.aries.jmx.test.ServiceA");
+        assertEquals(0, data.size());
+        
+        p1 = PropertyData.newInstance("A1", "a1Value");
+        data.put(p1.toCompositeData());
+        
+        mbean.update("org.apache.aries.jmx.test.ServiceA", data);
+        
+        Thread.sleep(1000);
+        
+        config = managedServiceA.getConfig();
+        assertNotNull(config);
+        assertEquals(2, config.size());
+        assertEquals("org.apache.aries.jmx.test.ServiceA", config.get(Constants.SERVICE_PID));
+        assertEquals("a1Value", config.get("A1"));
+
+        
+        String[][] configurations = mbean.getConfigurations("(A1=a1Value)");
+        assertNotNull(configurations);
+        assertEquals(1, configurations.length);
+        assertEquals("org.apache.aries.jmx.test.ServiceA", configurations[0][0]);
+        assertEquals(a.getLocation(), configurations[0][1]);
+        
+        // delete with filter
+        mbean.deleteConfigurations("(A1=a1Value)");
+        
+        Thread.sleep(1000);
+        
+        assertNull(managedServiceA.getConfig());
+        
+        //clean up
+        
+        trackerA.close();
+        trackerMSF.close();
+        tracker.close();
+        
+    }
+}

Propchange: incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/cm/ConfigurationAdminMBeanTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/cm/ConfigurationAdminMBeanTest.java
------------------------------------------------------------------------------
    svn:keywords = Revision Date