You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ri...@apache.org on 2011/08/11 16:56:27 UTC

svn commit: r1156640 - in /felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test: recipes/ src/org/apache/felix/framework/test/ src/org/apache/felix/framework/test/classloading/b005/ src/org/apache/felix/framework/test/classloading/b006/

Author: rickhall
Date: Thu Aug 11 14:56:27 2011
New Revision: 1156640

URL: http://svn.apache.org/viewvc?rev=1156640&view=rev
Log:
Add a reexport test case.

Added:
    felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test/src/org/apache/felix/framework/test/classloading/b006/
    felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test/src/org/apache/felix/framework/test/classloading/b006/Placeholder.java
      - copied, changed from r1156632, felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test/src/org/apache/felix/framework/test/classloading/b008/Placeholder.java
Modified:
    felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test/recipes/classloading.b006.bnd
    felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test/src/org/apache/felix/framework/test/TestClassLoading.java
    felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test/src/org/apache/felix/framework/test/classloading/b005/B005Class.java

Modified: felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test/recipes/classloading.b006.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test/recipes/classloading.b006.bnd?rev=1156640&r1=1156639&r2=1156640&view=diff
==============================================================================
--- felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test/recipes/classloading.b006.bnd (original)
+++ felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test/recipes/classloading.b006.bnd Thu Aug 11 14:56:27 2011
@@ -1,5 +1,5 @@
-Bundle-SymbolicName: org.apache.felix.framework.test.classloading.b005
-Private-Package: org.apache.felix.framework.test.classloading.b005
-Require-Bundle: org.apache.felix.framework.test.classloading.b003; visibility:="reexport"
+Bundle-SymbolicName: org.apache.felix.framework.test.classloading.b006
+Private-Package: org.apache.felix.framework.test.classloading.b006
+Require-Bundle: org.apache.felix.framework.test.classloading.b005
 Import-Package: !*
 

Modified: felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test/src/org/apache/felix/framework/test/TestClassLoading.java
URL: http://svn.apache.org/viewvc/felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test/src/org/apache/felix/framework/test/TestClassLoading.java?rev=1156640&r1=1156639&r2=1156640&view=diff
==============================================================================
--- felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test/src/org/apache/felix/framework/test/TestClassLoading.java (original)
+++ felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test/src/org/apache/felix/framework/test/TestClassLoading.java Thu Aug 11 14:56:27 2011
@@ -32,6 +32,7 @@ public class TestClassLoading extends Fe
     private Bundle m_bundleA = null;
     private Bundle m_bundleB = null;
     private Bundle m_bundleC = null;
