You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by jo...@apache.org on 2010/10/27 02:00:24 UTC

svn commit: r1027778 - in /shindig/trunk: features/src/main/javascript/features/rpc/ java/common/src/main/java/org/apache/shindig/config/ java/common/src/test/java/org/apache/shindig/auth/ java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caj...

Author: johnh
Date: Wed Oct 27 00:00:23 2010
New Revision: 1027778

URL: http://svn.apache.org/viewvc?rev=1027778&view=rev
Log:
Optimization of runtime-mutable ContainerConfig base implementation, using significantly less locking/synchronization than before.

Patch provided by Jacobo Tarrio.


Modified:
    shindig/trunk/features/src/main/javascript/features/rpc/nix.transport.js
    shindig/trunk/java/common/src/main/java/org/apache/shindig/config/AbstractContainerConfig.java
    shindig/trunk/java/common/src/main/java/org/apache/shindig/config/BasicContainerConfig.java
    shindig/trunk/java/common/src/main/java/org/apache/shindig/config/ExpressionContainerConfig.java
    shindig/trunk/java/common/src/test/java/org/apache/shindig/auth/BlobCrypterSecurityTokenCodecTest.java
    shindig/trunk/java/common/src/test/java/org/apache/shindig/auth/DefaultSecurityTokenCodecTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaCssSanitizerTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RendererTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ConcatVisitorTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentTypeCharsetRemoverRewriterTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CssResponseRewriterTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTestBase.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ImageAttributeRewriterTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagExtractorVisitorTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagProxyEmbeddedUrlsVisitorTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/TemplateRewriterTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HtmlAccelServletTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultAccelUriManagerTest.java

