blob: 04ef89505dd78ebef610132f7fd516fa4881ab33 [file] [log] [blame]
// Copyright 2013 Google Inc. All Rights Reserved.
//
// 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 com.google.enterprise.adaptor.experimental;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.Set;
/** Tests for {@link Sim}. */
public class SimTest {
@Rule
public ExpectedException thrown = ExpectedException.none();
private static final String NL = "\r\n";
private static final String METADATA_XML
= "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + NL
+ "<!DOCTYPE gsafeed PUBLIC \"-//Google//DTD GSA Feeds//EN\" \"\">" + NL
+ "<gsafeed>" + NL
+ "<!--GSA EasyConnector-->" + NL
+ "<header>" + NL
+ "<datasource>adaptor_moses-mtv-corp-google-com_15678</datasource>" + NL
+ "<feedtype>metadata-and-url</feedtype>" + NL
+ "</header>" + NL
+ "<group>" + NL
+ "<record mimetype=\"text/plain\" url=\"http://urlA\"/>" + NL
+ "<record mimetype=\"text/plain\" url=\"http://urlB\"/>" + NL
+ "<record mimetype=\"text/plain\" url=\"http://urlC\"/>" + NL
+ "</group>" + NL
+ "</gsafeed>" + NL;
private static final String POST_BODY = "--<<" + NL
+ "Content-Disposition: form-data; name=\"datasource\"" + NL
+ "Content-Type: text/plain" + NL
+ "" + NL
+ "adaptor_moses-mtv-corp-google-com_15678" + NL
+ "--<<" + NL
+ "Content-Disposition: form-data; name=\"feedtype\"" + NL
+ "Content-Type: text/plain" + NL
+ "" + NL
+ "metadata-and-url" + NL
+ "--<<" + NL
+ "Content-Disposition: form-data; name=\"data\"" + NL
+ "Content-Type: text/xml" + NL
+ "" + NL
+ METADATA_XML
+ "" + NL
+ "--<<--";
@Test
public void testExtractingFeedFromMultipartPost() throws Exception {
byte postBytes[] = POST_BODY.getBytes(Sim.UTF8);
InputStream is = new ByteArrayInputStream(postBytes);
String found = Sim.extractFeedFromMultipartPost(is,
postBytes.length, "multipart/form-data; boundary=<<");
assertTrue(METADATA_XML.equals(found));
}
@Test
public void testExtractingUrls() throws Exception {
Set<URL> found = Sim.extractUrls(METADATA_XML);
assertEquals(3, found.size());
assertTrue(found.contains(new URL("http://urlA")));
assertTrue(found.contains(new URL("http://urlB")));
assertTrue(found.contains(new URL("http://urlC")));
}
@Test
public void testPercentDecoderSingle() {
assertEquals("" + ((char)(10)), Sim.percentDecode("%0A"));
}
@Test
public void testPercentDecoderAllBytes() {
String encoded256 =
"%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F%10%11%12%13%14%15%16"
+ "%17%18%19%1A%1B%1C%1D%1E%1F%20%21%22%23%24%25%26%27%28%29%2A%2B%2C-."
+ "%2F0123456789%3A%3B%3C%3D%3E%3F%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C"
+ "%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D~%7F%C2%80%C2%81%C2%82"
+ "%C2%83%C2%84%C2%85%C2%86%C2%87%C2%88%C2%89%C2%8A%C2%8B%C2%8C%C2%8D"
+ "%C2%8E%C2%8F%C2%90%C2%91%C2%92%C2%93%C2%94%C2%95%C2%96%C2%97%C2%98"
+ "%C2%99%C2%9A%C2%9B%C2%9C%C2%9D%C2%9E%C2%9F%C2%A0%C2%A1%C2%A2%C2%A3"
+ "%C2%A4%C2%A5%C2%A6%C2%A7%C2%A8%C2%A9%C2%AA%C2%AB%C2%AC%C2%AD%C2%AE"
+ "%C2%AF%C2%B0%C2%B1%C2%B2%C2%B3%C2%B4%C2%B5%C2%B6%C2%B7%C2%B8%C2%B9"
+ "%C2%BA%C2%BB%C2%BC%C2%BD%C2%BE%C2%BF%C3%80%C3%81%C3%82%C3%83%C3%84"
+ "%C3%85%C3%86%C3%87%C3%88%C3%89%C3%8A%C3%8B%C3%8C%C3%8D%C3%8E%C3%8F"
+ "%C3%90%C3%91%C3%92%C3%93%C3%94%C3%95%C3%96%C3%97%C3%98%C3%99%C3%9A"
+ "%C3%9B%C3%9C%C3%9D%C3%9E%C3%9F%C3%A0%C3%A1%C3%A2%C3%A3%C3%A4%C3%A5"
+ "%C3%A6%C3%A7%C3%A8%C3%A9%C3%AA%C3%AB%C3%AC%C3%AD%C3%AE%C3%AF%C3%B0"
+ "%C3%B1%C3%B2%C3%B3%C3%B4%C3%B5%C3%B6%C3%B7%C3%B8%C3%B9%C3%BA%C3%BB"
+ "%C3%BC%C3%BD%C3%BE%C3%BF";
StringBuilder decoded = new StringBuilder();
for (char c = 0; c < 256; c++) {
decoded.append(c);
}
assertEquals(decoded.toString(), Sim.percentDecode(encoded256));
}
@Test
public void testPercentDecoderUnicode() {
String decoded = Sim.percentDecode("AaZz09-_.~"
+ "%60%3D%2F%3F%2B%27%3B%5C%2F%22%21%40%23%24%25%5E%26"
+ "%2A%28%29%5B%5D%7B%7D%C3%AB%01");
assertEquals("AaZz09-_.~`=/?+';\\/\"!@#$%^&*()[]{}ë\u0001", decoded);
}
}