Author: etnu
Date: Sun May 25 00:43:42 2008
New Revision: 659934
URL: http://svn.apache.org/viewvc?rev=659934&view=rev
Log:
Added support for multiple container config paths at startup to make extension
easier in the same manner as for features, and provided a facility to use more
complex inheritance models for container configuration. This allows you to
support situations such as a development environment that inherits from the
production environment which in turn inherits from the default configuration.
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/ContainerConfig.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/HashLockedDomainService.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/ContainerConfigTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTestFixture.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/HashLockedDomainServiceTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetRenderingTaskTest.java
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/ContainerConfig.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/ContainerConfig.java?rev=659934&r1=659933&r2=659934&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/ContainerConfig.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/ContainerConfig.java
Sun May 25 00:43:42 2008
@@ -24,19 +24,17 @@
import com.google.inject.Inject;
import com.google.inject.name.Named;
+import org.apache.commons.lang.StringUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.IOException;
-import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
-import java.util.Set;
-import java.util.logging.Level;
import java.util.logging.Logger;
/**
@@ -49,7 +47,11 @@
*/
public class ContainerConfig {
private final Map<String, JSONObject> config;
+ public static final char FILE_SEPARATOR = ',';
public static final String DEFAULT_CONTAINER = "default";
+ public static final String PARENT_KEY = "parent";
+ public static final String FINAL_KEY = "final";
+ // TODO: Rename this to simply "container", gadgets.container is unnecessary.
public static final String CONTAINER_KEY = "gadgets.container";
private static final Logger logger
= Logger.getLogger("org.apache.shindig.gadgets");
@@ -57,7 +59,7 @@
/**
* @return The set of all containers that are currently registered.
*/
- public Set<String> getContainers() {
+ public Collection<String> getContainers() {
return Collections.unmodifiableSet(config.keySet());
}
@@ -92,7 +94,6 @@
}
return data;
} catch (JSONException e) {
- logger.log(Level.WARNING, "Failed to get JSON config for " + parameter,
e);
return null;
}
}
@@ -161,7 +162,7 @@
throw new GadgetException(GadgetException.Code.INVALID_PATH, e);
}
}
-
+
/**
* Loads resources recursively.
* @param files The base paths to look for container.xml
@@ -180,39 +181,21 @@
}
/**
- * Returns names on the json object. Used instead of JSONObject.getNames to
- * provide backwards compatibility with older JSON releases.
- *
- * @param obj
- * @return An array of all keys in the object.
- * @throws org.json.JSONException
- */
- private static String[] getNames(JSONObject obj) throws JSONException {
- JSONArray arr = obj.names();
- List<String> items = new ArrayList<String>(arr.length());
- for (int i = 0, j = arr.length(); i < j; ++i) {
- items.add(i, arr.getString(i));
- }
-
- return items.toArray(new String[items.size()]);
- }
-
- /**
* Merges two JSON objects together (recursively), with values from "merge"
- * replacing values from "base".
+ * replacing values in "base" to produce a new object.
+ *
+ * @param base The base object that values will be replaced into.
+ * @param merge The object to merge values from.
*
- * @param base
- * @param merge
- * @return The merged object.
* @throws JSONException if the two objects can't be merged for some reason.
*/
private JSONObject mergeObjects(JSONObject base, JSONObject merge)
throws JSONException {
// Clone the initial object (JSONObject doesn't support "clone").
- JSONObject clone = new JSONObject(base, getNames(base));
+ JSONObject clone = new JSONObject(base, JSONObject.getNames(base));
// Walk parameter list for the merged object and merge recursively.
- String[] fields = getNames(merge);
+ String[] fields = JSONObject.getNames(merge);
for (String field : fields) {
Object existing = clone.opt(field);
Object update = merge.get(field);
@@ -236,30 +219,59 @@
}
/**
+ * Recursively merge values from parent objects in the prototype chain.
+ * This will modify the value currently stored for the specified container.
+ *
+ * @param base The base configuration of the container being merged into.
+ *
+ * @throws GadgetException If there is an invalid parent parameter
+ * in the prototype chain.
+ */
+ private void mergeParents(String container, JSONObject base)
+ throws GadgetException, JSONException {
+ //String container = base.getString(CONTAINER_KEY);
+ if (base.optBoolean(FINAL_KEY) || DEFAULT_CONTAINER.equals(container)) {
+ // No inheritance (or already done).
+ return;
+ }
+
+ String parent = base.optString(PARENT_KEY);
+ if (parent == null) {
+ parent = DEFAULT_CONTAINER;
+ }
+
+ JSONObject parentData = config.get(parent);
+ if (parentData == null) {
+ throw new GadgetException(GadgetException.Code.INVALID_CONFIG,
+ "Unable to locate parent " + parent + " required by "
+ + base.getString(CONTAINER_KEY));
+ }
+ mergeParents(parent, parentData);
+ JSONObject newBase = mergeObjects(parentData, base);
+ config.put(container, newBase);
+ // Copy values back to base.
+ //for (String key : JSONObject.getNames(newBase)) {
+ // base.put(key, newBase.get(key));
+ //}
+
+ base.put(FINAL_KEY, true);
+ }
+
+ /**
* Processes a container file.
+ *
* @param json
* @throws GadgetException
*/
- public void loadFromString(String json) throws GadgetException {
+ private void loadFromString(String json) throws GadgetException {
try {
JSONObject contents = new JSONObject(json);
JSONArray containers = contents.getJSONArray(CONTAINER_KEY);
- JSONObject defaultContainer = config.get(DEFAULT_CONTAINER);
- if (defaultContainer == null) {
- if (DEFAULT_CONTAINER.equals(containers.get(0))) {
- defaultContainer = contents;
- config.put(DEFAULT_CONTAINER, contents);
- } else {
- throw new GadgetException(GadgetException.Code.INVALID_CONFIG,
- "No default config registered");
- }
- }
+
for (int i = 0, j = containers.length(); i < j; ++i) {
// Copy the default object and produce a new one.
String container = containers.getString(i);
- if (!DEFAULT_CONTAINER.equals(container)) {
- config.put(container, mergeObjects(defaultContainer, contents));
- }
+ config.put(container, contents);
}
} catch (JSONException e) {
throw new GadgetException(GadgetException.Code.INVALID_CONFIG, e);
@@ -269,29 +281,37 @@
/**
* Loads containers from the specified resource. Follows the same rules
* as [EMAIL PROTECTED] JsFeatureLoader.loadFeatures} for locating resources.
- * This call is not thread safe, so you should only call loadContainers()
- * from within the GadgetServerConfig.
*
* @param path
* @throws GadgetException
*/
- public void loadContainers(String path) throws GadgetException {
+ private void loadContainers(String path) throws GadgetException {
try {
- if (path.startsWith("res://")) {
- path = path.substring(6);
- logger.info("Loading resources from: " + path);
- if (path.endsWith(".txt")) {
- loadResources(ResourceLoader.getContent(path).split("[\r\n]+"));
+ for (String location : StringUtils.split(path, FILE_SEPARATOR)) {
+ if (location.startsWith("res://")) {
+ location = location.substring(6);
+ logger.info("Loading resources from: " + location);
+ if (path.endsWith(".txt")) {
+
loadResources(ResourceLoader.getContent(location).split("[\r\n]+"));
+ } else {
+ loadResources(new String[]{location});
+ }
} else {
- loadResources(new String[]{path});
+ logger.info("Loading files from: " + location);
+ File file = new File(location);
+ loadFiles(new File[]{file});
}
- } else {
- logger.info("Loading files from: " + path);
- File file = new File(path);
- loadFiles(new File[]{file});
+ }
+
+ // Now that all containers are loaded, we go back through them and merge
+ // recursively. This is done at startup to simplify lookups.
+ for (Map.Entry<String,JSONObject> container : config.entrySet()) {
+ mergeParents(container.getKey(), container.getValue());
}
} catch (IOException e) {
throw new GadgetException(GadgetException.Code.INVALID_PATH, e);
+ } catch (JSONException e) {
+ throw new GadgetException(GadgetException.Code.INVALID_CONFIG, e);
}
}
@@ -308,4 +328,4 @@
loadContainers(containers);
}
}
-}
+}
\ No newline at end of file
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/HashLockedDomainService.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/HashLockedDomainService.java?rev=659934&r1=659933&r2=659934&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/HashLockedDomainService.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/HashLockedDomainService.java
Sun May 25 00:43:42 2008
@@ -17,45 +17,46 @@
*/
package org.apache.shindig.gadgets;
-import org.apache.commons.codec.digest.DigestUtils;
-
import org.apache.shindig.common.util.Base32;
import org.apache.shindig.gadgets.spec.Feature;
import com.google.inject.Inject;
import com.google.inject.name.Named;
+import org.apache.commons.codec.digest.DigestUtils;
+
+import java.util.Collection;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
/**
* Locked domain implementation based on sha1.
- *
+ *
* The generated domain takes the form:
*
* base32(sha1(gadget url)).
- *
+ *
* Other domain locking schemes are possible as well.
*/
public class HashLockedDomainService implements LockedDomainService {
-
+
private final ContainerConfig config;
private final String embedHost;
private final boolean enabled;
-
+
private final Set<String> suffixes;
-
+
private GadgetReader gadgetReader = new GadgetReader();
-
+
public static final String LOCKED_DOMAIN_REQUIRED_KEY =
"gadgets.lockedDomainRequired";
public static final String LOCKED_DOMAIN_SUFFIX_KEY =
"gadgets.lockedDomainSuffix";
-
+
/**
* Create a LockedDomainService
* @param config per-container configuration
@@ -71,7 +72,7 @@
this.embedHost = embedHost;
this.enabled = enabled;
suffixes = new HashSet<String>();
- Set<String> containers = config.getContainers();
+ Collection<String> containers = config.getContainers();
if (enabled) {
for (String container : containers) {
String suffix = config.get(container, LOCKED_DOMAIN_SUFFIX_KEY);
@@ -102,38 +103,38 @@
containerWantsLockedDomain(container)) {
String neededHost = getLockedDomainForGadget(
gadgetReader.getGadgetUrl(gadget), container);
- return (neededHost.equals(host));
+ return (neededHost.equals(host));
}
// Make sure gadgets that don't ask for locked domain aren't allowed
// to render on one.
return !gadgetUsingLockedDomain(host, gadget);
}
-
+
// Simple class for dependency injection, so we don't need a full-fledged
// Gadget mock for these test cases
static class GadgetReader {
protected boolean gadgetWantsLockedDomain(Gadget gadget) {
Map<String, Feature> prefs =
gadget.getSpec().getModulePrefs().getFeatures();
- return prefs.containsKey("locked-domain");
+ return prefs.containsKey("locked-domain");
}
-
+
protected String getGadgetUrl(Gadget gadget) {
return gadget.getContext().getUrl().toString();
}
}
-
+
// For testing only
void setSpecReader(GadgetReader gadgetReader) {
this.gadgetReader = gadgetReader;
}
-
+
private boolean containerWantsLockedDomain(String container) {
String required = config.get(
container, LOCKED_DOMAIN_REQUIRED_KEY);
return ("true".equals(required));
}
-
+
private boolean gadgetUsingLockedDomain(String host, Gadget gadget) {
for (String suffix : suffixes) {
if (host.endsWith(suffix)) {
@@ -142,7 +143,7 @@
}
return false;
}
-
+
public String getLockedDomainForGadget(String gadget, String container) {
String suffix = config.get(container, LOCKED_DOMAIN_SUFFIX_KEY);
if (suffix == null) {
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/ContainerConfigTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/ContainerConfigTest.java?rev=659934&r1=659933&r2=659934&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/ContainerConfigTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/ContainerConfigTest.java
Sun May 25 00:43:42 2008
@@ -19,19 +19,20 @@
package org.apache.shindig.gadgets;
-import static org.apache.shindig.gadgets.ContainerConfig.DEFAULT_CONTAINER;
import static org.apache.shindig.gadgets.ContainerConfig.CONTAINER_KEY;
+import static org.apache.shindig.gadgets.ContainerConfig.DEFAULT_CONTAINER;
+import static org.apache.shindig.gadgets.ContainerConfig.PARENT_KEY;
+import static org.junit.Assert.assertEquals;
import org.json.JSONArray;
import org.json.JSONObject;
+import org.junit.Test;
-import junit.framework.TestCase;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
-/**
- *
- */
-public class ContainerConfigTest extends TestCase {
- private ContainerConfig config;
+public class ContainerConfigTest {
private static final String TOP_LEVEL_NAME = "Top level name";
private static final String TOP_LEVEL_VALUE = "Top level value";
@@ -47,10 +48,17 @@
private static final String[] ARRAY_VALUE = new String[]{"Hello", "World"};
private static final String ARRAY_ALT_VALUE = "Not an array";
- @Override
- public void setUp() throws Exception {
- super.setUp();
- config = new ContainerConfig(null);
+ private File createContainer(JSONObject json) throws Exception {
+ File file = File.createTempFile(getClass().getName(), ".json");
+ file.deleteOnExit();
+ BufferedWriter out = new BufferedWriter(new FileWriter(file));
+ out.write(json.toString());
+ out.close();
+ return file;
+ }
+
+ private File createDefaultContainer() throws Exception {
+
// We use a JSON Object here to guarantee that we're well formed up front.
JSONObject json = new JSONObject();
json.put(CONTAINER_KEY, new String[]{DEFAULT_CONTAINER});
@@ -62,12 +70,14 @@
nested.put(NESTED_NAME, NESTED_VALUE);
json.put(NESTED_KEY, nested);
-
- config.loadFromString(json.toString());
+ return createContainer(json);
}
- public void testBasic() throws Exception {
- // check to make sure that the default config was processed correctly.
+ @Test
+ public void parseBasicConfig() throws Exception {
+ ContainerConfig config
+ = new ContainerConfig(createDefaultContainer().getAbsolutePath());
+
assertEquals(1, config.getContainers().size());
for (String container : config.getContainers()) {
assertEquals(DEFAULT_CONTAINER, container);
@@ -83,9 +93,11 @@
assertEquals(NESTED_VALUE, nestedValue);
}
- public void testCascade() throws Exception {
+ @Test
+ public void parseWithDefaultInheritance() throws Exception {
JSONObject json = new JSONObject();
json.put(CONTAINER_KEY, new String[]{CHILD_CONTAINER});
+ json.put(PARENT_KEY, DEFAULT_CONTAINER);
json.put(ARRAY_NAME, ARRAY_ALT_VALUE);
// small nested data.
@@ -94,7 +106,10 @@
json.put(NESTED_KEY, nested);
- config.loadFromString(json.toString());
+ File childFile = createContainer(json);
+ File parentFile = createDefaultContainer();
+ ContainerConfig config = new ContainerConfig(childFile.getAbsolutePath() +
+ ContainerConfig.FILE_SEPARATOR + parentFile.getAbsolutePath());
String value = config.get(CHILD_CONTAINER, TOP_LEVEL_NAME);
assertEquals(TOP_LEVEL_VALUE, value);
@@ -109,12 +124,25 @@
// Verify that the parent value wasn't overwritten as well.
JSONArray defaultArrayTest = config.getJsonArray(DEFAULT_CONTAINER,
- ARRAY_NAME);
+ ARRAY_NAME);
JSONArray defaultArray = new JSONArray(ARRAY_VALUE);
assertEquals(defaultArrayTest.toString(), defaultArray.toString());
}
+ @Test(expected = GadgetException.class)
+ public void badConfigThrows() throws Exception {
+ JSONObject json = new JSONObject();
+ json.put(CONTAINER_KEY, new String[]{CHILD_CONTAINER});
+ json.put(PARENT_KEY, "bad bad bad parent!");
+ json.put(ARRAY_NAME, ARRAY_ALT_VALUE);
+
+ ContainerConfig config
+ = new ContainerConfig(createContainer(json).getAbsolutePath());
+ }
+
public void testPathQuery() throws Exception {
+ ContainerConfig config
+ = new ContainerConfig(createDefaultContainer().getAbsolutePath());
String path = NESTED_KEY + '/' + NESTED_NAME;
String data = config.get(DEFAULT_CONTAINER, path);
assertEquals(NESTED_VALUE, data);
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTestFixture.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTestFixture.java?rev=659934&r1=659933&r2=659934&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTestFixture.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTestFixture.java
Sun May 25 00:43:42 2008
@@ -44,7 +44,7 @@
public final MessageBundleFactory bundleFactory =
new BasicMessageBundleFactory(fetcher, 0, 0L);
public GadgetFeatureRegistry registry;
- public ContainerConfig containerConfig;
+ public ContainerConfig containerConfig = mock(ContainerConfig.class);
public final Executor executor = new Executor() {
public void execute(Runnable r) {
r.run();
@@ -60,13 +60,6 @@
fail("Failed to create feature registry");
}
- try {
- containerConfig = new ContainerConfig(null);
- } catch (Exception e) {
- e.printStackTrace();
- fail("Failed to create container config");
- }
-
gadgetServer = new GadgetServer(executor, registry, blacklist,
fetcherFactory, specFactory, bundleFactory);
}
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/HashLockedDomainServiceTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/HashLockedDomainServiceTest.java?rev=659934&r1=659933&r2=659934&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/HashLockedDomainServiceTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/HashLockedDomainServiceTest.java
Sun May 25 00:43:42 2008
@@ -18,10 +18,16 @@
*/
package org.apache.shindig.gadgets;
-import org.json.JSONArray;
-import org.json.JSONObject;
+import static
org.apache.shindig.gadgets.HashLockedDomainService.LOCKED_DOMAIN_REQUIRED_KEY;
+import static
org.apache.shindig.gadgets.HashLockedDomainService.LOCKED_DOMAIN_SUFFIX_KEY;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.isA;
+
import org.apache.shindig.gadgets.HashLockedDomainService.GadgetReader;
+import java.util.Arrays;
+
public class HashLockedDomainServiceTest extends EasyMockTestCase {
HashLockedDomainService domainLocker;
@@ -32,7 +38,7 @@
false, "http://somehost.com/somegadget.xml");
ContainerConfig containerEnabledConfig;
ContainerConfig containerRequiredConfig;
-
+
/**
* Mocked out spec reader, rather than mocking the whole
* Gadget object.
@@ -40,55 +46,63 @@
public static class FakeSpecReader extends GadgetReader {
private boolean wantsLockedDomain;
private String gadgetUrl;
-
+
public FakeSpecReader(boolean wantsLockedDomain, String gadgetUrl) {
this.wantsLockedDomain = wantsLockedDomain;
this.gadgetUrl = gadgetUrl;
}
-
+
@Override
protected boolean gadgetWantsLockedDomain(Gadget gadget) {
return wantsLockedDomain;
}
-
+
@Override
protected String getGadgetUrl(Gadget gadget) {
return gadgetUrl;
}
}
-
+
@Override
protected void setUp() throws Exception {
super.setUp();
- JSONObject json = new JSONObject();
- json.put("gadgets.container",
- new JSONArray().put(ContainerConfig.DEFAULT_CONTAINER));
- json.put("gadgets.lockedDomainRequired", true);
- json.put("gadgets.lockedDomainSuffix", "-a.example.com:8080");
- containerRequiredConfig = new ContainerConfig(null);
- containerRequiredConfig.loadFromString(json.toString());
-
- json.put("gadgets.lockedDomainRequired", false);
- containerEnabledConfig = new ContainerConfig(null);
- containerEnabledConfig.loadFromString(json.toString());
- gadget = mock(Gadget.class);
+ containerRequiredConfig = mock(ContainerConfig.class);
+ expect(containerRequiredConfig.get(ContainerConfig.DEFAULT_CONTAINER,
+ LOCKED_DOMAIN_REQUIRED_KEY)).andReturn("true").anyTimes();
+ expect(containerRequiredConfig.get(ContainerConfig.DEFAULT_CONTAINER,
+ LOCKED_DOMAIN_SUFFIX_KEY)).andReturn("-a.example.com:8080").anyTimes();
+ expect(containerRequiredConfig.getContainers())
+
.andReturn(Arrays.asList(ContainerConfig.DEFAULT_CONTAINER)).anyTimes();
+
+ containerEnabledConfig = mock(ContainerConfig.class);
+ expect(containerEnabledConfig.get(ContainerConfig.DEFAULT_CONTAINER,
+ LOCKED_DOMAIN_REQUIRED_KEY)).andReturn("false").anyTimes();
+ expect(containerEnabledConfig.get(ContainerConfig.DEFAULT_CONTAINER,
+ LOCKED_DOMAIN_SUFFIX_KEY)).andReturn("-a.example.com:8080").anyTimes();
+ expect(containerEnabledConfig.getContainers())
+
.andReturn(Arrays.asList(ContainerConfig.DEFAULT_CONTAINER)).anyTimes();
}
+
public void testDisabledGlobally() {
+ replay();
+
domainLocker = new HashLockedDomainService(
containerRequiredConfig, "embed.com", false);
assertTrue(domainLocker.embedCanRender("anywhere.com"));
assertTrue(domainLocker.embedCanRender("embed.com"));
assertTrue(domainLocker.gadgetCanRender("embed.com", gadget, "default"));
-
+
domainLocker = new HashLockedDomainService(
containerEnabledConfig, "embed.com", false);
assertTrue(domainLocker.embedCanRender("anywhere.com"));
assertTrue(domainLocker.embedCanRender("embed.com"));
- assertTrue(domainLocker.gadgetCanRender("embed.com", gadget, "default"));
+ assertTrue(domainLocker.gadgetCanRender("embed.com", gadget, "default"));
}
-
+
public void testEnabledForGadget() {
+ replay();
+
domainLocker = new HashLockedDomainService(
containerEnabledConfig, "embed.com", true);
assertFalse(domainLocker.embedCanRender("anywhere.com"));
@@ -106,8 +120,10 @@
"8uhr00296d2o3sfhqilj387krjmgjv3v-a.example.com:8080",
target);
}
-
+
public void testNotEnabledForGadget() {
+ replay();
+
domainLocker = new HashLockedDomainService(
containerEnabledConfig, "embed.com", true);
domainLocker.setSpecReader(noLocked);
@@ -129,10 +145,12 @@
wantsLocked.getGadgetUrl(gadget), "default");
assertEquals(
"8uhr00296d2o3sfhqilj387krjmgjv3v-a.example.com:8080",
- target);
+ target);
}
-
+
public void testRequiredForContainer() {
+ replay();
+
domainLocker = new HashLockedDomainService(
containerRequiredConfig, "embed.com", true);
domainLocker.setSpecReader(noLocked);
@@ -148,30 +166,30 @@
"8uhr00296d2o3sfhqilj387krjmgjv3v-a.example.com:8080",
target);
}
-
+
public void testMissingConfig() throws Exception {
- JSONObject json = new JSONObject();
- json.put("gadgets.container",
- new JSONArray().put(ContainerConfig.DEFAULT_CONTAINER));
- ContainerConfig containerMissingConfig = new ContainerConfig(null);
- containerMissingConfig.loadFromString(json.toString());
+ ContainerConfig containerMissingConfig = mock(ContainerConfig.class);
+ expect(containerMissingConfig.getContainers())
+ .andReturn(Arrays.asList(ContainerConfig.DEFAULT_CONTAINER));
+ replay();
+
domainLocker = new HashLockedDomainService(
containerMissingConfig, "embed.com", false);
domainLocker.setSpecReader(wantsLocked);
assertTrue(domainLocker.gadgetCanRender(
"www.example.com", gadget, "default"));
}
-
+
public void testMultiContainer() throws Exception {
- JSONObject json = new JSONObject();
- json.put("gadgets.container",
- new JSONArray()
- .put(ContainerConfig.DEFAULT_CONTAINER)
- .put("other"));
- json.put("gadgets.lockedDomainRequired", true);
- json.put("gadgets.lockedDomainSuffix", "-a.example.com:8080");
- ContainerConfig inheritsConfig = new ContainerConfig(null);
- inheritsConfig.loadFromString(json.toString());
+ ContainerConfig inheritsConfig = mock(ContainerConfig.class);
+ expect(inheritsConfig.getContainers())
+ .andReturn(Arrays.asList(ContainerConfig.DEFAULT_CONTAINER, "other"));
+ expect(inheritsConfig.get(isA(String.class),
eq(LOCKED_DOMAIN_REQUIRED_KEY)))
+ .andReturn("true").anyTimes();
+ expect(inheritsConfig.get(isA(String.class), eq(LOCKED_DOMAIN_SUFFIX_KEY)))
+ .andReturn("-a.example.com:8080").anyTimes();
+ replay();
+
domainLocker = new HashLockedDomainService(
inheritsConfig, "embed.com", true);
domainLocker.setSpecReader(wantsLocked);
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetRenderingTaskTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetRenderingTaskTest.java?rev=659934&r1=659933&r2=659934&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetRenderingTaskTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetRenderingTaskTest.java
Sun May 25 00:43:42 2008
@@ -24,13 +24,12 @@
import org.apache.shindig.gadgets.ContainerConfig;
import org.apache.shindig.gadgets.Gadget;
import org.apache.shindig.gadgets.GadgetContext;
-import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.http.HttpRequest;
+import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.spec.GadgetSpec;
import org.easymock.EasyMock;
import org.json.JSONArray;
-import org.json.JSONObject;
import java.io.ByteArrayOutputStream;
import java.io.PrintWriter;
@@ -136,15 +135,9 @@
}
public void testViewAliases() throws Exception {
- JSONObject json = new JSONObject();
- json.put("gadgets.container",
- new JSONArray().put(ContainerConfig.DEFAULT_CONTAINER));
JSONArray aliases = new JSONArray().put("ALIAS");
- JSONObject dummy = new JSONObject().put("aliases", aliases);
- JSONObject views = new JSONObject().put("dummy", dummy);
- JSONObject features = new JSONObject().put("views", views);
- json.put("gadgets.features", features);
- containerConfig.loadFromString(json.toString());
+ expect(containerConfig.getJsonArray(ContainerConfig.DEFAULT_CONTAINER,
+ "gadgets.features/views/dummy/aliases")).andReturn(aliases);
String content = parseBasicGadget("dummy");