Author: davidb
Date: Tue Dec  8 18:45:11 2015
New Revision: 1718672

URL: http://svn.apache.org/viewvc?rev=1718672&view=rev
Log:
FELIX-5112 ClassCastException when deploying an OBR Resource already present in 
the runtime

Updated test to return local resource.
Committed on behalf of @skahmann with many thanks. Contributed via 
https://github.com/apache/felix/pull/44

Modified:
    felix/trunk/bundlerepository/pom.xml
    
felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/ResolverImpl.java
    
felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/ResolverImplTest.java

Modified: felix/trunk/bundlerepository/pom.xml
URL: 
http://svn.apache.org/viewvc/felix/trunk/bundlerepository/pom.xml?rev=1718672&r1=1718671&r2=1718672&view=diff
==============================================================================
--- felix/trunk/bundlerepository/pom.xml (original)
+++ felix/trunk/bundlerepository/pom.xml Tue Dec  8 18:45:11 2015
@@ -91,7 +91,7 @@
     <dependency>
         <groupId>org.easymock</groupId>
         <artifactId>easymock</artifactId>
-        <version>2.4</version>
+        <version>3.4</version>
     </dependency>
   </dependencies>
   <build>

Modified: 
felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/ResolverImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/ResolverImpl.java?rev=1718672&r1=1718671&r2=1718672&view=diff
==============================================================================
--- 
felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/ResolverImpl.java
 (original)
+++ 
felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/ResolverImpl.java
 Tue Dec  8 18:45:11 2015
@@ -123,7 +123,7 @@ public class ResolverImpl implements Res
         throw new IllegalStateException("The resources have not been 
resolved.");
     }
 
-    private LocalResource[] getLocalResources()
+    protected LocalResource[] getLocalResources()
     {
         List<LocalResource> resources = new ArrayList<LocalResource>();
         for (Resource resource : getResources())
@@ -154,8 +154,8 @@ public class ResolverImpl implements Res
         List<Resource> resources = new ArrayList<Resource>();
         for (int repoIdx = 0; (m_repositories != null) && (repoIdx < 
m_repositories.length); repoIdx++)
         {
-            boolean isLocal = m_repositories[repoIdx] instanceof 
LocalRepositoryImpl;
-            boolean isSystem = m_repositories[repoIdx] instanceof 
SystemRepositoryImpl;
+            boolean isLocal = 
m_repositories[repoIdx].getURI().equals(Repository.LOCAL);
+            boolean isSystem = 
m_repositories[repoIdx].getURI().equals(Repository.SYSTEM);
             if (isLocal && (m_resolutionFlags & NO_LOCAL_RESOURCES) != 0) {
                 continue;
             }

Modified: 
felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/ResolverImplTest.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/ResolverImplTest.java?rev=1718672&r1=1718671&r2=1718672&view=diff
==============================================================================
--- 
felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/ResolverImplTest.java
 (original)
+++ 
felix/trunk/bundlerepository/src/test/java/org/apache/felix/bundlerepository/impl/ResolverImplTest.java
 Tue Dec  8 18:45:11 2015
@@ -21,17 +21,14 @@ package org.apache.felix.bundlerepositor
 import java.io.InputStream;
 import java.net.URL;
 import java.util.Collections;
-import java.util.Dictionary;
 import java.util.Hashtable;
 
 import junit.framework.TestCase;
 
-import org.apache.felix.bundlerepository.Repository;
-import org.apache.felix.bundlerepository.Requirement;
-import org.apache.felix.bundlerepository.Resolver;
-import org.apache.felix.bundlerepository.Resource;
+import org.apache.felix.bundlerepository.*;
 import org.apache.felix.utils.filter.FilterImpl;
 import org.apache.felix.utils.log.Logger;
+
 import org.easymock.Capture;
 import org.easymock.EasyMock;
 import org.easymock.IAnswer;
@@ -134,22 +131,39 @@ public class ResolverImplTest extends Te
     }
 
     public void testFindUpdatableLocalResource() throws Exception {
-        RepositoryAdminImpl repoAdmin = createRepositoryAdmin();
-        
repoAdmin.addRepository(getClass().getResource("/repo_for_mandatory.xml"));
-
-        Resolver resolver = repoAdmin.resolver();
-
-        Resource resource = EasyMock.createMock(Resource.class);
+        LocalResource resource = EasyMock.createMock(LocalResource.class);
         
EasyMock.expect(resource.getSymbolicName()).andReturn("com.test.bundleA").anyTimes();
         EasyMock.expect(resource.getRequirements()).andReturn(null).anyTimes();
+        EasyMock.expect(resource.getCapabilities()).andReturn(null).anyTimes();
         
EasyMock.expect(resource.getURI()).andReturn("http://test.com";).anyTimes();
-        EasyMock.replay(resource);
+        EasyMock.expect(resource.isLocal()).andReturn(true).anyTimes();
+
+        Repository localRepo = EasyMock.createMock(Repository.class);
+
+        Repository[] localRepos = { localRepo };
+        final LocalResource[] localResources = { resource };
+
+        
EasyMock.expect(localRepo.getResources()).andReturn(localResources).anyTimes();
+        
EasyMock.expect(localRepo.getURI()).andReturn(Repository.LOCAL).anyTimes();
+        
EasyMock.expect(localRepo.getLastModified()).andReturn(System.currentTimeMillis()).anyTimes();
+
+        BundleContext bundleContext = EasyMock.createMock(BundleContext.class);
+
+        EasyMock.replay(resource, localRepo);
+
+        ResolverImpl resolver = new ResolverImpl(bundleContext, localRepos, 
new Logger(bundleContext)) {
+            @Override
+            public LocalResource[] getLocalResources() {
+                return localResources;
+            }
+        };
 
         resolver.add(resource);
 
         boolean exceptionThrown = false;
         try {
             resolver.resolve();
+            resolver.deploy(Resolver.START);
         } catch (Exception e) {
             exceptionThrown = true;
         }


Reply via email to