You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by mh...@apache.org on 2010/10/14 00:28:27 UTC
svn commit: r1022314 - in /shindig/trunk/java/gadgets/src:
main/java/org/apache/shindig/gadgets/uri/
test/java/org/apache/shindig/gadgets/uri/
Author: mhermanto
Date: Wed Oct 13 22:28:27 2010
New Revision: 1022314
URL: http://svn.apache.org/viewvc?rev=1022314&view=rev
Log:
Augment &libs= for type=url gadgets.
http://codereview.appspot.com/2474041/
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManagerTest.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriManagerTestBase.java
Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java?rev=1022314&r1=1022313&r2=1022314&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManager.java Wed Oct 13 22:28:27 2010
@@ -39,9 +39,10 @@ import org.apache.shindig.gadgets.uri.Ur
import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import java.util.Set;
/**
- * Default implementetion of an IframeUriManager which references the /ifr endpoint.
+ * Default implementation of an IframeUriManager which references the /ifr endpoint.
*/
public class DefaultIframeUriManager implements IframeUriManager {
// By default, fills in values that could otherwise be templated for client population.
@@ -56,7 +57,7 @@ public class DefaultIframeUriManager imp
private boolean ldEnabled = true;
private TemplatingSignal tplSignal = null;
private Versioner versioner = null;
-
+
private final ContainerConfig config;
private final LockedDomainPrefixGenerator ldGen;
private final SecurityTokenCodec securityTokenCodec;
@@ -70,7 +71,7 @@ public class DefaultIframeUriManager imp
this.config = config;
this.ldGen = ldGen;
this.securityTokenCodec = securityTokenCodec;
-
+
Collection<String> containers = config.getContainers();
List<String> ldSuffixes = Lists.newArrayListWithCapacity(containers.size());
for (String container : containers) {
@@ -78,40 +79,43 @@ public class DefaultIframeUriManager imp
}
this.ldSuffixes = Collections.unmodifiableList(ldSuffixes);
}
-
+
@Inject(optional = true)
public void setLockedDomainEnabled(
@Named("shindig.locked-domain.enabled") Boolean ldEnabled) {
this.ldEnabled = ldEnabled;
}
-
+
@Inject(optional = true)
public void setVersioner(Versioner versioner) {
this.versioner = versioner;
}
-
+
@Inject(optional = true)
public void setTemplatingSignal(TemplatingSignal tplSignal) {
this.tplSignal = tplSignal;
}
-
+
public Uri makeRenderingUri(Gadget gadget) {
UriBuilder uri;
View view = gadget.getCurrentView();
-
+
GadgetContext context = gadget.getContext();
String container = context.getContainer();
-
+
if (View.ContentType.URL.equals(view.getType())) {
// A. type=url. Initializes all except standard parameters.
uri = new UriBuilder(view.getHref());
+
+ addExtrasForTypeUrl(uri, gadget);
+
} else {
// B. Others, aka. type=html and html_sanitized.
uri = new UriBuilder();
// 1. Set base path.
uri.setPath(getReqVal(container, IFRAME_BASE_PATH_KEY));
-
+
// 2. Set host/authority.
String host;
if (usingLockedDomain(gadget, container)) {
@@ -121,17 +125,17 @@ public class DefaultIframeUriManager imp
host = getReqVal(container, UNLOCKED_DOMAIN_KEY);
}
uri.setAuthority(host);
-
+
// 3. Set protocol/schema.
uri.setScheme(getScheme(gadget, container));
-
+
// 4. Add the URL.
uri.addQueryParameter(Param.URL.getKey(), context.getUrl().toString());
}
-
+
// Add container, whose input derived other components of the URI.
uri.addQueryParameter(Param.CONTAINER.getKey(), container);
-
+
// Add remaining non-url standard parameters, in templated or filled form.
boolean useTpl = tplSignal != null ? tplSignal.useTemplates() : DEFAULT_USE_TEMPLATES;
addParam(uri, Param.VIEW.getKey(), view.getName(), useTpl, false);
@@ -139,7 +143,7 @@ public class DefaultIframeUriManager imp
addParam(uri, Param.COUNTRY.getKey(), context.getLocale().getCountry(), useTpl, false);
addParam(uri, Param.DEBUG.getKey(), context.getDebug() ? "1" : "0", useTpl, false);
addParam(uri, Param.NO_CACHE.getKey(), context.getIgnoreCache() ? "1" : "0", useTpl, false);
-
+
// Add all UserPrefs
UserPrefs prefs = context.getUserPrefs();
for (UserPref up : gadget.getSpec().getUserPrefs().values()) {
@@ -148,7 +152,7 @@ public class DefaultIframeUriManager imp
if (data == null) {
data = up.getDefaultValue();
}
-
+
boolean upInFragment = !view.needsUserPrefSubstitution();
addParam(uri, UriCommon.USER_PREF_PREFIX + up.getName(), data, useTpl, upInFragment);
}
@@ -158,17 +162,17 @@ public class DefaultIframeUriManager imp
addParam(uri, Param.VERSION.getKey(),
versioner.version(gadget.getSpec().getUrl(), container), false, false);
}
-
+
if (wantsSecurityToken(gadget)) {
boolean securityTokenOnQuery = isTokenNeededForRendering(gadget);
-
+
String securityToken = generateSecurityToken(gadget);
addParam(uri, Param.SECURITY_TOKEN.getKey(), securityToken, securityToken == null,
!securityTokenOnQuery);
}
-
- addExtras(uri);
-
+
+ addExtras(uri, gadget);
+
return uri.toUri();
}
@@ -190,7 +194,7 @@ public class DefaultIframeUriManager imp
return gadget.getAllFeatures().contains(SECURITY_TOKEN_FEATURE_NAME) ||
config.getBool(gadget.getContext().getContainer(), SECURITY_TOKEN_ALWAYS_KEY);
}
-
+
// This method should be overridden to provide better caching characteristics
// for rendering Uris. In particular, it should return true only when the gadget
// uses server-side processing of such things as OpenSocial templates, Data pipelining,
@@ -199,10 +203,10 @@ public class DefaultIframeUriManager imp
protected boolean isTokenNeededForRendering(Gadget gadget) {
return true;
}
-
+
public UriStatus validateRenderingUri(Uri inUri) {
UriBuilder uri = new UriBuilder(inUri);
-
+
String gadgetStr = uri.getQueryParameter(Param.URL.getKey());
Uri gadgetUri = null;
try {
@@ -211,12 +215,12 @@ public class DefaultIframeUriManager imp
// RuntimeException eg. InvalidArgumentException
return UriStatus.BAD_URI;
}
-
+
String container = uri.getQueryParameter(Param.CONTAINER.getKey());
if (container == null) {
container = ContainerConfig.DEFAULT_CONTAINER;
}
-
+
// Validate domain.
String host = uri.getAuthority().toLowerCase();
String gadgetLdPrefix = ldGen.getLockedDomainPrefix(gadgetUri).toLowerCase();
@@ -245,34 +249,39 @@ public class DefaultIframeUriManager imp
}
}
}
-
+
String version = uri.getQueryParameter(Param.VERSION.getKey());
if (versioner == null || version == null) {
return UriStatus.VALID_UNVERSIONED;
}
-
+
return versioner.validate(gadgetUri, container, version);
}
-
+
public static String tplKey(String key) {
return '%' + key + '%';
}
-
+
/** Overridable methods for custom behavior */
protected boolean lockedDomainExclusion() {
// Subclass/override this to support a custom notion of dev-mode, other exclusions.
return false;
}
-
+
protected String getScheme(Gadget gadget, String container) {
// Scheme-relative by default. Override for specific use cases.
return null;
}
-
- protected void addExtras(UriBuilder uri) {
+
+ protected void addExtrasForTypeUrl(UriBuilder uri, Gadget gadget) {
+ Set<String> features = gadget.getSpec().getModulePrefs().getFeatures().keySet();
+ addParam(uri, Param.LIBS.getKey(), DefaultJsUriManager.addJsLibs(features), false, false);
+ }
+
+ protected void addExtras(UriBuilder uri, Gadget gadget) {
// Add whatever custom flags are desired here.
}
-
+
private void addParam(UriBuilder uri, String key, String data, boolean templated,
boolean fragment) {
String value;
@@ -281,30 +290,30 @@ public class DefaultIframeUriManager imp
} else {
value = data;
}
-
+
if (!fragment) {
uri.addQueryParameter(key, value);
} else {
uri.addFragmentParameter(key, value);
}
}
-
+
private boolean usingLockedDomain(Gadget gadget, String container) {
if (!ldEnabled) {
return false;
}
-
+
if (lockedDomainExclusion()) {
return false;
}
-
+
if (config.getBool(container, LOCKED_DOMAIN_REQUIRED_KEY)) {
return true;
}
-
+
return gadget.getAllFeatures().contains(LOCKED_DOMAIN_FEATURE_NAME);
}
-
+
private String getReqVal(String container, String key) {
String val = config.getString(container, key);
if (val == null) {
@@ -313,21 +322,21 @@ public class DefaultIframeUriManager imp
}
return val;
}
-
+
@ImplementedBy(DefaultTemplatingSignal.class)
public static interface TemplatingSignal {
boolean useTemplates();
}
-
+
public static final class DefaultTemplatingSignal implements TemplatingSignal {
private boolean useTemplates = true;
-
+
@Inject(optional = true)
public void setUseTemplates(
@Named("shindig.urlgen.use-templates-default") Boolean useTemplates) {
this.useTemplates = useTemplates;
}
-
+
public boolean useTemplates() {
return useTemplates;
}
Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManagerTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManagerTest.java?rev=1022314&r1=1022313&r2=1022314&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManagerTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultIframeUriManagerTest.java Wed Oct 13 22:28:27 2010
@@ -60,9 +60,9 @@ public class DefaultIframeUriManagerTest
private static final String LD_SUFFIX = ".lockeddomain.com";
private static final String LD_SUFFIX_ALT = ".altld.com";
private static final String UNLOCKED_DOMAIN = "unlockeddomain.com";
- private static final int TYPE_URL_NUM_BASE_PARAMS = 6;
- private static final int TYPE_HTML_NUM_BASE_PARAMS = TYPE_URL_NUM_BASE_PARAMS + 1;
-
+ private static final int TYPE_URL_NUM_BASE_PARAMS = 7;
+ private static final int TYPE_HTML_NUM_BASE_PARAMS = 7;
+
private static final LockedDomainPrefixGenerator prefixGen = new LockedDomainPrefixGenerator() {
public String getLockedDomainPrefix(Uri gadgetUri) {
return LD_PREFIX;
@@ -70,7 +70,7 @@ public class DefaultIframeUriManagerTest
};
private static final SecurityTokenCodec tokenCodec = new BasicSecurityTokenCodec();
-
+
@Test
public void typeHtmlBasicOptions() {
String prefKey = "prefKey";
@@ -78,7 +78,7 @@ public class DefaultIframeUriManagerTest
Map<String, String> prefs = Maps.newHashMap();
prefs.put(prefKey, prefVal);
List<String> features = Lists.newArrayList();
-
+
// Make the gadget.
Gadget gadget = mockGadget(
SPEC_URI.toString(),
@@ -89,16 +89,16 @@ public class DefaultIframeUriManagerTest
prefs, // prefs supplied by the requester, same k/v as spec w/ default val for simplicity
false, // no pref substitution needed, ergo prefs in fragment
features);
-
+
// Generate a default-option manager
TestDefaultIframeUriManager manager = makeManager(
false, // security token beacon not required
false); // locked domain not required
-
+
// Generate URI, turn into UriBuilder for validation
Uri result = manager.makeRenderingUri(gadget);
assertNotNull(result);
-
+
UriBuilder uri = new UriBuilder(result);
assertEquals("", uri.getScheme());
assertEquals(UNLOCKED_DOMAIN, uri.getAuthority());
@@ -111,17 +111,17 @@ public class DefaultIframeUriManagerTest
assertEquals("0", uri.getQueryParameter(Param.DEBUG.getKey()));
assertEquals("0", uri.getQueryParameter(Param.NO_CACHE.getKey()));
assertEquals(prefVal, uri.getFragmentParameter("up_" + prefKey));
-
+
// Only the params that are needed.
assertEquals(TYPE_HTML_NUM_BASE_PARAMS, uri.getQueryParameters().size());
assertEquals(1, uri.getFragmentParameters().size());
-
+
assertFalse(manager.tokenForRenderingCalled());
assertTrue(manager.schemeCalled());
assertTrue(manager.ldExclusionCalled());
assertTrue(manager.addExtrasCalled());
}
-
+
@Test
public void typeHtmlBasicOptionsTpl() {
String prefKey = "prefKey";
@@ -129,7 +129,7 @@ public class DefaultIframeUriManagerTest
Map<String, String> prefs = Maps.newHashMap();
prefs.put(prefKey, prefVal);
List<String> features = Lists.newArrayList();
-
+
// Make the gadget.
Gadget gadget = mockGadget(
SPEC_URI.toString(),
@@ -140,17 +140,17 @@ public class DefaultIframeUriManagerTest
prefs, // prefs supplied by the requester, same k/v as spec w/ default val for simplicity
false, // no pref substitution needed, ergo prefs in fragment
features);
-
+
// Create another manager, this time templatized.
TestDefaultIframeUriManager managerTpl = makeManager(
false, // security token beacon not required
false); // locked domain not required
managerTpl.setTemplatingSignal(tplSignal(true));
-
+
// Templatized results.
Uri resultTpl = managerTpl.makeRenderingUri(gadget);
assertNotNull(resultTpl);
-
+
UriBuilder uriTpl = new UriBuilder(resultTpl);
assertEquals("", uriTpl.getScheme());
assertEquals(UNLOCKED_DOMAIN, uriTpl.getAuthority());
@@ -164,17 +164,17 @@ public class DefaultIframeUriManagerTest
assertEquals(tplKey(Param.NO_CACHE.getKey()),
uriTpl.getQueryParameter(Param.NO_CACHE.getKey()));
assertEquals(tplKey("up_" + prefKey), uriTpl.getFragmentParameter("up_" + prefKey));
-
+
// Only the params that are needed.
assertEquals(TYPE_HTML_NUM_BASE_PARAMS, uriTpl.getQueryParameters().size());
assertEquals(1, uriTpl.getFragmentParameters().size());
-
+
assertFalse(managerTpl.tokenForRenderingCalled());
assertTrue(managerTpl.schemeCalled());
assertTrue(managerTpl.ldExclusionCalled());
assertTrue(managerTpl.addExtrasCalled());
}
-
+
@Test
public void typeUrlDefaultOptions() {
String gadgetSite = "http://example.com/gadget";
@@ -182,8 +182,8 @@ public class DefaultIframeUriManagerTest
String prefVal = "prefVal";
Map<String, String> prefs = Maps.newHashMap();
prefs.put(prefKey, prefVal);
- List<String> features = Lists.newArrayList();
-
+ List<String> features = Lists.newArrayList("rpc", "setprefs");
+
// Make the gadget.
Gadget gadget = mockGadget(
gadgetSite,
@@ -194,16 +194,16 @@ public class DefaultIframeUriManagerTest
prefs, // prefs supplied by the requester, same k/v as spec w/ default val for simplicity
false, // no pref substitution needed, ergo prefs in fragment
features);
-
+
// Generate a default-option manager
TestDefaultIframeUriManager manager = makeManager(
false, // security token beacon not required
false); // locked domain not required
-
+
// Generate URI, turn into UriBuilder for validation
Uri result = manager.makeRenderingUri(gadget);
assertNotNull(result);
-
+
UriBuilder uri = new UriBuilder(result);
assertEquals("http", uri.getScheme());
assertEquals("example.com", uri.getAuthority());
@@ -212,20 +212,21 @@ public class DefaultIframeUriManagerTest
assertEquals(VIEW, uri.getQueryParameter(Param.VIEW.getKey()));
assertEquals(LANG, uri.getQueryParameter(Param.LANG.getKey()));
assertEquals(COUNTRY, uri.getQueryParameter(Param.COUNTRY.getKey()));
+ assertEquals("rpc:setprefs", uri.getQueryParameter(Param.LIBS.getKey()));
assertEquals("1", uri.getQueryParameter(Param.DEBUG.getKey()));
assertEquals("1", uri.getQueryParameter(Param.NO_CACHE.getKey()));
assertEquals(prefVal, uri.getFragmentParameter("up_" + prefKey));
-
+
// Only the params that are needed.
assertEquals(TYPE_URL_NUM_BASE_PARAMS, uri.getQueryParameters().size());
assertEquals(1, uri.getFragmentParameters().size());
-
+
assertFalse(manager.tokenForRenderingCalled());
assertFalse(manager.schemeCalled());
assertFalse(manager.ldExclusionCalled());
assertTrue(manager.addExtrasCalled());
}
-
+
@Test
public void typeUrlDefaultOptionsTpl() {
String gadgetSite = "http://example.com/gadget";
@@ -234,7 +235,7 @@ public class DefaultIframeUriManagerTest
Map<String, String> prefs = Maps.newHashMap();
prefs.put(prefKey, prefVal);
List<String> features = Lists.newArrayList();
-
+
// Make the gadget.
Gadget gadget = mockGadget(
gadgetSite,
@@ -245,22 +246,23 @@ public class DefaultIframeUriManagerTest
prefs, // prefs supplied by the requester, same k/v as spec w/ default val for simplicity
false, // no pref substitution needed, ergo prefs in fragment
features);
-
+
// Generate a default-option manager
TestDefaultIframeUriManager managerTpl = makeManager(
false, // security token beacon not required
false); // locked domain not required
managerTpl.setTemplatingSignal(tplSignal(true));
-
+
// Generate URI, turn into UriBuilder for validation
Uri resultTpl = managerTpl.makeRenderingUri(gadget);
assertNotNull(resultTpl);
-
+
UriBuilder uriTpl = new UriBuilder(resultTpl);
assertEquals("http", uriTpl.getScheme());
assertEquals("example.com", uriTpl.getAuthority());
assertEquals("/gadget", uriTpl.getPath());
assertEquals(CONTAINER, uriTpl.getQueryParameter(Param.CONTAINER.getKey()));
+ assertEquals("", uriTpl.getQueryParameter(Param.LIBS.getKey()));
assertEquals(tplKey(Param.VIEW.getKey()), uriTpl.getQueryParameter(Param.VIEW.getKey()));
assertEquals(tplKey(Param.LANG.getKey()), uriTpl.getQueryParameter(Param.LANG.getKey()));
assertEquals(tplKey(Param.COUNTRY.getKey()), uriTpl.getQueryParameter(Param.COUNTRY.getKey()));
@@ -268,17 +270,17 @@ public class DefaultIframeUriManagerTest
assertEquals(tplKey(Param.NO_CACHE.getKey()),
uriTpl.getQueryParameter(Param.NO_CACHE.getKey()));
assertEquals(tplKey("up_" + prefKey), uriTpl.getFragmentParameter("up_" + prefKey));
-
+
// Only the params that are needed.
assertEquals(TYPE_URL_NUM_BASE_PARAMS, uriTpl.getQueryParameters().size());
assertEquals(1, uriTpl.getFragmentParameters().size());
-
+
assertFalse(managerTpl.tokenForRenderingCalled());
assertFalse(managerTpl.schemeCalled());
assertFalse(managerTpl.ldExclusionCalled());
assertTrue(managerTpl.addExtrasCalled());
}
-
+
@Test
public void securityTokenAddedWhenGadgetNeedsItFragment() {
Gadget gadget = mockGadget(SECURITY_TOKEN_FEATURE_NAME);
@@ -293,7 +295,7 @@ public class DefaultIframeUriManagerTest
uri.getFragmentParameter(Param.SECURITY_TOKEN.getKey()));
assertTrue(manager.tokenForRenderingCalled());
}
-
+
@Test
public void securityTokenAddedWhenGadgetNeedsItQuery() {
Gadget gadget = mockGadget(SECURITY_TOKEN_FEATURE_NAME);
@@ -308,7 +310,7 @@ public class DefaultIframeUriManagerTest
uri.getQueryParameter(Param.SECURITY_TOKEN.getKey()));
assertTrue(manager.tokenForRenderingCalled());
}
-
+
@Test
public void securityTokenAddedWhenForced() {
Gadget gadget = mockGadget("foo", "bar");
@@ -323,93 +325,93 @@ public class DefaultIframeUriManagerTest
uri.getFragmentParameter(Param.SECURITY_TOKEN.getKey()));
assertTrue(manager.tokenForRenderingCalled());
}
-
+
@Test
public void ldAddedGadgetRequests() {
Gadget gadget = mockGadget(LOCKED_DOMAIN_FEATURE_NAME);
-
+
TestDefaultIframeUriManager manager = makeManager(
false, // security token beacon not required
false); // locked domain not (always) required
-
+
Uri result = manager.makeRenderingUri(gadget);
assertNotNull(result);
-
+
UriBuilder uri = new UriBuilder(result);
assertEquals("", uri.getScheme());
assertEquals(LD_PREFIX + LD_SUFFIX, uri.getAuthority());
assertEquals(IFRAME_PATH, uri.getPath());
-
+
// Basic sanity checks on params
assertEquals(TYPE_HTML_NUM_BASE_PARAMS, uri.getQueryParameters().size());
assertEquals(0, uri.getFragmentParameters().size());
}
-
+
@Test
public void ldAddedForcedAlways() {
Gadget gadget = mockGadget();
-
+
TestDefaultIframeUriManager manager = makeManager(
false, // security token beacon not required
true); // locked domain always required
-
+
Uri result = manager.makeRenderingUri(gadget);
assertNotNull(result);
-
+
UriBuilder uri = new UriBuilder(result);
assertEquals("", uri.getScheme());
assertEquals(LD_PREFIX + LD_SUFFIX, uri.getAuthority());
assertEquals(IFRAME_PATH, uri.getPath());
-
+
// Basic sanity checks on params
assertEquals(TYPE_HTML_NUM_BASE_PARAMS, uri.getQueryParameters().size());
assertEquals(0, uri.getFragmentParameters().size());
}
-
+
@Test
public void ldNotAddedIfDisabled() {
Gadget gadget = mockGadget(LOCKED_DOMAIN_FEATURE_NAME);
-
+
TestDefaultIframeUriManager manager = makeManager(
false, // security token beacon not required
true); // locked domain always required
manager.setLockedDomainEnabled(false); // but alas, not enabled in the 1st place
-
+
Uri result = manager.makeRenderingUri(gadget);
assertNotNull(result);
-
+
UriBuilder uri = new UriBuilder(result);
assertEquals("", uri.getScheme());
assertEquals(UNLOCKED_DOMAIN, uri.getAuthority());
assertEquals(IFRAME_PATH, uri.getPath());
-
+
// Basic sanity checks on params
assertEquals(TYPE_HTML_NUM_BASE_PARAMS, uri.getQueryParameters().size());
assertEquals(0, uri.getFragmentParameters().size());
}
-
+
@Test
public void ldNotAddedWithExclusion() {
Gadget gadget = mockGadget(LOCKED_DOMAIN_FEATURE_NAME);
-
+
TestDefaultIframeUriManager manager = makeManager(
false, // security token beacon not required
true); // locked domain always required
manager.setLdExclusion(true); // but alas, excluded
-
+
Uri result = manager.makeRenderingUri(gadget);
assertNotNull(result);
-
+
UriBuilder uri = new UriBuilder(result);
assertEquals("", uri.getScheme());
assertEquals(UNLOCKED_DOMAIN, uri.getAuthority());
assertEquals(IFRAME_PATH, uri.getPath());
-
+
// Basic sanity checks on params
assertEquals(TYPE_HTML_NUM_BASE_PARAMS, uri.getQueryParameters().size());
assertEquals(0, uri.getFragmentParameters().size());
}
-
+
@Test
public void versionAddedWithVersioner() {
String version = "abcdlkjwef";
@@ -422,7 +424,7 @@ public class DefaultIframeUriManagerTest
assertEquals(TYPE_HTML_NUM_BASE_PARAMS + 1, uri.getQueryParameters().size());
assertEquals(version, uri.getQueryParameter(Param.VERSION.getKey()));
}
-
+
@Test
public void userPrefsAddedQuery() {
// Scenario exercises all prefs cases: overridden/known key, unknown key, missing key
@@ -432,20 +434,20 @@ public class DefaultIframeUriManagerTest
Map<String, String> inPrefs = Maps.newHashMap();
inPrefs.put("specKey1", "inVal1");
inPrefs.put("otherKey1", "inVal2");
-
+
Gadget gadget = mockGadget(true, specPrefs, inPrefs);
TestDefaultIframeUriManager manager = makeManager(false, false);
Uri result = manager.makeRenderingUri(gadget);
assertNotNull(result);
UriBuilder uri = new UriBuilder(result);
-
+
// otherKey1/inVal2 pair ignored; not known by the gadget
assertEquals(TYPE_HTML_NUM_BASE_PARAMS + 2, uri.getQueryParameters().size());
assertEquals(0, uri.getFragmentParameters().size());
assertEquals("inVal1", uri.getQueryParameter("up_specKey1"));
assertEquals("specDefault2", uri.getQueryParameter("up_specKey2"));
}
-
+
@Test
public void userPrefsAddedFragment() {
// Scenario exercises all prefs cases: overridden/known key, unknown key, missing key
@@ -455,20 +457,20 @@ public class DefaultIframeUriManagerTest
Map<String, String> inPrefs = Maps.newHashMap();
inPrefs.put("specKey1", "inVal1");
inPrefs.put("otherKey1", "inVal2");
-
+
Gadget gadget = mockGadget(false, specPrefs, inPrefs);
TestDefaultIframeUriManager manager = makeManager(false, false);
Uri result = manager.makeRenderingUri(gadget);
assertNotNull(result);
UriBuilder uri = new UriBuilder(result);
-
+
// otherKey1/inVal2 pair ignored; not known by the gadget
assertEquals(TYPE_HTML_NUM_BASE_PARAMS, uri.getQueryParameters().size());
assertEquals(2, uri.getFragmentParameters().size());
assertEquals("inVal1", uri.getFragmentParameter("up_specKey1"));
assertEquals("specDefault2", uri.getFragmentParameter("up_specKey2"));
}
-
+
@Test
public void honorSchemeOverride() {
String scheme = "file";
@@ -480,7 +482,7 @@ public class DefaultIframeUriManagerTest
UriBuilder uri = new UriBuilder(result);
assertEquals(scheme, uri.getScheme());
}
-
+
@Test
public void badUriValidatingUri() {
Uri uri = new UriBuilder().addQueryParameter(Param.URL.getKey(), "^': bad:").toUri();
@@ -488,21 +490,21 @@ public class DefaultIframeUriManagerTest
UriStatus status = manager.validateRenderingUri(uri);
assertEquals(UriStatus.BAD_URI, status);
}
-
+
@Test
public void invalidLockedDomainValidSuffix() {
Uri uri = makeValidationTestUri(LD_PREFIX + LD_SUFFIX_ALT, null);
DefaultIframeUriManager manager = makeManager(false, false);
assertEquals(UriStatus.INVALID_DOMAIN, manager.validateRenderingUri(uri));
}
-
+
@Test
public void invalidLockedDomainInvalidSuffix() {
Uri uri = makeValidationTestUri(LD_PREFIX + ".bad." + LD_SUFFIX, null);
DefaultIframeUriManager manager = makeManager(false, false);
assertEquals(UriStatus.INVALID_DOMAIN, manager.validateRenderingUri(uri));
}
-
+
@Test
public void invalidLockedDomainValidSuffixExclusionBypass() {
Uri uri = makeValidationTestUri(LD_PREFIX + LD_SUFFIX_ALT, null);
@@ -510,7 +512,7 @@ public class DefaultIframeUriManagerTest
manager.setLdExclusion(true);
assertEquals(UriStatus.VALID_UNVERSIONED, manager.validateRenderingUri(uri));
}
-
+
@Test
public void invalidLockedDomainInvalidSuffixExclusionBypass() {
Uri uri = makeValidationTestUri(LD_PREFIX + ".bad." + LD_SUFFIX, null);
@@ -518,7 +520,7 @@ public class DefaultIframeUriManagerTest
manager.setLdExclusion(true);
assertEquals(UriStatus.VALID_UNVERSIONED, manager.validateRenderingUri(uri));
}
-
+
@Test
public void invalidLockedDomainValidSuffixLdDisabled() {
Uri uri = makeValidationTestUri(LD_PREFIX + LD_SUFFIX_ALT, null);
@@ -526,7 +528,7 @@ public class DefaultIframeUriManagerTest
manager.setLockedDomainEnabled(false);
assertEquals(UriStatus.VALID_UNVERSIONED, manager.validateRenderingUri(uri));
}
-
+
@Test
public void invalidLockedDomainInvalidSuffixLdDisabled() {
Uri uri = makeValidationTestUri(LD_PREFIX + ".bad." + LD_SUFFIX, null);
@@ -534,14 +536,14 @@ public class DefaultIframeUriManagerTest
manager.setLockedDomainEnabled(false);
assertEquals(UriStatus.VALID_UNVERSIONED, manager.validateRenderingUri(uri));
}
-
+
@Test
public void validUnversionedNoVersioner() {
Uri uri = makeValidationTestUri(LD_PREFIX + LD_SUFFIX, "version");
DefaultIframeUriManager manager = makeManager(false, false);
assertEquals(UriStatus.VALID_UNVERSIONED, manager.validateRenderingUri(uri));
}
-
+
@Test
public void validUnversionedNoVersion() {
Uri uri = makeValidationTestUri(LD_PREFIX + LD_SUFFIX, null);
@@ -549,7 +551,7 @@ public class DefaultIframeUriManagerTest
manager.setVersioner(this.mockVersioner("version", false)); // Invalid, if present.
assertEquals(UriStatus.VALID_UNVERSIONED, manager.validateRenderingUri(uri));
}
-
+
@Test
public void versionerVersionInvalid() {
Uri uri = makeValidationTestUri(LD_PREFIX + LD_SUFFIX, "in-version");
@@ -557,7 +559,7 @@ public class DefaultIframeUriManagerTest
manager.setVersioner(mockVersioner("test-version", false)); // Invalid, if present.
assertEquals(UriStatus.INVALID_VERSION, manager.validateRenderingUri(uri));
}
-
+
@Test
public void versionerVersionMatch() {
String version = "abcdefg";
@@ -566,7 +568,7 @@ public class DefaultIframeUriManagerTest
manager.setVersioner(mockVersioner(version, true));
assertEquals(UriStatus.VALID_VERSIONED, manager.validateRenderingUri(uri));
}
-
+
private Uri makeValidationTestUri(String domain, String version) {
UriBuilder uri = new UriBuilder();
uri.setAuthority(domain);
@@ -578,7 +580,7 @@ public class DefaultIframeUriManagerTest
}
return uri.toUri();
}
-
+
private TestDefaultIframeUriManager makeManager(boolean alwaysToken, boolean ldRequired) {
ContainerConfig config = createMock(ContainerConfig.class);
String altContainer = CONTAINER + "-alt";
@@ -594,7 +596,7 @@ public class DefaultIframeUriManagerTest
replay(config);
return new TestDefaultIframeUriManager(config);
}
-
+
private IframeUriManager.Versioner mockVersioner(String version, boolean valid) {
IframeUriManager.Versioner versioner = createMock(IframeUriManager.Versioner.class);
expect(versioner.version(isA(Uri.class), isA(String.class))).andReturn(version).anyTimes();
@@ -603,14 +605,14 @@ public class DefaultIframeUriManagerTest
replay(versioner);
return versioner;
}
-
+
private DefaultIframeUriManager.TemplatingSignal tplSignal(boolean value) {
DefaultIframeUriManager.DefaultTemplatingSignal tplSignal =
new DefaultIframeUriManager.DefaultTemplatingSignal();
tplSignal.setUseTemplates(value);
return tplSignal;
}
-
+
private static final class TestDefaultIframeUriManager extends DefaultIframeUriManager {
private boolean ldExclusion = false;
private boolean ldExclusionCalled = false;
@@ -619,62 +621,62 @@ public class DefaultIframeUriManagerTest
private boolean tokenForRendering = true;
private boolean tokenForRenderingCalled = false;
private boolean addExtrasCalled = false;
-
+
private TestDefaultIframeUriManager(ContainerConfig config) {
super(config, prefixGen, tokenCodec);
}
-
+
private TestDefaultIframeUriManager setLdExclusion(boolean ldExclusion) {
this.ldExclusion = ldExclusion;
return this;
}
-
+
private TestDefaultIframeUriManager setScheme(String scheme) {
this.scheme = scheme;
return this;
}
-
+
private TestDefaultIframeUriManager setTokenForRendering(boolean tokenForRendering) {
this.tokenForRendering = tokenForRendering;
return this;
}
-
+
/** Overridden methods for custom behavior */
@Override
protected boolean lockedDomainExclusion() {
this.ldExclusionCalled = true;
return ldExclusion;
}
-
+
private boolean ldExclusionCalled() {
return ldExclusionCalled;
}
-
+
@Override
protected String getScheme(Gadget gadget, String container) {
this.schemeCalled = true;
return scheme;
}
-
+
private boolean schemeCalled() {
return schemeCalled;
}
-
+
@Override
protected boolean isTokenNeededForRendering(Gadget gadget) {
this.tokenForRenderingCalled = true;
return tokenForRendering;
}
-
+
private boolean tokenForRenderingCalled() {
return tokenForRenderingCalled;
}
-
+
@Override
- protected void addExtras(UriBuilder uri) {
+ protected void addExtras(UriBuilder uri, Gadget gadget) {
this.addExtrasCalled = true;
}
-
+
private boolean addExtrasCalled() {
return addExtrasCalled;
}
Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriManagerTestBase.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriManagerTestBase.java?rev=1022314&r1=1022313&r2=1022314&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriManagerTestBase.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriManagerTestBase.java Wed Oct 13 22:28:27 2010
@@ -30,6 +30,7 @@ import org.apache.shindig.common.uri.Uri
import org.apache.shindig.gadgets.Gadget;
import org.apache.shindig.gadgets.GadgetContext;
import org.apache.shindig.gadgets.UserPrefs;
+import org.apache.shindig.gadgets.spec.Feature;
import org.apache.shindig.gadgets.spec.GadgetSpec;
import org.apache.shindig.gadgets.spec.ModulePrefs;
import org.apache.shindig.gadgets.spec.UserPref;
@@ -46,21 +47,21 @@ public class UriManagerTestBase {
protected static final String VIEW = "theview";
protected static final String LANG = "en";
protected static final String COUNTRY = "US";
-
+
// Used for "feature-focused" tests, eg. security token and locked domain
protected Gadget mockGadget(String... features) {
Map<String, String> prefs = Maps.newHashMap();
return mockGadget(SPEC_URI.toString(), false, false, false, prefs, prefs, false,
Lists.newArrayList(features));
}
-
+
// Used for prefs-focused tests
protected Gadget mockGadget(boolean prefsForRendering, Map<String, String> specPrefs,
Map<String, String> inPrefs) {
return mockGadget(SPEC_URI.toString(), false, false, false, specPrefs, inPrefs,
prefsForRendering, Lists.<String>newArrayList());
}
-
+
// Used for "base" tests.
protected Gadget mockGadget(String targetUrl, boolean isTypeUrl, boolean isDebug,
boolean ignoreCache, Map<String, String> specPrefs, Map<String, String> inPrefs,
@@ -68,14 +69,14 @@ public class UriManagerTestBase {
return mockGadget(targetUrl, isTypeUrl, VIEW, LANG, COUNTRY, isDebug, ignoreCache,
specPrefs, inPrefs, needsPrefSubst, features);
}
-
+
// Used for tests that don't care much about prefs or gadget type.
protected Gadget mockGadget(boolean isDebug, boolean ignoreCache) {
return mockGadget(SPEC_URI.toString(), false, isDebug, ignoreCache,
Maps.<String, String>newHashMap(), Maps.<String, String>newHashMap(),
false, Lists.<String>newArrayList());
}
-
+
// Actually generates the mock gadget. Used for error (null value) tests.
protected Gadget mockGadget(String targetUrl, boolean isTypeUrl, String viewStr, String lang,
String country, boolean isDebug, boolean ignoreCache, Map<String, String> specPrefs,
@@ -85,7 +86,7 @@ public class UriManagerTestBase {
GadgetSpec spec = createMock(GadgetSpec.class);
GadgetContext context = createMock(GadgetContext.class);
Gadget gadget = createMock(Gadget.class);
-
+
// Base URL/view.
Uri targetUri = Uri.parse(targetUrl);
if (isTypeUrl) {
@@ -96,7 +97,7 @@ public class UriManagerTestBase {
expect(spec.getUrl()).andReturn(targetUri).anyTimes();
}
expect(view.getName()).andReturn(viewStr).anyTimes();
-
+
// Basic context info
Locale locale = new Locale(lang, country);
expect(context.getUrl()).andReturn(SPEC_URI).anyTimes();
@@ -105,12 +106,17 @@ public class UriManagerTestBase {
expect(context.getDebug()).andReturn(isDebug).anyTimes();
expect(context.getIgnoreCache()).andReturn(ignoreCache).anyTimes();
expect(context.getToken()).andReturn(null).anyTimes();
-
+
// All Features (doesn't distinguish between transitive and not)
expect(gadget.getAllFeatures()).andReturn(features).anyTimes();
-
+ Map<String, Feature> featureMap = Maps.newLinkedHashMap();
+ for (String feature : features) {
+ featureMap.put(feature, null);
+ }
+ expect(modulePrefs.getFeatures()).andReturn(featureMap).anyTimes();
+
// User prefs
- Map<String,UserPref> specPrefMap = Maps.newLinkedHashMap();
+ Map<String, UserPref> specPrefMap = Maps.newLinkedHashMap();
for (Map.Entry<String, String> specPref : specPrefs.entrySet()) {
UserPref up = createMock(UserPref.class);
expect(up.getName()).andReturn(specPref.getKey()).anyTimes();
@@ -123,16 +129,16 @@ public class UriManagerTestBase {
expect(context.getUserPrefs()).andReturn(ctxPrefs).anyTimes();
expect(context.getParameter(Param.REFRESH.getKey())).andReturn(null).anyTimes();
expect(view.needsUserPrefSubstitution()).andReturn(needsPrefSubst).anyTimes();
-
+
// Link all the mocks together
expect(spec.getModulePrefs()).andReturn(modulePrefs).anyTimes();
expect(gadget.getCurrentView()).andReturn(view).anyTimes();
expect(gadget.getSpec()).andReturn(spec).anyTimes();
expect(gadget.getContext()).andReturn(context).anyTimes();
-
+
// Replay all
replay(view, modulePrefs, spec, context, gadget);
-
+
// Return the gadget
return gadget;
}