+    private Bundle m_bundleD = null;
 
     public void testPackageInfo() throws Exception
     {
@@ -177,6 +178,8 @@ public class TestClassLoading extends Fe
 
     public void testRequireReexport() throws Exception
     {
+        // Scenario 1
+        // Test reexport visibility with cyclical bundles.
         try
         {
             // Load some bundles that export some packages.
@@ -205,6 +208,77 @@ public class TestClassLoading extends Fe
         {
             cleanup();
         }
+
+        // Scenario 2
+        // Test reexport visibility with a longer chain.
+        try
+        {
+            // Load some bundles that export some packages.
+            InputStream is = this.getClass().getClassLoader().getResourceAsStream("classloading.b002.jar");
+            m_bundleA = getBundleContext().installBundle("classloading.b002.jar", is);
+            is = this.getClass().getClassLoader().getResourceAsStream("classloading.b003.jar");
+            m_bundleB = getBundleContext().installBundle("classloading.b003.jar", is);
+            // Load a bundle that requires B, where B reexports A.
+            is = this.getClass().getClassLoader().getResourceAsStream("classloading.b005.jar");
+            m_bundleC = getBundleContext().installBundle("classloading.b005.jar", is);
+            // Load a bundle that requires C.
+            is = this.getClass().getClassLoader().getResourceAsStream("classloading.b006.jar");
+            m_bundleD = getBundleContext().installBundle("classloading.b006.jar", is);
+
+            Class clazz;
+            try
+            {
+                clazz = m_bundleD.loadClass(
+                    "org.apache.felix.framework.test.classloading.b002.CycleAAA");
+                assertNotNull("Class should not be null.", clazz);
+            }
+            catch (Exception ex)
+            {
+                assertTrue("Reexported class should be visible.", false);
+            }
+        }
+        finally
+        {
+            cleanup();
+        }
+
+        // Scenario 3
+        // Test reexport visibility with a longer chain, but resolve in reverse
+        // dependency order. We saw an error in such a situation when the reexported
+        // packages were being calculating incorrectly.
+        try
+        {
+            // Load some bundles that export some packages.
+            InputStream is = this.getClass().getClassLoader().getResourceAsStream("classloading.b002.jar");
+            m_bundleA = getBundleContext().installBundle("classloading.b002.jar", is);
+            getPackageAdmin().resolveBundles(new Bundle[] { m_bundleA });
+            is = this.getClass().getClassLoader().getResourceAsStream("classloading.b003.jar");
+            m_bundleB = getBundleContext().installBundle("classloading.b003.jar", is);
+            getPackageAdmin().resolveBundles(new Bundle[] { m_bundleB });
+            // Load a bundle that requires B, where B reexports A.
+            is = this.getClass().getClassLoader().getResourceAsStream("classloading.b005.jar");
+            m_bundleC = getBundleContext().installBundle("classloading.b005.jar", is);
+            getPackageAdmin().resolveBundles(new Bundle[] { m_bundleC });
+            // Load a bundle that requires C.
+            is = this.getClass().getClassLoader().getResourceAsStream("classloading.b006.jar");
+            m_bundleD = getBundleContext().installBundle("classloading.b006.jar", is);
+
+            Class clazz;
+            try
+            {
+                clazz = m_bundleD.loadClass(
+                    "org.apache.felix.framework.test.classloading.b002.CycleAAA");
+                assertNotNull("Class should not be null.", clazz);
+            }
+            catch (Exception ex)
+            {
+                assertTrue("Reexported class should be visible.", false);
+            }
+        }
+        finally
+        {
+            cleanup();
+        }
     }
 
     public void testRequireImportExport() throws Exception
@@ -307,6 +381,18 @@ public class TestClassLoading extends Fe
             }
             m_bundleC = null;
         }
+        if (m_bundleD != null)
+        {
+            try
+            {
+                m_bundleD.uninstall();
+            }
+            catch (Exception ex)
+            {
+                // Ummm?
+            }
+            m_bundleD = null;
+        }
         refreshFramework();
     }
 }

Modified: felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test/src/org/apache/felix/framework/test/classloading/b005/B005Class.java
URL: http://svn.apache.org/viewvc/felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test/src/org/apache/felix/framework/test/classloading/b005/B005Class.java?rev=1156640&r1=1156639&r2=1156640&view=diff
==============================================================================
--- felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test/src/org/apache/felix/framework/test/classloading/b005/B005Class.java (original)
+++ felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test/src/org/apache/felix/framework/test/classloading/b005/B005Class.java Thu Aug 11 14:56:27 2011
@@ -6,9 +6,9 @@
  *  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
@@ -18,8 +18,6 @@
  */
 package org.apache.felix.framework.test.classloading.b005;
 
-import org.apache.felix.framework.test.classloading.b004.*;
-
 public class B005Class
 {
 

Copied: felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test/src/org/apache/felix/framework/test/classloading/b006/Placeholder.java (from r1156632, felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test/src/org/apache/felix/framework/test/classloading/b008/Placeholder.java)
URL: http://svn.apache.org/viewvc/felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test/src/org/apache/felix/framework/test/classloading/b006/Placeholder.java?p2=felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test/src/org/apache/felix/framework/test/classloading/b006/Placeholder.java&p1=felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test/src/org/apache/felix/framework/test/classloading/b008/Placeholder.java&r1=1156632&r2=1156640&rev=1156640&view=diff
==============================================================================
--- felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test/src/org/apache/felix/framework/test/classloading/b008/Placeholder.java (original)
+++ felix/sandbox/rickhall/bnd-test/org.apache.felix.framework.test/src/org/apache/felix/framework/test/classloading/b006/Placeholder.java Thu Aug 11 14:56:27 2011
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.framework.test.classloading.b008;
+package org.apache.felix.framework.test.classloading.b006;
 
 public class Placeholder
 {