Modified: shindig/trunk/features/src/main/javascript/features/rpc/nix.transport.js
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/rpc/nix.transport.js?rev=1027778&r1=1027777&r2=1027778&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/rpc/nix.transport.js (original)
+++ shindig/trunk/features/src/main/javascript/features/rpc/nix.transport.js Wed Oct 27 00:00:23 2010
@@ -70,9 +70,11 @@ if (!gadgets.rpctx.nix) {  // make lib r
     // so we need to make these names quite unique, as
     // they will go into the global namespace.
     var NIX_WRAPPER = 'GRPC____NIXVBS_wrapper';
-    var NIX_GET_WRAPPER = 'GRPC____NIXVBS_get_wrapper';
+    var NIX_GET_INITIALIZER = 'GRPC____NIXVBS_get_init';
     var NIX_HANDLE_MESSAGE = 'GRPC____NIXVBS_handle_message';
     var NIX_CREATE_CHANNEL = 'GRPC____NIXVBS_create_channel';
+    var NIX_CHALLENGE_RESPOND = 'GRPC____NIXVBS_challenge_resp';
+    var NIX_GET_CHALLENGER = 'GRPC____NIXVBS_challenger';
     var MAX_NIX_SEARCHES = 10;
     var NIX_SEARCH_PERIOD = 500;
 
@@ -104,34 +106,22 @@ if (!gadgets.rpctx.nix) {  // make lib r
       }
 
       // If the gadget has yet to retrieve a reference to
-      // the NIX handler, try to do so now. We don't do a
+      // the NIX handler, start the challenge process. We don't do a
       // typeof(window.opener.GetAuthToken) check here
       // because it means accessing that field on the COM object, which,
       // being an internal function reference, is not allowed.
       // "in" works because it merely checks for the prescence of
       // the key, rather than actually accessing the object's property.
       // This is just a sanity check, not a validity check.
-      if (!handler && window.opener && 'GetAuthToken' in window.opener) {
+      if (!handler && window.opener && 'Initialize' in window.opener) {
         handler = window.opener;
+        window.opener = null;
 
-        // Create the channel to the parent/container.
-        // First verify that it knows our auth token to ensure it's not
-        // an impostor.
-        if (handler.GetAuthToken() == gadgets.rpc.getAuthToken('..')) {
-          // Auth match - pass it back along with our wrapper to finish.
-          // own wrapper and our authentication token for co-verification.
-          var token = gadgets.rpc.getAuthToken('..');
-          handler.CreateChannel(window[NIX_GET_WRAPPER]('..', token),
-              token);
-          // Set channel handler
-          nix_channels['..'] = handler;
-          window.opener = null;
-
-          // Signal success and readiness to send to parent.
-          // Container-to-gadget bit flipped in CreateChannel.
-          ready('..', true);
-          return;
-        }
+        // Send a challenge to the parent to re-ask for the auth token,
+        // to ensure the parent is not being wrapped by an attacker.
+        // A proper parent will respond to the challenge by passing
+        // the token along with a wrapper object used to communicate.
+        handler.Initialize(window[NIX_GET_CHALLENGER]());
       }
 
       // Try again.
@@ -204,20 +194,36 @@ if (!gadgets.rpctx.nix) {  // make lib r
         // checked via the typeof operator in IE. Fortunately
         // for us, this only applies to COM objects, so we
         // won't see this for a real Javascript object.
-        if (typeof window[NIX_GET_WRAPPER] !== 'unknown') {
+        if (typeof window[NIX_GET_INITIALIZER] !== 'unknown') {
           window[NIX_HANDLE_MESSAGE] = function(data) {
             window.setTimeout(
                 function() { processFn(gadgets.json.parse(data)); }, 0);
           };
 
           window[NIX_CREATE_CHANNEL] = function(name, channel, token) {
-            // Verify the authentication token of the gadget trying
-            // to create a channel for us.
-            if (gadgets.rpc.getAuthToken(name) === token) {
+            if (gadgets.rpc.getAuthToken(name) == token) {
+              // Re-verify the token for the child claiming to be the gadget,
+              // to ensure no navigation attack has occurred.
               nix_channels[name] = channel;
               ready(name, true);
             }
           };
+          
+          window[NIX_CHALLENGE_RESPOND] = function(auth, wrapper) {
+            var token = gadgets.rpc.getAuthToken('..');
+            if (auth == token) {
+              // Auth match - pass it back along with our wrapper to finish.
+              // own wrapper and our authentication token for co-verification.
+              wrapper.CreateChannel(window[NIX_GET_INITIALIZER]('..', token));
+              
+              // Set channel handler
+              nix_channels['..'] = wrapper;
+
+              // Signal success and readiness to send to parent.
+              // Container-to-gadget bit flipped in CreateChannel.
+              ready('..', true);
+            }
+          };
 
           // Inject the VBScript code needed.
           var vbscript =
@@ -233,13 +239,6 @@ if (!gadgets.rpctx.nix) {  // make lib r
               // used (although it is set to "..")
           + 'Private m_Intended\n'
 
-              // Stores the auth token used to communicate with
-              // the gadget. The GetChannelCreator method returns
-              // an object that returns this auth token. Upon matching
-              // that with its own, the gadget uses the object
-              // to actually establish the communication channel.
-          + 'Private m_Auth\n'
-
               // Method for internally setting the value
               // of the m_Intended property.
           + 'Public Sub SetIntendedName(name)\n '
@@ -247,26 +246,26 @@ if (!gadgets.rpctx.nix) {  // make lib r
           + 'm_Intended = name\n'
           + 'End If\n'
           + 'End Sub\n'
-
-              // Method for internally setting the value of the m_Auth property.
-          + 'Public Sub SetAuth(auth)\n '
-          + 'If isEmpty(m_Auth) Then\n'
+          
+              // Store auth token in the wrapper as well, but do NOT
+              // expose it in a Get method, which could be used by
+              // an attacker wrapping a parent context to steal context.
+              // This is used by the parent to validate that the child
+              // calling this method is the child it created, and wasn't
+              // navigated away in the meantime.
+          + 'Private m_Auth\n'
+          + 'Public Sub SetAuth(auth)\n'
+          + 'If (isEmpty(m_Auth)) Then\n'
           + 'm_Auth = auth\n'
           + 'End If\n'
-          + 'End Sub\n'
-
+          + 'End Sub'
+          
               // A wrapper method which actually causes a
               // message to be sent to the other context.
           + 'Public Sub SendMessage(data)\n '
           + NIX_HANDLE_MESSAGE + '(data)\n'
           + 'End Sub\n'
 
-              // Returns the auth token to the gadget, so it can
-              // confirm a match before initiating the connection
-          + 'Public Function GetAuthToken()\n '
-          + 'GetAuthToken = m_Auth\n'
-          + 'End Function\n'
-
               // Method for setting up the container->gadget
               // channel. Not strictly needed in the gadget's
               // wrapper, but no reason to get rid of it. Note here
@@ -274,18 +273,75 @@ if (!gadgets.rpctx.nix) {  // make lib r
               // method so that it can save the channel in the proper place
               // *and* verify the channel via the authentication token passed
               // here.
-          + 'Public Sub CreateChannel(channel, auth)\n '
-          + 'Call ' + NIX_CREATE_CHANNEL + '(m_Intended, channel, auth)\n'
+          + 'Public Sub CreateChannel(channel)\n '
+          + 'Call ' + NIX_CREATE_CHANNEL + '(m_Intended, channel, m_Auth)\n'
           + 'End Sub\n'
           + 'End Class\n'
+          
+              // To start up a NIX connection, parent first sets Initializer
+              // on window.opener, to be read by the child. The child
+              // cannot completely trust it, however, until the parent
+              // proves that it knows the rpctoken it set when creating
+              // the child. The window.opener wrapper can't simply have
+              // a GetAuthToken() method on it, since this in turn could
+              // be intercepted by a "super-parent" ie. parent.parent, which
+              // can wrap the parent and replace the opener method with its
+              // own. Thus the Initializer is called by the child, passing
+              // its own Challenger object (below).
+            'Class NixInitializer\n'
+            
+              // Stores the actual wrapper object passed to the child along
+              // with the auth token as answer to the child's challenge.
+              // Each setter is single-use only, so cannot be co-opted by
+              // a wrapping context.
+          + 'Private m_Wrapper\n'
+          + 'Public Sub SetWrapper(wrapper)\n '
+          + 'If isEmpty(m_Wrapper) Then\n'
+          + 'm_Wrapper = wrapper\n'
+          + 'End If'
+          + 'End Sub'
+          
+              // Auth setter.
+          + 'Private m_Auth\n'          
+          + 'Public Sub SetAuth(auth)\n '
+          + 'If isEmpty(m_Auth) Then\n'
+          + 'm_Auth = auth\n'
+          + 'End If\n'
+          + 'End Sub\n'
+          
+              // Initialization method to which the Challenger is passed
+          + 'Public Sub Initialize(challenger)\n'
+          + 'challenger.Respond m_Auth, m_Wrapper\n'
+          + 'End Sub'
+          + 'End Class'
+          
+              // The child's Challenger object simply passes through to
+              // JS that ensures that the parent really is the parent, by
+              // checking that the passed-in Auth token is correct. If so,
+              // communication channel creation occurs through CreateChannel,
+              // on the passed NIX wrapper object.
+          + 'Public Class Challenger\n'
+          + 'Public Sub Respond(auth, wrapper)\n '
+          + 'Call ' + NIX_CHALLENGE_RESPOND + '(auth, wrapper)\n'
+          + 'End Sub'
+          + 'End Class'  
 
-              // Function to get a reference to the wrapper.
-          + 'Function ' + NIX_GET_WRAPPER + '(name, auth)\n'
+              // Function to get a reference to the initializer, by the parent.
+          + 'Function ' + NIX_GET_INITIALIZER + '(name, auth)\n'
           + 'Dim wrap\n'
           + 'Set wrap = New ' + NIX_WRAPPER + '\n'
           + 'wrap.SetIntendedName name\n'
           + 'wrap.SetAuth auth\n'
-          + 'Set ' + NIX_GET_WRAPPER + ' = wrap\n'
+          + 'Dim init\n'
+          + 'Set init = New NixInitializer\n'
+          + 'init.SetAuth auth\n'
+          + 'init.SetWrapper wrapper\n'
+          + 'Set ' + NIX_GET_INITIALIZER + ' = init\n'
+          + 'End Function'
+          
+              // Create challenger wrapper object to prevent context leak.
+          + 'Function ' + NIX_GET_CHALLENGER + '()\n'
+          + 'Set ' + NIX_GET_CHALLENGER + ' = new Challenger\n'
           + 'End Function';
 
           try {
@@ -309,8 +365,8 @@ if (!gadgets.rpctx.nix) {  // make lib r
         }
         try {
           var frame = document.getElementById(receiverId);
-          var wrapper = window[NIX_GET_WRAPPER](receiverId, token);
-          frame.contentWindow.opener = wrapper;
+          var initializer = window[NIX_GET_INITIALIZER](receiverId, token);
+          frame.contentWindow.opener = initializer;
         } catch (e) {
           return false;
         }

Modified: shindig/trunk/java/common/src/main/java/org/apache/shindig/config/AbstractContainerConfig.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/main/java/org/apache/shindig/config/AbstractContainerConfig.java?rev=1027778&r1=1027777&r2=1027778&view=diff
==============================================================================
--- shindig/trunk/java/common/src/main/java/org/apache/shindig/config/AbstractContainerConfig.java (original)
+++ shindig/trunk/java/common/src/main/java/org/apache/shindig/config/AbstractContainerConfig.java Wed Oct 27 00:00:23 2010
@@ -1,90 +0,0 @@
-/*
- * 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.shindig.config;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Base class for fake objects in tests involving container configurations.
- *
- * @deprecated Please create and populate {@link BasicContainerConfig} or
- *             {@link ExpressionContainerConfig} objects instead of subclassing
- *             {@link AbstractContainerConfig}.
- */
-public abstract class AbstractContainerConfig implements ContainerConfig {
-  public String getString(String container, String property) {
-    Object value = getProperty(container, property);
-    if (value == null) {
-      return null;
-    }
-    return value.toString();
-  }
-
-  public int getInt(String container, String property) {
-    Object value = getProperty(container, property);
-    if (value instanceof Number) {
-      return ((Number) value).intValue();
-    }
-    return 0;
-  }
-
-  public boolean getBool(String container, String property) {
-    Object value = getProperty(container, property);
-    if (value instanceof Boolean) {
-      return ((Boolean) value).booleanValue();
-    }
-    return false;
-  }
-
-  @SuppressWarnings("unchecked")
-  public <T> List<T> getList(String container, String property) {
-    Object value = getProperty(container, property);
-    if (value instanceof List) {
-      return (List<T>) value;
-    }
-    return Collections.emptyList();
-  }
-
-  @SuppressWarnings("unchecked")
-  public <T> Map<String, T> getMap(String container, String property) {
-    Object value = getProperty(container, property);
-    if (value instanceof Map) {
-      return (Map<String, T>) value;
-    }
-    return Collections.emptyMap();
-  }
-
-  public Transaction newTransaction() {
-    throw new UnsupportedOperationException();
-  }
-  
-  public Collection<String> getContainers() {
-    throw new UnsupportedOperationException();
-  }
-
-  public Map<String, Object> getProperties(String container) {
-    throw new UnsupportedOperationException();
-  }
-
-  public abstract Object getProperty(String container, String name);
-}

Modified: shindig/trunk/java/common/src/main/java/org/apache/shindig/config/BasicContainerConfig.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/main/java/org/apache/shindig/config/BasicContainerConfig.java?rev=1027778&r1=1027777&r2=1027778&view=diff
==============================================================================
--- shindig/trunk/java/common/src/main/java/org/apache/shindig/config/BasicContainerConfig.java (original)
+++ shindig/trunk/java/common/src/main/java/org/apache/shindig/config/BasicContainerConfig.java Wed Oct 27 00:00:23 2010
@@ -19,6 +19,7 @@
 
 package org.apache.shindig.config;
 
+import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 
@@ -28,13 +29,12 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
-import java.util.concurrent.locks.ReadWriteLock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
 
 /**
  * Basic container configuration class, without expression support.
- * 
+ *
  * We use a cascading model, so you only have to specify attributes in
  * your config that you actually want to change.
  *
@@ -43,34 +43,22 @@ import java.util.concurrent.locks.Reentr
  */
 public class BasicContainerConfig implements ContainerConfig {
 
-  protected final ReadWriteLock lock = new ReentrantReadWriteLock();
-  protected final Map<String, Map<String, Object>> config = Maps.newHashMap();
-  
-  public final Collection<String> getContainers() {
-    lock.readLock().lock();
-    try {
-      return doGetContainers();
-    } finally {
-      lock.readLock().unlock();
-    }
+  protected Map<String, Map<String, Object>> config = Maps.newHashMap();
+
+  public Collection<String> getContainers() {
+    return Collections.unmodifiableSet(config.keySet());
   }
 
-  public final Map<String, Object> getProperties(String container) {
-    lock.readLock().lock();
-    try {
-      return doGetProperties(container);
-    } finally {
-      lock.readLock().unlock();
-    }
+  public Map<String, Object> getProperties(String container) {
+    return config.get(container);
   }
 
-  public final Object getProperty(String container, String name) {
-    lock.readLock().lock();
-    try {
-      return doGetProperty(container, name);
-    } finally {
-      lock.readLock().unlock();
+  public Object getProperty(String container, String name) {
+    Map<String, Object> containerData = config.get(container);
+    if (containerData == null) {
+      return null;
     }
+    return containerData.get(name);
   }
 
   public String getString(String container, String property) {
@@ -121,33 +109,12 @@ public class BasicContainerConfig implem
     return new BasicTransaction();
   }
 
-  protected Collection<String> doGetContainers() {
-    return Collections.unmodifiableSet(config.keySet());
-  }
-
-  protected Map<String, Object> doGetProperties(String container) {
-    return config.get(container);
-  }
-
-  protected Object doGetProperty(String container, String name) {
-    Map<String, Object> containerData = config.get(container);
-    if (containerData == null) {
-      return null;
-    }
-    return containerData.get(name);
-  }
-  
   @Override
   public String toString() {
-    lock.readLock().lock();
-    try {
-      return JsonSerializer.serialize(config);
-    } finally {
-      lock.readLock().unlock();
-    }
+    return JsonSerializer.serialize(config);
   }
-  
-  protected class BasicTransaction implements Transaction {    
+
+  protected class BasicTransaction implements Transaction {
     protected boolean clear = false;
     protected Map<String, Map<String, Object>> setContainers = Maps.newHashMap();
     protected Set<String> removeContainers = Sets.newHashSet();
@@ -179,20 +146,17 @@ public class BasicContainerConfig implem
     }
 
     public void commit() throws ContainerConfigException {
-      Set<String> removed = Sets.newHashSet();
-      Set<String> changed = Sets.newHashSet();
-      if (throwException != null) {
-        throw throwException;
-      }
-      lock.writeLock().lock();
-      try {
+      synchronized (BasicContainerConfig.this) {
+        Set<String> removed = Sets.newHashSet();
+        Set<String> changed = Sets.newHashSet();
+        if (throwException != null) {
+          throw throwException;
+        }
         BasicContainerConfig tmpConfig = getTemporaryConfig(!clear);
         changeContainersInConfig(tmpConfig, setContainers, removeContainers);
         // This point will not be reached if an exception was thrown.
         diffConfiguration(tmpConfig, changed, removed);
         setNewConfig(tmpConfig);
-      } finally {
-        lock.writeLock().unlock();
       }
     }
 
@@ -210,7 +174,7 @@ public class BasicContainerConfig implem
     protected BasicContainerConfig getTemporaryConfig(boolean copyValues) {
       BasicContainerConfig tmp = new BasicContainerConfig();
       if (copyValues) {
-        tmp.config.putAll(config);
+        tmp.config = deepCopyConfig(config);
       }
       return tmp;
     }
@@ -243,8 +207,7 @@ public class BasicContainerConfig implem
      * @param newConfig The map that contains the new configuration.
      */
     protected void setNewConfig(BasicContainerConfig newConfig) {
-      config.clear();
-      config.putAll(newConfig.config);
+      config = newConfig.config;
     }
 
     /**
@@ -259,8 +222,8 @@ public class BasicContainerConfig implem
      *   'user': 'anne',
      *   'colour': 'green',
      *   'map': { 'longitude': 130 } }
-     *   
-     * It would in a merged "new" container that looks like this:
+     *
+     * It would result in a merged "new" container that looks like this:
      * { 'gadgets.container': ['new'],
      *   'base': '/gadgets/foo',
      *   'user': 'anne',
@@ -315,7 +278,7 @@ public class BasicContainerConfig implem
       }
       return clone;
     }
-    
+
     /**
      * Calculates the difference between the current and new configurations.
      *
@@ -334,5 +297,37 @@ public class BasicContainerConfig implem
         }
       }
     }
+
+    /**
+     * Returns a deep copy of a configuration object.
+     *
+     * @param config The configuration object to copy.
+     * @return A copy of the configuration object.
+     */
+    @SuppressWarnings("unchecked")
+    protected Map<String, Map<String, Object>> deepCopyConfig(
+        Map<String, Map<String, Object>> config) {
+      return (Map<String, Map<String, Object>>) deepCopyObject(config);
+    }
+
+    private Object deepCopyObject(Object obj) {
+      if (obj instanceof Map<?, ?>) {
+        Map<?, ?> objMap = (Map<?, ?>) obj;
+        Map<Object, Object> map = Maps.newHashMap();
+        for (Entry<?, ?> entry : objMap.entrySet()) {
+          map.put(entry.getKey(), deepCopyObject(entry.getValue()));
+        }
+        return map;
+      } else if (obj instanceof List<?>) {
+        List<?> objList = (List<?>) obj;
+        List<Object> list = Lists.newArrayList();
+        for (Object elem : objList) {
+          list.add(deepCopyObject(elem));
+        }
+        return list;
+      } else {
+        return obj;
+      }
+    }
   }
 }

Modified: shindig/trunk/java/common/src/main/java/org/apache/shindig/config/ExpressionContainerConfig.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/main/java/org/apache/shindig/config/ExpressionContainerConfig.java?rev=1027778&r1=1027777&r2=1027778&view=diff
==============================================================================
--- shindig/trunk/java/common/src/main/java/org/apache/shindig/config/ExpressionContainerConfig.java (original)
+++ shindig/trunk/java/common/src/main/java/org/apache/shindig/config/ExpressionContainerConfig.java Wed Oct 27 00:00:23 2010
@@ -46,7 +46,7 @@ import javax.el.ValueExpression;
 @Singleton
 public class ExpressionContainerConfig extends BasicContainerConfig {
 
-  protected final Map<String, Map<String, Object>> rawConfig;
+  protected Map<String, Map<String, Object>> rawConfig;
   private final Expressions expressions;
 
   public ExpressionContainerConfig(Expressions expressions) {
@@ -65,7 +65,7 @@ public class ExpressionContainerConfig e
   }
 
   @Override
-  public Object doGetProperty(String container, String property) {
+  public Object getProperty(String container, String property) {
     if (property.startsWith("${")) {
       // An expression!
       try {
@@ -76,7 +76,7 @@ public class ExpressionContainerConfig e
       }
     }
 
-    return super.doGetProperty(container, property);
+    return super.getProperty(container, property);
   }
 
   protected Expressions getExpressions() {
@@ -93,8 +93,8 @@ public class ExpressionContainerConfig e
     protected BasicContainerConfig getTemporaryConfig(boolean copyValues) {
       ExpressionContainerConfig tmp = new ExpressionContainerConfig(getExpressions());
       if (copyValues) {
-        tmp.rawConfig.putAll(rawConfig);
-        tmp.config.putAll(config);
+        tmp.rawConfig = deepCopyConfig(rawConfig);
+        tmp.config = deepCopyConfig(config);
       }
       return tmp;
     }
@@ -126,10 +126,8 @@ public class ExpressionContainerConfig e
     @Override
     protected void setNewConfig(BasicContainerConfig newConfig) {
       ExpressionContainerConfig tmp = (ExpressionContainerConfig) newConfig;
-      rawConfig.clear();
-      rawConfig.putAll(tmp.rawConfig);
-      config.clear();
-      config.putAll(tmp.config);
+      rawConfig = tmp.rawConfig;
+      config = tmp.config;
     }
 
     private Object parseAll(Object value, ELContext context) {

Modified: shindig/trunk/java/common/src/test/java/org/apache/shindig/auth/BlobCrypterSecurityTokenCodecTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/test/java/org/apache/shindig/auth/BlobCrypterSecurityTokenCodecTest.java?rev=1027778&r1=1027777&r2=1027778&view=diff
==============================================================================
--- shindig/trunk/java/common/src/test/java/org/apache/shindig/auth/BlobCrypterSecurityTokenCodecTest.java (original)
+++ shindig/trunk/java/common/src/test/java/org/apache/shindig/auth/BlobCrypterSecurityTokenCodecTest.java Wed Oct 27 00:00:23 2010
@@ -19,7 +19,6 @@
 package org.apache.shindig.auth;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
@@ -27,11 +26,11 @@ import org.apache.shindig.common.crypto.
 import org.apache.shindig.common.crypto.BlobCrypter;
 import org.apache.shindig.common.util.CharsetUtil;
 import org.apache.shindig.common.util.FakeTimeSource;
-import org.apache.shindig.config.AbstractContainerConfig;
+import org.apache.shindig.config.BasicContainerConfig;
 import org.apache.shindig.config.ContainerConfig;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Lists;
 
 import junit.framework.Assert;
 
@@ -40,7 +39,6 @@ import org.junit.Test;
 
 import java.io.File;
 import java.io.IOException;
-import java.util.Collection;
 import java.util.Map;
 
 /**
@@ -53,26 +51,25 @@ public class BlobCrypterSecurityTokenCod
 
   @Before
   public void setUp() throws Exception {
-    ContainerConfig config = new AbstractContainerConfig() {
-      @Override
-      public Object getProperty(String container, String name) {
-        if (BlobCrypterSecurityTokenCodec.SECURITY_TOKEN_KEY_FILE.equals(name)) {
-          return getContainerKey(container);
-        }
-        if (BlobCrypterSecurityTokenCodec.SIGNED_FETCH_DOMAIN.equals(name)) {
-          return container + ".com";
-        }
-        throw new RuntimeException("Mock not smart enough, unknown name " + name);
-      }
-
-      @Override
-      public Collection<String> getContainers() {
-        return Lists.newArrayList("container", "example");
-      }
-    };
+    ContainerConfig config = new BasicContainerConfig();
+    config
+        .newTransaction()
+        .addContainer(makeContainer("default"))
+        .addContainer(makeContainer("container"))
+        .addContainer(makeContainer("example"))
+        .commit();
     codec = new CodecWithLoadStubbedOut(config);
   }
-
+  
+  protected Map<String, Object> makeContainer(String container) {
+    return ImmutableMap.<String, Object>of(ContainerConfig.CONTAINER_KEY,
+        ImmutableList.of(container),
+        BlobCrypterSecurityTokenCodec.SECURITY_TOKEN_KEY_FILE,
+        getContainerKey(container),
+        BlobCrypterSecurityTokenCodec.SIGNED_FETCH_DOMAIN,
+        container + ".com");
+  }
+  
   protected String getContainerKey(String container) {
     return "KEY FOR CONTAINER " + container;
   }
@@ -210,23 +207,14 @@ public class BlobCrypterSecurityTokenCod
 
   @Test
   public void testLoadFailure() throws Exception {
-    ContainerConfig config = new AbstractContainerConfig() {
-      @Override
-      public Object getProperty(String container, String name) {
-        if (BlobCrypterSecurityTokenCodec.SECURITY_TOKEN_KEY_FILE.equals(name)) {
-          return getContainerKey(container);
-        }
-        if (BlobCrypterSecurityTokenCodec.SIGNED_FETCH_DOMAIN.equals(name)) {
-          return container + ".com";
-        }
-        throw new RuntimeException("Mock not smart enough, unknown name " + name);
-      }
-
-      @Override
-      public Collection<String> getContainers() {
-        return Lists.newArrayList("container", "example", "failure");
-      }
-    };
+    ContainerConfig config = new BasicContainerConfig();
+    config
+        .newTransaction()
+        .addContainer(makeContainer("default"))
+        .addContainer(makeContainer("container"))
+        .addContainer(makeContainer("example"))
+        .addContainer(makeContainer("failure"))
+        .commit();
 
     try {
       new CodecWithLoadStubbedOut(config);

Modified: shindig/trunk/java/common/src/test/java/org/apache/shindig/auth/DefaultSecurityTokenCodecTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/test/java/org/apache/shindig/auth/DefaultSecurityTokenCodecTest.java?rev=1027778&r1=1027777&r2=1027778&view=diff
==============================================================================
--- shindig/trunk/java/common/src/test/java/org/apache/shindig/auth/DefaultSecurityTokenCodecTest.java (original)
+++ shindig/trunk/java/common/src/test/java/org/apache/shindig/auth/DefaultSecurityTokenCodecTest.java Wed Oct 27 00:00:23 2010
@@ -23,7 +23,7 @@ import static org.junit.Assert.assertNul
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-import org.apache.shindig.config.AbstractContainerConfig;
+import org.apache.shindig.config.BasicContainerConfig;
 
 import com.google.common.collect.Lists;
 
@@ -38,7 +38,7 @@ import java.util.Map;
  */
 public class DefaultSecurityTokenCodecTest {
 
-  private static class FakeContainerConfig extends AbstractContainerConfig {
+  private static class FakeContainerConfig extends BasicContainerConfig {
     private final String tokenType;
 
     public FakeContainerConfig(String tokenType) {

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaCssSanitizerTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaCssSanitizerTest.java?rev=1027778&r1=1027777&r2=1027778&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaCssSanitizerTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaCssSanitizerTest.java Wed Oct 27 00:00:23 2010
@@ -18,11 +18,12 @@
 package org.apache.shindig.gadgets.parse.caja;
 
 import com.google.caja.parser.css.CssTree;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 
 import org.apache.shindig.common.EasyMockTestCase;
 import org.apache.shindig.common.uri.Uri;
-import org.apache.shindig.config.AbstractContainerConfig;
+import org.apache.shindig.config.BasicContainerConfig;
 import org.apache.shindig.config.ContainerConfig;
 import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.render.SanitizingProxyUriManager;
@@ -31,9 +32,6 @@ import org.apache.shindig.gadgets.uri.Pr
 import org.junit.Before;
 import org.junit.Test;
 
-import java.util.HashMap;
-import java.util.Map;
-
 /**
  * Tests for CajaCssSanitizer.
  */
@@ -45,39 +43,25 @@ public class CajaCssSanitizerTest extend
   private SanitizingProxyUriManager imageRewriter;
   private GadgetContext gadgetContext;
   public static final String MOCK_CONTAINER = "mockContainer";
-
-  private static class FakeContainerConfig extends AbstractContainerConfig {
-    private final Map<String, Map<String, Object>> containers =
-        new HashMap<String, Map<String, Object>>();
-
-    private FakeContainerConfig() {
-      containers.put(ContainerConfig.DEFAULT_CONTAINER, ImmutableMap.<String, Object>builder()
-          .put(DefaultProxyUriManager.PROXY_HOST_PARAM, "www.test.com")
-          .put(DefaultProxyUriManager.PROXY_PATH_PARAM, "/dir/proxy")
-          .build());
-      containers.put(MOCK_CONTAINER, ImmutableMap.<String, Object>builder()
-          .put(DefaultProxyUriManager.PROXY_HOST_PARAM, "www.mock.com")
-          .build());
-    }
-
-    @Override
-    public Object getProperty(String container, String name) {
-      Map<String, Object> data = containers.get(container);
-
-      // Inherit from default if there is no value for this key.
-      if (!data.containsKey(name)) {
-        data = containers.get(ContainerConfig.DEFAULT_CONTAINER);
-      }
-      return data.get(name);
-    }
-  }
+  private static final ImmutableMap<String, Object> DEFAULT_CONTAINER_CONFIG = ImmutableMap
+      .<String, Object>builder()
+      .put(ContainerConfig.CONTAINER_KEY, ImmutableList.of("default"))
+      .put(DefaultProxyUriManager.PROXY_HOST_PARAM, "www.test.com")
+      .put(DefaultProxyUriManager.PROXY_PATH_PARAM, "/dir/proxy")
+      .build();
+  private static final ImmutableMap<String, Object> MOCK_CONTAINER_CONFIG = ImmutableMap
+      .<String, Object>builder()
+      .put(ContainerConfig.CONTAINER_KEY, ImmutableList.of(MOCK_CONTAINER))
+      .put(DefaultProxyUriManager.PROXY_HOST_PARAM, "www.mock.com")
+      .build();
 
   @Before
   public void setUp() throws Exception {
     parser = new CajaCssParser();
     sanitizer = new CajaCssSanitizer(parser);
 
-    ContainerConfig config = new FakeContainerConfig();
+    ContainerConfig config = new BasicContainerConfig();
+    config.newTransaction().addContainer(DEFAULT_CONTAINER_CONFIG).addContainer(MOCK_CONTAINER_CONFIG).commit();
     ProxyUriManager proxyUriManager = new DefaultProxyUriManager(config, null);
 
     importRewriter = new SanitizingProxyUriManager(proxyUriManager, "text/css");

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RendererTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RendererTest.java?rev=1027778&r1=1027777&r2=1027778&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RendererTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RendererTest.java Wed Oct 27 00:00:23 2010
@@ -23,7 +23,7 @@ import static org.junit.Assert.assertNot
 import static org.junit.Assert.assertTrue;
 
 import org.apache.shindig.common.uri.Uri;
-import org.apache.shindig.config.AbstractContainerConfig;
+import org.apache.shindig.config.BasicContainerConfig;
 import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.GadgetException;
@@ -170,7 +170,7 @@ public class RendererTest {
     assertEquals(RenderingResults.Status.ERROR, results.getStatus());
   }
 
-  private static class FakeContainerConfig extends AbstractContainerConfig {
+  private static class FakeContainerConfig extends BasicContainerConfig {
     protected final Map<String, Object> data = Maps.newHashMap();
 
     @Override

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java?rev=1027778&r1=1027777&r2=1027778&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java Wed Oct 27 00:00:23 2010
@@ -38,7 +38,7 @@ import org.apache.shindig.common.JsonAss
 import org.apache.shindig.common.PropertiesModule;
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.common.xml.XmlUtil;
-import org.apache.shindig.config.AbstractContainerConfig;
+import org.apache.shindig.config.BasicContainerConfig;
 import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.GadgetException;
@@ -989,7 +989,7 @@ public class RenderingGadgetRewriterTest
     }
   }
 
-  private static class FakeContainerConfig extends AbstractContainerConfig {
+  private static class FakeContainerConfig extends BasicContainerConfig {
     protected final Map<String, Object> data = Maps.newHashMap();
 
     @Override

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ConcatVisitorTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ConcatVisitorTest.java?rev=1027778&r1=1027777&r2=1027778&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ConcatVisitorTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ConcatVisitorTest.java Wed Oct 27 00:00:23 2010
@@ -105,7 +105,7 @@ public class ConcatVisitorTest extends D
 
   @Override
   @Before
-  public void setUp() {
+  public void setUp() throws Exception {
     super.setUp();
     js1 = elem("script", "src", JS1_URL_STR);
     js2 = elem("script", "src", JS2_URL_STR);

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentTypeCharsetRemoverRewriterTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentTypeCharsetRemoverRewriterTest.java?rev=1027778&r1=1027777&r2=1027778&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentTypeCharsetRemoverRewriterTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentTypeCharsetRemoverRewriterTest.java Wed Oct 27 00:00:23 2010
@@ -34,8 +34,9 @@ import static org.junit.Assert.assertEqu
 public class ContentTypeCharsetRemoverRewriterTest extends DomWalkerTestBase {
   private CajaHtmlParser htmlParser;
 
+  @Override
   @Before
-  public void setUp() {
+  public void setUp() throws Exception {
     super.setUp();
     ParseModule.DOMImplementationProvider domImpl =
         new ParseModule.DOMImplementationProvider();

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CssResponseRewriterTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CssResponseRewriterTest.java?rev=1027778&r1=1027777&r2=1027778&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CssResponseRewriterTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CssResponseRewriterTest.java Wed Oct 27 00:00:23 2010
@@ -17,12 +17,13 @@
  */
 package org.apache.shindig.gadgets.rewrite;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.shindig.common.uri.Uri;
-import org.apache.shindig.config.AbstractContainerConfig;
+import org.apache.shindig.config.BasicContainerConfig;
 import org.apache.shindig.config.ContainerConfig;
 import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.http.HttpRequest;
@@ -36,9 +37,7 @@ import org.junit.Test;
 
 import java.io.StringReader;
 import java.io.StringWriter;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import static org.junit.Assert.assertEquals;
 
@@ -46,32 +45,17 @@ import static org.junit.Assert.assertEqu
  * Tests for CssResponseRewriter.
  */
 public class CssResponseRewriterTest extends RewriterTestBase {
-  private static class FakeContainerConfig extends AbstractContainerConfig {
-    private Map<String, Map<String, Object>> containers = new HashMap<String, Map<String, Object>>();
-
-    private FakeContainerConfig() {
-      containers.put(ContainerConfig.DEFAULT_CONTAINER, ImmutableMap.<String, Object>builder()
-        .put(DefaultProxyUriManager.PROXY_HOST_PARAM, "www.test.com")
-        .put(DefaultProxyUriManager.PROXY_PATH_PARAM, "/dir/proxy")
-        .build());
-
-      containers.put(MOCK_CONTAINER, ImmutableMap.<String, Object>builder()
-        .put(DefaultProxyUriManager.PROXY_HOST_PARAM, "www.mock.com")
-        .build());
-    }
-
-    @Override
-    public Object getProperty(String container, String name) {
-      Map<String, Object> data = containers.get(container);
-
-      //if there is no value by this key inherit from default
-      if (!data.containsKey(name)) {
-        data = containers.get(ContainerConfig.DEFAULT_CONTAINER);
-      }
-
-      return data.get(name);
-    }
-  }
+  private static final ImmutableMap<String, Object> DEFAULT_CONTAINER_CONFIG = ImmutableMap
+      .<String, Object>builder()
+      .put(ContainerConfig.CONTAINER_KEY, ImmutableList.of("default"))
+      .put(DefaultProxyUriManager.PROXY_HOST_PARAM, "www.test.com")
+      .put(DefaultProxyUriManager.PROXY_PATH_PARAM, "/dir/proxy")
+      .build();
+  private static final ImmutableMap<String, Object> MOCK_CONTAINER_CONFIG = ImmutableMap
+      .<String, Object>builder()
+      .put(ContainerConfig.CONTAINER_KEY, ImmutableList.of(MOCK_CONTAINER))
+      .put(DefaultProxyUriManager.PROXY_HOST_PARAM, "www.mock.com")
+      .build();
 
   private CssResponseRewriter rewriter;
   private CssResponseRewriter rewriterNoOverrideExpires;
@@ -93,7 +77,12 @@ public class CssResponseRewriterTest ext
             return overrideFeatureNoOverrideExpires;
           }
         };
-    ContainerConfig config = new FakeContainerConfig();
+    ContainerConfig config = new BasicContainerConfig();
+    config
+        .newTransaction()
+        .addContainer(DEFAULT_CONTAINER_CONFIG)
+        .addContainer(MOCK_CONTAINER_CONFIG)
+        .commit();
     proxyUriManager = new DefaultProxyUriManager(config, null);
     rewriterNoOverrideExpires = new CssResponseRewriter(new CajaCssParser(),
         proxyUriManager, factoryNoOverrideExpires);

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTest.java?rev=1027778&r1=1027777&r2=1027778&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTest.java Wed Oct 27 00:00:23 2010
@@ -19,6 +19,7 @@
 package org.apache.shindig.gadgets.rewrite;
 
 import com.google.common.collect.Lists;
+
 import org.apache.shindig.gadgets.Gadget;
 import org.junit.Before;
 import org.junit.Test;
@@ -41,7 +42,7 @@ public class DomWalkerTest extends DomWa
 
   @Override
   @Before
-  public void setUp() {
+  public void setUp() throws Exception {
     super.setUp();
 
     // Create a base document with structure:

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTestBase.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTestBase.java?rev=1027778&r1=1027777&r2=1027778&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTestBase.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTestBase.java Wed Oct 27 00:00:23 2010
@@ -49,7 +49,7 @@ public class DomWalkerTestBase {
   protected Document doc;
 
   @Before
-  public void setUp() {
+  public void setUp() throws Exception {
     Injector injector = Guice.createInjector(Modules.override(new ParseModule())
         .with(new AbstractModule() {
           @Override

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ImageAttributeRewriterTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ImageAttributeRewriterTest.java?rev=1027778&r1=1027777&r2=1027778&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ImageAttributeRewriterTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ImageAttributeRewriterTest.java Wed Oct 27 00:00:23 2010
@@ -54,7 +54,8 @@ public class ImageAttributeRewriterTest 
   private static final String IMG_JPG_LARGE_URL =
       "org/apache/shindig/gadgets/rewrite/image/large.jpg";
 
-  public void setUp() {
+  @Override
+  public void setUp() throws Exception {
     super.setUp();
 
     control = EasyMock.createControl();

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagExtractorVisitorTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagExtractorVisitorTest.java?rev=1027778&r1=1027777&r2=1027778&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagExtractorVisitorTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagExtractorVisitorTest.java Wed Oct 27 00:00:23 2010
@@ -52,8 +52,9 @@ import java.util.List;
 public class StyleTagExtractorVisitorTest extends DomWalkerTestBase {
   private ProxyUriManager proxyUriManager;
   
+  @Override
   @Before
-  public void setUp() {
+  public void setUp() throws Exception {
     super.setUp();
     proxyUriManager = new PassthruManager();
   }

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagProxyEmbeddedUrlsVisitorTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagProxyEmbeddedUrlsVisitorTest.java?rev=1027778&r1=1027777&r2=1027778&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagProxyEmbeddedUrlsVisitorTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagProxyEmbeddedUrlsVisitorTest.java Wed Oct 27 00:00:23 2010
@@ -25,7 +25,6 @@ import com.google.inject.Injector;
 import org.apache.commons.lang.StringUtils;
 import org.apache.shindig.common.PropertiesModule;
 import org.apache.shindig.common.uri.Uri;
-import org.apache.shindig.config.AbstractContainerConfig;
 import org.apache.shindig.config.ContainerConfig;
 import org.apache.shindig.gadgets.DefaultGuiceModule;
 import org.apache.shindig.gadgets.Gadget;
@@ -42,9 +41,6 @@ import org.junit.Test;
 import org.w3c.dom.Document;
 import org.w3c.dom.NodeList;
 
-import java.util.HashMap;
-import java.util.Map;
-
 import static org.junit.Assert.assertEquals;
 
 /**
@@ -52,39 +48,20 @@ import static org.junit.Assert.assertEqu
  */
 public class StyleTagProxyEmbeddedUrlsVisitorTest extends DomWalkerTestBase {
   protected static final String MOCK_CONTAINER = "mock";
-
-  private static class FakeContainerConfig extends AbstractContainerConfig {
-    private Map<String, Map<String, Object>> containers = new HashMap<String, Map<String, Object>>();
-
-    private FakeContainerConfig(ContainerConfig defaultContainerConfig) {
-      containers.put(ContainerConfig.DEFAULT_CONTAINER,
-          defaultContainerConfig.getProperties(ContainerConfig.DEFAULT_CONTAINER));
-
-      containers.put(MOCK_CONTAINER, ImmutableMap.<String, Object>builder()
-          .put(DefaultProxyUriManager.PROXY_HOST_PARAM, "www.mock.com")
-          .build());
-    }
-
-    @Override
-    public Object getProperty(String container, String name) {
-      Map<String, Object> data = containers.get(container);
-
-      //if there is no value by this key inherit from default
-      if (!data.containsKey(name)) {
-        data = containers.get(ContainerConfig.DEFAULT_CONTAINER);
-      }
-
-      return data.get(name);
-    }
-  }
+  private static final ImmutableMap<String, Object> MOCK_CONTAINER_CONFIG = ImmutableMap
+      .<String, Object>builder()
+      .put(ContainerConfig.CONTAINER_KEY, ImmutableList.of("mock"))
+      .put(DefaultProxyUriManager.PROXY_HOST_PARAM, "www.mock.com")
+      .build();
 
   private Injector injector;
   private CajaHtmlParser htmlParser;
   private CajaHtmlSerializer serializer;
   private ProxyUriManager proxyUriManager;
 
+  @Override
   @Before
-  public void setUp() {
+  public void setUp() throws Exception {
     super.setUp();
     injector = Guice.createInjector(
         new PropertiesModule(), new DefaultGuiceModule(), new OAuthModule());
@@ -92,7 +69,8 @@ public class StyleTagProxyEmbeddedUrlsVi
         new ParseModule.DOMImplementationProvider();
     htmlParser = new CajaHtmlParser(domImpl.get());
     serializer = new CajaHtmlSerializer();
-    ContainerConfig config = new FakeContainerConfig(injector.getInstance(ContainerConfig.class));
+    ContainerConfig config = injector.getInstance(ContainerConfig.class);
+    config.newTransaction().addContainer(MOCK_CONTAINER_CONFIG).commit();
     proxyUriManager = new DefaultProxyUriManager(config, null);
   }
 

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/TemplateRewriterTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/TemplateRewriterTest.java?rev=1027778&r1=1027777&r2=1027778&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/TemplateRewriterTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/TemplateRewriterTest.java Wed Oct 27 00:00:23 2010
@@ -20,7 +20,7 @@ package org.apache.shindig.gadgets.rewri
 
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.common.xml.XmlUtil;
-import org.apache.shindig.config.AbstractContainerConfig;
+import org.apache.shindig.config.BasicContainerConfig;
 import org.apache.shindig.expressions.Expressions;
 import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.GadgetContext;
@@ -65,7 +65,7 @@ public class TemplateRewriterTest {
   private Gadget gadget;
   private MutableContent content;
   private TemplateRewriter rewriter;
-  private final Map<String, Object> config = Maps.newHashMap();
+  private final Map<String, Object> data = Maps.newHashMap();
   
   private static final Uri GADGET_URI = Uri.parse("http://example.org/gadget.php");
   
@@ -219,7 +219,7 @@ public class TemplateRewriterTest {
     // inline tags: tag1 inline1 tag2 inline2 tag3 inline3
     // External tags: tag1 external1 tag2 external2 tag3 external3 tag4 external4
     
-    config.put("${Cur['gadgets.features'].osml.library}",
+    data.put("${Cur['gadgets.features'].osml.library}",
         "org/apache/shindig/gadgets/rewrite/OSML_test.xml");
 
     setupGadget(getGadgetXmlWithLibrary(CONTENT_TESTING_PRECEDENCE_RULES));
@@ -237,7 +237,7 @@ public class TemplateRewriterTest {
     // Default handlers: tag1 default1
     // OSML: tag1 osml1 tag2 osml2
 
-    config.put("${Cur['gadgets.features'].osml.library}",
+    data.put("${Cur['gadgets.features'].osml.library}",
         "org/apache/shindig/gadgets/rewrite/OSML_test.xml");
 
     setupGadget(getGadgetXmlWithLibrary(CONTENT_TESTING_PRECEDENCE_RULES, "osml"));
@@ -257,7 +257,7 @@ public class TemplateRewriterTest {
     // External tags: tag1 external1 tag2 external2 tag3 external3 tag4 external4
 
     // Explicitly don't support OSML
-    config.put("${Cur['gadgets.features'].osml.library}", "");
+    data.put("${Cur['gadgets.features'].osml.library}", "");
 
     setupGadget(getGadgetXmlWithLibrary(CONTENT_TESTING_PRECEDENCE_RULES));
     rewriter.rewrite(gadget, content);
@@ -386,10 +386,10 @@ public class TemplateRewriterTest {
     }
   }
   
-  private class FakeContainerConfig extends AbstractContainerConfig {
+  private class FakeContainerConfig extends BasicContainerConfig {
     @Override
     public Object getProperty(String container, String name) {
-      return config.get(name);
+      return data.get(name);
     }
     
   }

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HtmlAccelServletTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HtmlAccelServletTest.java?rev=1027778&r1=1027777&r2=1027778&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HtmlAccelServletTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HtmlAccelServletTest.java Wed Oct 27 00:00:23 2010
@@ -21,7 +21,7 @@ package org.apache.shindig.gadgets.servl
 import com.google.common.collect.ImmutableMap;
 import org.apache.commons.lang.StringUtils;
 import org.apache.shindig.common.uri.Uri;
-import org.apache.shindig.config.AbstractContainerConfig;
+import org.apache.shindig.config.BasicContainerConfig;
 import org.apache.shindig.config.ContainerConfig;
 import org.apache.shindig.gadgets.http.HttpRequest;
 import org.apache.shindig.gadgets.http.HttpResponse;
@@ -49,7 +49,7 @@ import static org.easymock.EasyMock.expe
 
 public class HtmlAccelServletTest extends ServletTestFixture {
 
-  private static class FakeContainerConfig extends AbstractContainerConfig {
+  private static class FakeContainerConfig extends BasicContainerConfig {
     protected final Map<String, Object> data = ImmutableMap.<String, Object>builder()
         .put(AccelUriManager.PROXY_HOST_PARAM, "apache.org")
         .put(AccelUriManager.PROXY_PATH_PARAM, "/gadgets/accel")

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultAccelUriManagerTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultAccelUriManagerTest.java?rev=1027778&r1=1027777&r2=1027778&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultAccelUriManagerTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultAccelUriManagerTest.java Wed Oct 27 00:00:23 2010
@@ -20,7 +20,7 @@ package org.apache.shindig.gadgets.uri;
 
 import com.google.common.collect.ImmutableMap;
 import org.apache.shindig.common.uri.Uri;
-import org.apache.shindig.config.AbstractContainerConfig;
+import org.apache.shindig.config.BasicContainerConfig;
 import org.apache.shindig.config.ContainerConfig;
 import org.apache.shindig.gadgets.http.HttpRequest;
 import org.junit.Before;
@@ -34,33 +34,25 @@ import static org.junit.Assert.*;
  * Tests for DefaultAccelUriManager.
  */
 public class DefaultAccelUriManagerTest {
-  private static class FakeContainerConfig extends AbstractContainerConfig {
-    protected final Map<String, Object> defaultConfig = ImmutableMap.<String, Object>builder()
-        .put(AccelUriManager.PROXY_HOST_PARAM, "apache.org")
-        .put(AccelUriManager.PROXY_PATH_PARAM, "/gadgets/proxy")
-        .build();
-    protected final Map<String, Object> accelConfig = ImmutableMap.<String, Object>builder()
+  DefaultAccelUriManager uriManager;
+
+  private Map<String, Object> makeConfig(String name, String path) {
+    return ImmutableMap
+        .<String, Object>builder()
+        .put(ContainerConfig.CONTAINER_KEY, name)
         .put(AccelUriManager.PROXY_HOST_PARAM, "apache.org")
-        .put(AccelUriManager.PROXY_PATH_PARAM, "/gadgets/accel")
+        .put(AccelUriManager.PROXY_PATH_PARAM, path)
         .build();
-
-    protected final Map<String, Map<String, Object>> data =
-        ImmutableMap.<String, Map<String, Object>>builder()
-            .put("default", defaultConfig)
-            .put("accel", accelConfig)
-            .build();
-
-    @Override
-    public Object getProperty(String container, String name) {
-      return data.get(container) != null ? data.get(container).get(name) : null;
-    }
   }
-
-  DefaultAccelUriManager uriManager;
-
+  
   @Before
   public void setUp() throws Exception {
-    ContainerConfig config = new FakeContainerConfig();
+    ContainerConfig config = new BasicContainerConfig();
+    config
+    .newTransaction()
+    .addContainer(makeConfig("default", "/gadgets/proxy"))
+    .addContainer(makeConfig("accel", "/gadgets/accel"))
+    .commit();
     uriManager = new DefaultAccelUriManager(config, new DefaultProxyUriManager(
         config, null));
   }