Author: scottbw
Date: Fri Oct 28 13:58:40 2011
New Revision: 1190330

URL: http://svn.apache.org/viewvc?rev=1190330&view=rev
Log:
Fixed issue with duplicate access policies when updating widgets (see 
WOOKIE-273) and added a test case.

Added:
    incubator/wookie/trunk/src-tests/testdata/access-test.wgt   (with props)
Modified:
    
incubator/wookie/trunk/src-tests/org/apache/wookie/tests/functional/WidgetAccessRequestPolicyControllerTest.java
    
incubator/wookie/trunk/src-tests/org/apache/wookie/tests/functional/WidgetsControllerTest.java
    incubator/wookie/trunk/src/org/apache/wookie/helpers/WidgetFactory.java

Modified: 
incubator/wookie/trunk/src-tests/org/apache/wookie/tests/functional/WidgetAccessRequestPolicyControllerTest.java
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/src-tests/org/apache/wookie/tests/functional/WidgetAccessRequestPolicyControllerTest.java?rev=1190330&r1=1190329&r2=1190330&view=diff
==============================================================================
--- 
incubator/wookie/trunk/src-tests/org/apache/wookie/tests/functional/WidgetAccessRequestPolicyControllerTest.java
 (original)
+++ 
incubator/wookie/trunk/src-tests/org/apache/wookie/tests/functional/WidgetAccessRequestPolicyControllerTest.java
 Fri Oct 28 13:58:40 2011
@@ -246,7 +246,7 @@ public class WidgetAccessRequestPolicyCo
    * @throws IOException
    * @throws HttpException
    */
-  private static Element[] getPolicies() throws HttpException, IOException {
+  public static Element[] getPolicies() throws HttpException, IOException {
     HttpClient client = new HttpClient();
     setAuthenticationCredentials(client);
     GetMethod get = new GetMethod(TEST_WARP_SERVICE_URL_VALID);

Modified: 
incubator/wookie/trunk/src-tests/org/apache/wookie/tests/functional/WidgetsControllerTest.java
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/src-tests/org/apache/wookie/tests/functional/WidgetsControllerTest.java?rev=1190330&r1=1190329&r2=1190330&view=diff
==============================================================================
--- 
incubator/wookie/trunk/src-tests/org/apache/wookie/tests/functional/WidgetsControllerTest.java
 (original)
+++ 
incubator/wookie/trunk/src-tests/org/apache/wookie/tests/functional/WidgetsControllerTest.java
 Fri Oct 28 13:58:40 2011
@@ -17,6 +17,7 @@ package org.apache.wookie.tests.function
 import static org.junit.Assert.*;
 
 import java.io.File;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 
 import org.apache.commons.httpclient.HttpClient;
@@ -28,6 +29,7 @@ import org.apache.commons.httpclient.met
 import org.apache.commons.httpclient.methods.multipart.FilePart;
 import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
 import org.apache.commons.httpclient.methods.multipart.Part;
+import org.jdom.Element;
 import org.junit.Test;
 
 /**
@@ -214,4 +216,70 @@ public class WidgetsControllerTest exten
          post.releaseConnection();     
        }
        
+       /**
+        * Check that when we update a widget, we don't duplicate access 
policies. See WOOKIE-273.
+        * @throws HttpException
+        * @throws IOException
+        * @throws InterruptedException 
+        */
+       @Test
+       public void checkForDuplicateAccessRequests() throws HttpException, 
IOException, InterruptedException{
+
+           //
+           // Add the test widget, and update it a few times
+           //
+           for (int i=0;i<4;i++){
+             
+             HttpClient client = new HttpClient();
+             //
+             // Use admin credentials
+             //
+             client.getState().setCredentials(
+                 new AuthScope("localhost", 8080, "wookie"),
+                 new UsernamePasswordCredentials("java", "java")
+             );
+             
+             PostMethod post = new PostMethod(TEST_WIDGETS_SERVICE_URL_VALID);
+
+             //
+             // Add the access test widget. This just has a single access 
request
+             // for the origin "http://accesstest.incubator.apache.org";
+             //
+             File file = new File("src-tests/testdata/access-test.wgt");
+             assertTrue(file.exists());
+
+             //
+             // Add test wgt file to POST
+             //
+             Part[] parts = { new FilePart(file.getName(), file) };
+             post.setRequestEntity(new MultipartRequestEntity(parts, post
+                 .getParams()));
+
+             //
+             // POST the file to /widgets 
+             //
+             client.executeMethod(post);   
+             post.releaseConnection(); 
+             
+             //
+             // Wait a few seconds for Wookie to finish updating
+             //
+             Thread.sleep(5000);
+           }
+
+           //
+           // Check that we only have one copy of the access request, not two
+           //
+           int policies = 0;
+           final String POLICY_ORIGIN = 
"http://accesstest.incubator.apache.org:80";;
+           Element[] policyElements = 
WidgetAccessRequestPolicyControllerTest.getPolicies();
+           for (Element policy: policyElements){
+             if 
(policy.getAttribute("origin").getValue().equals(POLICY_ORIGIN)) {
+               policies ++;
+             }
+           }
+           assertEquals(1, policies);
+
+       }
+       
 }

Added: incubator/wookie/trunk/src-tests/testdata/access-test.wgt
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/src-tests/testdata/access-test.wgt?rev=1190330&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/wookie/trunk/src-tests/testdata/access-test.wgt
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: 
incubator/wookie/trunk/src/org/apache/wookie/helpers/WidgetFactory.java
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/helpers/WidgetFactory.java?rev=1190330&r1=1190329&r2=1190330&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/helpers/WidgetFactory.java 
(original)
+++ incubator/wookie/trunk/src/org/apache/wookie/helpers/WidgetFactory.java Fri 
Oct 28 13:58:40 2011
@@ -236,7 +236,22 @@ public class WidgetFactory {
                }
        }
 
+       /**
+        * Create or update the access policies associated with a widget
+        * @param persistenceManager the persistence manager
+        * @param model the W3C model of the widget 
+        * @param widget the Wookie widget object
+        * @param grantAccessRequests whether access requests are granted by 
default
+        */
        private static void createAccessRequests(IPersistenceManager 
persistenceManager, W3CWidget model, IWidget widget, boolean 
grantAccessRequests){
+         //
+         // Remove any existing access policies
+         //
+         
persistenceManager.delete(persistenceManager.findApplicableAccessRequests(widget));
+         
+         //
+         // Create access policies for each access request in the widget model
+         //
                for(IAccessEntity accessEntity:model.getAccessList()){
             IAccessRequest acc = 
persistenceManager.newInstance(IAccessRequest.class);
                        acc.setOrigin(accessEntity.getOrigin());


Reply via email to