Package org.apache.shindig.gadgets.uri

Source Code of org.apache.shindig.gadgets.uri.DefaultIframeUriManagerTest$TestDefaultIframeUriManager

/*
* 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.gadgets.uri;

import static org.apache.shindig.gadgets.uri.DefaultIframeUriManager.tplKey;
import static org.apache.shindig.gadgets.uri.DefaultIframeUriManager.IFRAME_BASE_PATH_KEY;
import static org.apache.shindig.gadgets.uri.DefaultIframeUriManager.LOCKED_DOMAIN_FEATURE_NAME;
import static org.apache.shindig.gadgets.uri.DefaultIframeUriManager.LOCKED_DOMAIN_REQUIRED_KEY;
import static org.apache.shindig.gadgets.uri.DefaultIframeUriManager.LOCKED_DOMAIN_SUFFIX_KEY;
import static org.apache.shindig.gadgets.uri.DefaultIframeUriManager.SECURITY_TOKEN_ALWAYS_KEY;
import static org.apache.shindig.gadgets.uri.DefaultIframeUriManager.SECURITY_TOKEN_FEATURE_NAME;
import static org.apache.shindig.gadgets.uri.DefaultIframeUriManager.UNLOCKED_DOMAIN_KEY;

import static org.easymock.classextension.EasyMock.createMock;
import static org.easymock.classextension.EasyMock.expect;
import static org.easymock.classextension.EasyMock.isA;
import static org.easymock.classextension.EasyMock.replay;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;

import org.apache.shindig.common.uri.Uri;
import org.apache.shindig.common.uri.UriBuilder;
import org.apache.shindig.config.ContainerConfig;
import org.apache.shindig.gadgets.Gadget;
import org.apache.shindig.gadgets.GadgetContext;
import org.apache.shindig.gadgets.UserPrefs;
import org.apache.shindig.gadgets.spec.GadgetSpec;
import org.apache.shindig.gadgets.spec.ModulePrefs;
import org.apache.shindig.gadgets.spec.UserPref;
import org.apache.shindig.gadgets.spec.View;
import org.apache.shindig.gadgets.spec.View.ContentType;
import org.apache.shindig.gadgets.uri.UriCommon.Param;

import org.junit.Test;

import java.util.Collection;
import java.util.List;
import java.util.Locale;
import java.util.Map;

public class DefaultIframeUriManagerTest {
  private static final String CONTAINER = "container";
  private static final String LD_PREFIX = "LOCKED";
  private static final String IFRAME_PATH = "/gadgets/ifr";
  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 String VIEW = "theview";
  private static final String LANG = "en";
  private static final String COUNTRY = "US";
  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 Uri SPEC_URI = Uri.parse("http://example.com/gadget.xml");
 
  private static final LockedDomainPrefixGenerator prefixGen = new LockedDomainPrefixGenerator() {
    public String getLockedDomainPrefix(Uri gadgetUri) {
      return LD_PREFIX;
    }
  };
 
  @Test
  public void typeHtmlBasicOptions() {
    String prefKey = "prefKey";
    String prefVal = "prefVal";
    Map<String, String> prefs = Maps.newHashMap();
    prefs.put(prefKey, prefVal);
    List<String> features = Lists.newArrayList();
   
    // Make the gadget.
    Gadget gadget = mockGadget(
        SPEC_URI.toString(),
        false,  // not type=url
        false,  // isDebug
        false,  // ignoreCache
        prefs,  // spec-contained prefs
        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());
    assertEquals(IFRAME_PATH, uri.getPath());
    assertEquals(SPEC_URI.toString(), uri.getQueryParameter(Param.URL.getKey()));
    assertEquals(CONTAINER, uri.getQueryParameter(Param.CONTAINER.getKey()));
    assertEquals(VIEW, uri.getQueryParameter(Param.VIEW.getKey()));
    assertEquals(LANG, uri.getQueryParameter(Param.LANG.getKey()));
    assertEquals(COUNTRY, uri.getQueryParameter(Param.COUNTRY.getKey()));
    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";
    String prefVal = "prefVal";
    Map<String, String> prefs = Maps.newHashMap();
    prefs.put(prefKey, prefVal);
    List<String> features = Lists.newArrayList();
   
    // Make the gadget.
    Gadget gadget = mockGadget(
        SPEC_URI.toString(),
        false,  // not type=url
        false,  // isDebug
        false,  // ignoreCache
        prefs,  // spec-contained prefs
        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());
    assertEquals(IFRAME_PATH, uriTpl.getPath());
    assertEquals(SPEC_URI.toString(), uriTpl.getQueryParameter(Param.URL.getKey()));
    assertEquals(CONTAINER, uriTpl.getQueryParameter(Param.CONTAINER.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()));
    assertEquals(tplKey(Param.DEBUG.getKey()), uriTpl.getQueryParameter(Param.DEBUG.getKey()));
    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";
    String prefKey = "prefKey";
    String prefVal = "prefVal";
    Map<String, String> prefs = Maps.newHashMap();
    prefs.put(prefKey, prefVal);
    List<String> features = Lists.newArrayList();
   
    // Make the gadget.
    Gadget gadget = mockGadget(
        gadgetSite,
        true,   // type=url
        true,   // isDebug
        true,   // ignoreCache
        prefs,  // spec-contained prefs
        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());
    assertEquals("/gadget", uri.getPath());
    assertEquals(CONTAINER, uri.getQueryParameter(Param.CONTAINER.getKey()));
    assertEquals(VIEW, uri.getQueryParameter(Param.VIEW.getKey()));
    assertEquals(LANG, uri.getQueryParameter(Param.LANG.getKey()));
    assertEquals(COUNTRY, uri.getQueryParameter(Param.COUNTRY.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";
    String prefKey = "prefKey";
    String prefVal = "prefVal";
    Map<String, String> prefs = Maps.newHashMap();
    prefs.put(prefKey, prefVal);
    List<String> features = Lists.newArrayList();
   
    // Make the gadget.
    Gadget gadget = mockGadget(
        gadgetSite,
        true,   // type=url
        true,   // isDebug
        true,   // ignoreCache
        prefs,  // spec-contained prefs
        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(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()));
    assertEquals(tplKey(Param.DEBUG.getKey()), uriTpl.getQueryParameter(Param.DEBUG.getKey()));
    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);
    TestDefaultIframeUriManager manager = makeManager(false, false);
    manager.setTokenForRendering(false);
    Uri result = manager.makeRenderingUri(gadget);
    assertNotNull(result);
    UriBuilder uri = new UriBuilder(result);
    assertEquals(TYPE_HTML_NUM_BASE_PARAMS, uri.getQueryParameters().size());
    assertEquals(1, uri.getFragmentParameters().size());
    assertEquals(tplKey(Param.SECURITY_TOKEN.getKey()),
        uri.getFragmentParameter(Param.SECURITY_TOKEN.getKey()));
    assertTrue(manager.tokenForRenderingCalled());
  }
 
  @Test
  public void securityTokenAddedWhenGadgetNeedsItQuery() {
    Gadget gadget = mockGadget(SECURITY_TOKEN_FEATURE_NAME);
    TestDefaultIframeUriManager manager = makeManager(false, false);
    manager.setTokenForRendering(true);
    Uri result = manager.makeRenderingUri(gadget);
    assertNotNull(result);
    UriBuilder uri = new UriBuilder(result);
    assertEquals(TYPE_HTML_NUM_BASE_PARAMS + 1, uri.getQueryParameters().size());
    assertEquals(0, uri.getFragmentParameters().size());
    assertEquals(tplKey(Param.SECURITY_TOKEN.getKey()),
        uri.getQueryParameter(Param.SECURITY_TOKEN.getKey()));
    assertTrue(manager.tokenForRenderingCalled());
  }
 
  @Test
  public void securityTokenAddedWhenForced() {
    Gadget gadget = mockGadget("foo", "bar");
    TestDefaultIframeUriManager manager = makeManager(true, false)// security token forced
    manager.setTokenForRendering(false);
    Uri result = manager.makeRenderingUri(gadget);
    assertNotNull(result);
    UriBuilder uri = new UriBuilder(result);
    assertEquals(TYPE_HTML_NUM_BASE_PARAMS, uri.getQueryParameters().size());
    assertEquals(1, uri.getFragmentParameters().size());
    assertEquals(tplKey(Param.SECURITY_TOKEN.getKey()),
        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";
    Gadget gadget = mockGadget();
    TestDefaultIframeUriManager manager = makeManager(false, false);
    manager.setVersioner(this.mockVersioner(version, true));
    Uri result = manager.makeRenderingUri(gadget);
    assertNotNull(result);
    UriBuilder uri = new UriBuilder(result);
    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
    Map<String, String> specPrefs = Maps.newHashMap();
    specPrefs.put("specKey1", "specDefault1");
    specPrefs.put("specKey2", "specDefault2");
    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
    Map<String, String> specPrefs = Maps.newHashMap();
    specPrefs.put("specKey1", "specDefault1");
    specPrefs.put("specKey2", "specDefault2");
    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";
    Gadget gadget = mockGadget();
    TestDefaultIframeUriManager manager = makeManager(false, false);
    manager.setScheme(scheme);
    Uri result = manager.makeRenderingUri(gadget);
    assertNotNull(result);
    UriBuilder uri = new UriBuilder(result);
    assertEquals(scheme, uri.getScheme());
  }
 
  @Test
  public void badUriValidatingUri() {
    Uri uri = new UriBuilder().addQueryParameter(Param.URL.getKey(), "^':   bad:").toUri();
    TestDefaultIframeUriManager manager = makeManager(false, false);
    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);
    TestDefaultIframeUriManager manager = makeManager(false, false);
    manager.setLdExclusion(true);
    assertEquals(UriStatus.VALID_UNVERSIONED, manager.validateRenderingUri(uri));
  }
 
  @Test
  public void invalidLockedDomainInvalidSuffixExclusionBypass() {
    Uri uri = makeValidationTestUri(LD_PREFIX + ".bad." + LD_SUFFIX, null);
    TestDefaultIframeUriManager manager = makeManager(false, false);
    manager.setLdExclusion(true);
    assertEquals(UriStatus.VALID_UNVERSIONED, manager.validateRenderingUri(uri));
  }
 
  @Test
  public void invalidLockedDomainValidSuffixLdDisabled() {
    Uri uri = makeValidationTestUri(LD_PREFIX + LD_SUFFIX_ALT, null);
    DefaultIframeUriManager manager = makeManager(false, false);
    manager.setLockedDomainEnabled(false);
    assertEquals(UriStatus.VALID_UNVERSIONED, manager.validateRenderingUri(uri));
  }
 
  @Test
  public void invalidLockedDomainInvalidSuffixLdDisabled() {
    Uri uri = makeValidationTestUri(LD_PREFIX + ".bad." + LD_SUFFIX, null);
    DefaultIframeUriManager manager = makeManager(false, false);
    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);
    DefaultIframeUriManager manager = makeManager(false, false);
    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");
    DefaultIframeUriManager manager = makeManager(false, false);
    manager.setVersioner(mockVersioner("test-version", false))// Invalid, if present.
    assertEquals(UriStatus.INVALID_VERSION, manager.validateRenderingUri(uri));
  }
 
  @Test
  public void versionerVersionMatch() {
    String version = "abcdefg";
    Uri uri = makeValidationTestUri(LD_PREFIX + LD_SUFFIX, version);
    DefaultIframeUriManager manager = makeManager(false, false);
    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);
    uri.setPath(IFRAME_PATH);
    uri.addQueryParameter(Param.URL.getKey(), SPEC_URI.toString());
    uri.addQueryParameter(Param.CONTAINER.getKey(), CONTAINER);
    if (version != null) {
      uri.addQueryParameter(Param.VERSION.getKey(), version);
    }
    return uri.toUri();
  }
 
  // Used for "feature-focused" tests, eg. security token and locked domain
  private 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
  private 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.
  private Gadget mockGadget(String targetUrl, boolean isTypeUrl, boolean isDebug,
      boolean ignoreCache, Map<String, String> specPrefs, Map<String, String> inPrefs,
      boolean needsPrefSubst, List<String> features) {
    return mockGadget(targetUrl, isTypeUrl, VIEW, LANG, COUNTRY, isDebug, ignoreCache,
        specPrefs, inPrefs, needsPrefSubst, features);
  }
 
  // Actually generates the mock gadget. Used for error (null value) tests.
  private Gadget mockGadget(String targetUrl, boolean isTypeUrl, String viewStr, String lang,
      String country, boolean isDebug, boolean ignoreCache, Map<String, String> specPrefs,
      Map<String, String> inPrefs, boolean needsPrefSubst, List<String> features) {
    View view = createMock(View.class);
    ModulePrefs modulePrefs = createMock(ModulePrefs.class);
    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) {
      expect(view.getType()).andReturn(ContentType.URL).anyTimes();
      expect(view.getHref()).andReturn(targetUri).anyTimes();
    } else {
      expect(view.getType()).andReturn(ContentType.HTML).anyTimes();
      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();
    expect(context.getContainer()).andReturn(CONTAINER).anyTimes();
    expect(context.getLocale()).andReturn(locale).anyTimes();
    expect(context.getDebug()).andReturn(isDebug).anyTimes();
    expect(context.getIgnoreCache()).andReturn(ignoreCache).anyTimes();
   
    // All Features (doesn't distinguish between transitive and not)
    expect(gadget.getAllFeatures()).andReturn(features).anyTimes();
   
    // User prefs
    List<UserPref> specPrefList = Lists.newLinkedList();
    for (Map.Entry<String, String> specPref : specPrefs.entrySet()) {
      UserPref up = createMock(UserPref.class);
      expect(up.getName()).andReturn(specPref.getKey()).anyTimes();
      expect(up.getDefaultValue()).andReturn(specPref.getValue()).anyTimes();
      replay(up);
      specPrefList.add(up);
    }
    expect(spec.getUserPrefs()).andReturn(specPrefList).anyTimes();
    UserPrefs ctxPrefs = new UserPrefs(inPrefs);
    expect(context.getUserPrefs()).andReturn(ctxPrefs).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;
  }
   
  private TestDefaultIframeUriManager makeManager(boolean alwaysToken, boolean ldRequired) {
    ContainerConfig config = createMock(ContainerConfig.class);
    String altContainer = CONTAINER + "-alt";
    Collection<String> containers = Lists.newArrayList(CONTAINER, altContainer);
    expect(config.getContainers()).andReturn(containers).anyTimes();
    expect(config.getString(CONTAINER, IFRAME_BASE_PATH_KEY)).andReturn(IFRAME_PATH).anyTimes();
    expect(config.getString(CONTAINER, LOCKED_DOMAIN_SUFFIX_KEY)).andReturn(LD_SUFFIX).anyTimes();
    expect(config.getString(altContainer, LOCKED_DOMAIN_SUFFIX_KEY))
        .andReturn(LD_SUFFIX_ALT).anyTimes();
    expect(config.getString(CONTAINER, UNLOCKED_DOMAIN_KEY)).andReturn(UNLOCKED_DOMAIN).anyTimes();
    expect(config.getBool(CONTAINER, SECURITY_TOKEN_ALWAYS_KEY)).andReturn(alwaysToken).anyTimes();
    expect(config.getBool(CONTAINER, LOCKED_DOMAIN_REQUIRED_KEY)).andReturn(ldRequired).anyTimes();
    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();
    expect(versioner.validate(isA(Uri.class), isA(String.class), isA(String.class))).andReturn(
        valid ? UriStatus.VALID_VERSIONED : UriStatus.INVALID_VERSION).anyTimes();
    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;
    private String scheme = "";
    private boolean schemeCalled = false;
    private boolean tokenForRendering = true;
    private boolean tokenForRenderingCalled = false;
    private boolean addExtrasCalled = false;
   
    private TestDefaultIframeUriManager(ContainerConfig config) {
      super(config, prefixGen);
    }
   
    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) {
      this.addExtrasCalled = true;
    }
   
    private boolean addExtrasCalled() {
      return addExtrasCalled;
    }
  }
}
TOP

Related Classes of org.apache.shindig.gadgets.uri.DefaultIframeUriManagerTest$TestDefaultIframeUriManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.