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

svn commit: r920571 - in /shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets: rewrite/DomWalkerTestBase.java rewrite/RewriterTestBase.java uri/PassthruManager.java

Author: johnh
Date: Mon Mar  8 23:45:40 2010
New Revision: 920571

URL: http://svn.apache.org/viewvc?rev=920571&view=rev
Log:
Adding missing test helper classes. Apologies!


Added:
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTestBase.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/RewriterTestBase.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/PassthruManager.java

Added: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTestBase.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTestBase.java?rev=920571&view=auto
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTestBase.java (added)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTestBase.java Mon Mar  8 23:45:40 2010
@@ -0,0 +1,100 @@
+/*
+ * 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.rewrite;
+
+import static org.easymock.EasyMock.expect;
+import static org.easymock.classextension.EasyMock.createMock;
+import static org.easymock.classextension.EasyMock.replay;
+
+import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.GadgetContext;
+import org.apache.shindig.gadgets.parse.ParseModule;
+import org.apache.shindig.gadgets.spec.GadgetSpec;
+import org.apache.shindig.gadgets.spec.View;
+import org.apache.shindig.gadgets.uri.UriCommon.Param;
+import org.junit.Before;
+import org.w3c.dom.Attr;
+import org.w3c.dom.DOMImplementation;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.name.Names;
+import com.google.inject.util.Modules;
+
+public class DomWalkerTestBase {
+  protected static final Uri GADGET_URI = Uri.parse("http://example.com/gadget.xml");
+  protected static final String CONTAINER = "container";
+  
+  protected Document doc;
+
+  @Before
+  public void setUp() {
+    Injector injector = Guice.createInjector(Modules.override(new ParseModule())
+        .with(new AbstractModule() {
+          @Override
+          protected void configure() {
+            bind(Integer.class).annotatedWith(
+                Names.named("shindig.cache.lru.default.capacity"))
+                  .toInstance(0);
+          }
+        }));
+    DOMImplementation domImpl = injector.getInstance(DOMImplementation.class);
+    doc = domImpl.createDocument(null, null, null);
+  }
+  
+  protected Element elem(String tag, String... attrStrs) {
+    Element elem = doc.createElement(tag);
+    for (int i = 0; attrStrs != null && i < attrStrs.length; i += 2) {
+      Attr attr = doc.createAttribute(attrStrs[i]);
+      attr.setValue(attrStrs[i+1]);
+      elem.setAttributeNode(attr);
+    }
+    return elem;
+  }
+  
+  protected Gadget gadget() {
+    return gadget(false, false);
+  }
+  
+  protected Gadget gadget(boolean debug, boolean ignoreCache) {
+    return gadget(debug, ignoreCache, null);
+  }
+  
+  protected Gadget gadget(boolean debug, boolean ignoreCache, Uri curviewHref) {
+    GadgetSpec spec = createMock(GadgetSpec.class);
+    expect(spec.getUrl()).andReturn(GADGET_URI).anyTimes();
+    Gadget gadget = createMock(Gadget.class);
+    expect(gadget.getSpec()).andReturn(spec).anyTimes();
+    GadgetContext ctx = createMock(GadgetContext.class);
+    expect(ctx.getParameter(Param.REFRESH.getKey())).andReturn(null).anyTimes();
+    expect(ctx.getDebug()).andReturn(debug).anyTimes();
+    expect(ctx.getIgnoreCache()).andReturn(ignoreCache).anyTimes();
+    expect(ctx.getContainer()).andReturn(CONTAINER).anyTimes();
+    expect(gadget.getContext()).andReturn(ctx).anyTimes();
+    View currentView = createMock(View.class);
+    expect(currentView.getHref()).andReturn(curviewHref).anyTimes();
+    expect(gadget.getCurrentView()).andReturn(currentView).anyTimes();
+    replay(ctx, spec, currentView, gadget);
+    return gadget;
+  }
+}

Added: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/RewriterTestBase.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/RewriterTestBase.java?rev=920571&view=auto
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/RewriterTestBase.java (added)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/RewriterTestBase.java Mon Mar  8 23:45:40 2010
@@ -0,0 +1,213 @@
+/*
+ * 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.rewrite;
+
+import org.apache.shindig.common.PropertiesModule;
+import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.GadgetContext;
+import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.GadgetSpecFactory;
+import org.apache.shindig.gadgets.http.HttpRequest;
+import org.apache.shindig.gadgets.http.HttpResponse;
+import org.apache.shindig.gadgets.http.HttpResponseBuilder;
+import org.apache.shindig.gadgets.http.RequestPipeline;
+import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
+import org.apache.shindig.gadgets.parse.ParseModule;
+import org.apache.shindig.gadgets.spec.GadgetSpec;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+
+import org.apache.commons.lang.StringUtils;
+import org.easymock.classextension.EasyMock;
+import org.easymock.classextension.IMocksControl;
+import org.junit.Before;
+
+import java.util.Set;
+
+/**
+ * Base class for testing content rewriting functionality
+ */
+public abstract class RewriterTestBase {
+  public static final Uri SPEC_URL = Uri.parse("http://www.example.org/dir/g.xml");
+  public static final String DEFAULT_PROXY_BASE = "http://www.test.com/dir/proxy?url=";
+  public static final String DEFAULT_CONCAT_BASE = "http://www.test.com/dir/concat?";
+  protected final String TAGS = "embed,img,script,link,style";
+
+  public static final String MOCK_CONTAINER = "mock";
+  public static final String MOCK_PROXY_BASE =
+    replaceDefaultWithMockServer(DEFAULT_PROXY_BASE);
+  public static final String MOCK_CONCAT_BASE =
+    replaceDefaultWithMockServer(DEFAULT_CONCAT_BASE);
+
+  protected Set<String> tags;
+  protected ContentRewriterFeature.Config defaultRewriterFeature;
+  protected ContentRewriterFeature.Factory rewriterFeatureFactory;
+  protected GadgetHtmlParser parser;
+  protected Injector injector;
+  protected HttpResponse fakeResponse;
+  protected IMocksControl control;
+
+  @Before
+  public void setUp() throws Exception {
+    rewriterFeatureFactory = new ContentRewriterFeature.Factory(null,
+        new ContentRewriterFeature.DefaultConfig(".*", "", "86400",
+        TAGS, "false", "false"));
+    defaultRewriterFeature = rewriterFeatureFactory.getDefault();
+    tags = defaultRewriterFeature.getIncludedTags();
+    injector = Guice.createInjector(new ParseModule(), new PropertiesModule(), new TestModule());
+    parser = injector.getInstance(GadgetHtmlParser.class);
+    fakeResponse = new HttpResponseBuilder().setHeader("Content-Type", "unknown")
+        .setResponse(new byte[]{ (byte)0xFE, (byte)0xFF}).create();
+    control = EasyMock.createControl();
+  }
+
+  public static GadgetSpec createSpecWithRewrite(String include, String exclude, String expires,
+      Set<String> tags) throws GadgetException {
+    StringBuilder xml = new StringBuilder();
+    xml.append("<Module>");
+    xml.append("<ModulePrefs title=\"title\">");
+    xml.append("<Optional feature=\"content-rewrite\">\n");
+    if(expires != null)
+      xml.append("      <Param name=\"expires\">" + expires + "</Param>\n");
+    if(include != null)
+      xml.append("      <Param name=\"include-urls\">" + include + "</Param>\n");
+    if(exclude != null)
+      xml.append("      <Param name=\"exclude-urls\">" + exclude + "</Param>\n");
+    if(tags != null)
+      xml.append("      <Param name=\"include-tags\">" + StringUtils.join(tags, ",") + "</Param>\n");
+    xml.append("</Optional>");
+    xml.append("</ModulePrefs>");
+    xml.append("<Content type=\"html\">Hello!</Content>");
+    xml.append("</Module>");
+    return new GadgetSpec(SPEC_URL, xml.toString());
+  }
+
+  public static GadgetSpec createSpecWithRewriteOS9(String[] includes, String[] excludes, String expires,
+      Set<String> tags) throws GadgetException {
+    StringBuilder xml = new StringBuilder();
+    xml.append("<Module>");
+    xml.append("<ModulePrefs title=\"title\">");
+    xml.append("<Optional feature=\"content-rewrite\">\n");
+    if(expires != null)
+      xml.append("      <Param name=\"expires\">" + expires + "</Param>\n");
+    if(includes != null)
+      for (String include : includes) {
+        xml.append("      <Param name=\"include-url\">" + include + "</Param>\n");
+      }
+    if(excludes != null)
+      for (String exclude : excludes) {
+        xml.append("      <Param name=\"exclude-url\">" + exclude + "</Param>\n");
+      }
+    if(tags != null)
+      xml.append("      <Param name=\"include-tags\">" + StringUtils.join(tags, ",") + "</Param>\n");
+    xml.append("</Optional>");
+    xml.append("</ModulePrefs>");
+    xml.append("<Content type=\"html\">Hello!</Content>");
+    xml.append("</Module>");
+    return new GadgetSpec(SPEC_URL, xml.toString());
+  }
+
+  public static GadgetSpec createSpecWithoutRewrite() throws GadgetException {
+    String xml = "<Module>" +
+                 "<ModulePrefs title=\"title\">" +
+                 "</ModulePrefs>" +
+                 "<Content type=\"html\">Hello!</Content>" +
+                 "</Module>";
+    return new GadgetSpec(SPEC_URL, xml);
+  }
+
+  public static String replaceDefaultWithMockServer(String originalText) {
+    return originalText.replace("test.com", "mock.com");
+  }
+
+  protected String rewriteHelper(GadgetRewriter rewriter, String s)
+      throws Exception {
+    MutableContent mc = rewriteContent(rewriter, s, null);
+    String rewrittenContent = mc.getContent();
+
+    // Strip around the HTML tags for convenience
+    int htmlTagIndex = rewrittenContent.indexOf("<HTML>");
+    if (htmlTagIndex != -1) {
+      return rewrittenContent.substring(htmlTagIndex + 6,
+          rewrittenContent.lastIndexOf("</HTML>"));
+    }
+    return rewrittenContent;
+  }
+
+  protected MutableContent rewriteContent(GadgetRewriter rewriter, String s,
+      final String container) throws Exception {
+    return rewriteContent(rewriter, s, container, false, false);
+  }
+  
+  protected MutableContent rewriteContent(GadgetRewriter rewriter, String s,
+      final String container, final boolean debug, final boolean ignoreCache)
+      throws Exception {
+    MutableContent mc = new MutableContent(parser, s);
+
+    GadgetSpec spec = new GadgetSpec(SPEC_URL,
+        "<Module><ModulePrefs title=''/><Content><![CDATA[" + s + "]]></Content></Module>");
+
+    GadgetContext context = new GadgetContext() {
+      @Override
+      public Uri getUrl() {
+        return SPEC_URL;
+      }
+
+      @Override
+      public String getContainer() {
+        return container;
+      }
+      
+      @Override
+      public boolean getDebug() {
+        return debug;
+      }
+      
+      @Override
+      public boolean getIgnoreCache() {
+        return ignoreCache;
+      }
+    };
+
+    Gadget gadget = new Gadget()
+        .setContext(context)
+        .setSpec(spec);
+    rewriter.rewrite(gadget, mc);
+    return mc;
+  }
+
+  private static class TestModule extends AbstractModule {
+
+    @Override
+    protected void configure() {
+      bind(RequestPipeline.class).toInstance(new RequestPipeline() {
+        public HttpResponse execute(HttpRequest request) { return null; }
+        public void normalizeProtocol(HttpRequest request) throws GadgetException {}
+      });
+
+      bind(GadgetSpecFactory.class).toInstance(new GadgetSpecFactory() {
+        public GadgetSpec getGadgetSpec(GadgetContext context) {
+          return null;
+        }
+      });
+    }
+  }
+}

