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