/**
* Copyright 2014 55 Minutes (http://www.55minutes.com)
*
* Licensed 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 fiftyfive.wicket.resource;
import java.io.InputStream;
import fiftyfive.wicket.test.WicketTestUtils;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.request.resource.caching.NoOpResourceCachingStrategy;
import org.apache.wicket.util.io.IOUtils;
import org.apache.wicket.util.tester.DummyHomePage;
import org.apache.wicket.util.tester.WicketTester;
import org.junit.Test;
public class SimpleCDNTest
{
static final String HOST = "http://abc.cloudfront.net";
@Test
public void testCDN() throws Exception
{
WicketTester tester = new WicketTester(new CDNApp(HOST));
assertRendered(tester);
assertResourcesDownload(tester);
}
@Test
public void testCDN_trailing_slash() throws Exception
{
WicketTester tester = new WicketTester(new CDNApp(HOST + "/"));
assertRendered(tester);
assertResourcesDownload(tester);
}
/**
* Verify that the SimpleCDNTestPage renders and rewrites the resource URLs
* as expected.
*/
void assertRendered(WicketTester tester) throws Exception
{
tester.startPage(SimpleCDNTestPage.class);
tester.assertRenderedPage(SimpleCDNTestPage.class);
WicketTestUtils.assertValidMarkup(tester);
tester.assertResultPage(SimpleCDNTestPage.class, "SimpleCDNTestPage-expected.html");
}
/**
* Verify that the rewritten resource URLs still work and download the expected binary data
* once the CDN host is stripped off (as a reverse-proxy CDN would do).
*/
void assertResourcesDownload(WicketTester tester) throws Exception
{
String[] resources = new String[] { "test.css", "test.js", "test.gif" };
for(String res : resources)
{
InputStream is = getClass().getResourceAsStream(res);
try
{
String uri = "wicket/resource/fiftyfive.wicket.resource.SimpleCDNTestPage/" + res;
byte[] expected = IOUtils.toByteArray(is);
WicketTestUtils.assertDownloadEquals(tester, uri, expected);
}
finally
{
IOUtils.closeQuietly(is);
}
}
}
class CDNApp extends WebApplication
{
final String host;
CDNApp(String host)
{
this.host = host;
}
@Override
public Class<? extends WebPage> getHomePage()
{
return DummyHomePage.class;
}
@Override
protected void init()
{
super.init();
getMarkupSettings().setStripWicketTags(true);
getResourceSettings().setCachingStrategy(NoOpResourceCachingStrategy.INSTANCE);
new SimpleCDN(this.host).install(this);
}
}
}