Added: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/PassthruManager.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/PassthruManager.java?rev=920571&view=auto
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/PassthruManager.java (added)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/PassthruManager.java Mon Mar  8 23:45:40 2010
@@ -0,0 +1,73 @@
+/*
+ * 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 java.util.List;
+
+import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.common.uri.UriBuilder;
+import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.uri.UriCommon.Param;
+
+import com.google.common.collect.Lists;
+import com.google.inject.internal.ImmutableList;
+
+public class PassthruManager implements ProxyUriManager {
+  private UriStatus expectStatus = UriStatus.VALID_VERSIONED;
+  
+  private boolean doProxy = false;
+  private String proxyHost = null;
+  private String proxyPath = null;
+  
+  public PassthruManager() {
+    // Regular no-proxy mode.
+  }
+  
+  public PassthruManager(String proxyHost, String proxyPath) {
+    this.proxyHost = proxyHost;
+    this.proxyPath = proxyPath;
+    this.doProxy = true;
+  }
+
+  public List<Uri> make(List<ProxyUri> resource, Integer forcedRefresh) {
+    List<Uri> ctx = Lists.newArrayListWithCapacity(resource.size());
+    for (ProxyUri res : resource) {
+      ctx.add(getUri(res.getResource()));
+    }
+    return ImmutableList.copyOf(ctx);
+  }
+  
+  private Uri getUri(Uri src) {
+    if (!doProxy) {
+      return src;
+    }
+    return new UriBuilder().setScheme("http").setAuthority(proxyHost).setPath(proxyPath)
+        .addQueryParameter(Param.URL.getKey(), src.toString()).toUri();
+  }
+
+  public ProxyUri process(Uri uri) throws GadgetException {
+    String proxied = uri.getQueryParameter(Param.URL.getKey());
+    return new ProxyUri(expectStatus,
+        proxied != null ? Uri.parse(proxied) : null, uri);
+  }
+  
+  public void expectStatus(UriStatus status) {
+    this.expectStatus = status;
+  }
+}
\ No newline at end of file