| // Copyright 2011 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; |
| |
| import static org.junit.Assert.*; |
| |
| import org.junit.*; |
| |
| import java.net.*; |
| |
| /** |
| * Test cases for {@link DocIdCodec}. |
| */ |
| public class DocIdCodecTest { |
| private URI baseUri = URI.create("http://localhost/doc/"); |
| private DocIdCodec codec = new DocIdCodec(baseUri, false); |
| |
| @Test |
| public void testPrettyUri() { |
| final URI golden = URI.create("http://localhost/doc/some/docid1"); |
| assertEquals(golden, codec.encodeDocId(new DocId("some/docid1"))); |
| } |
| |
| @Test |
| public void testRelativeDot() { |
| String docId = ".././hi/.h/"; |
| URI uri = codec.encodeDocId(new DocId(docId)); |
| String uriStr = uri.toString(); |
| assertFalse(uriStr.contains("/../")); |
| assertFalse(uriStr.contains("/./")); |
| assertTrue(uriStr.contains("/hi/.h/")); |
| assertEquals(docId, codec.decodeDocId(uri).getUniqueId()); |
| } |
| |
| @Test |
| public void testDot() { |
| String docId = "."; |
| URI uri = codec.encodeDocId(new DocId(docId)); |
| String uriStr = uri.toString(); |
| assertTrue(uriStr.contains("....")); |
| assertEquals(docId, codec.decodeDocId(uri).getUniqueId()); |
| } |
| |
| @Test |
| public void testDoubleDot() { |
| String docId = ".."; |
| URI uri = codec.encodeDocId(new DocId(docId)); |
| String uriStr = uri.toString(); |
| assertTrue(uriStr.contains(".....")); |
| assertEquals(docId, codec.decodeDocId(uri).getUniqueId()); |
| } |
| |
| @Test |
| public void testNotToBeConfusedDots() { |
| String docId = "...."; |
| URI uri = codec.encodeDocId(new DocId(docId)); |
| String uriStr = uri.toString(); |
| assertTrue(uriStr.contains(".......")); |
| assertEquals(docId, codec.decodeDocId(uri).getUniqueId()); |
| } |
| |
| @Test |
| public void testNotToBeChanged() { |
| String docId = "..safe../.h/h./..h/h.."; |
| URI uri = codec.encodeDocId(new DocId(docId)); |
| String uriStr = uri.toString(); |
| assertTrue(uriStr.contains(docId)); |
| assertEquals(docId, codec.decodeDocId(uri).getUniqueId()); |
| } |
| |
| @Test |
| public void testDoubleSlash() { |
| String docId = "//"; |
| URI uri = codec.encodeDocId(new DocId(docId)); |
| String uriStr = uri.toString(); |
| assertTrue(uriStr.contains("/.../")); |
| assertEquals(docId, codec.decodeDocId(uri).getUniqueId()); |
| } |
| |
| @Test |
| public void testDoubleSlash2() { |
| String docId = "//drop/table/now"; |
| URI uri = codec.encodeDocId(new DocId(docId)); |
| String uriStr = uri.toString(); |
| assertTrue(uriStr.contains("/.../")); |
| assertEquals(docId, codec.decodeDocId(uri).getUniqueId()); |
| } |
| |
| @Test |
| public void testDoubleSlash3() { |
| String docId = "//drop///table/now//"; |
| URI uri = codec.encodeDocId(new DocId(docId)); |
| String uriStr = uri.toString(); |
| assertTrue(uriStr.contains("/.../.../")); |
| assertTrue(uriStr.endsWith("/.../")); |
| assertEquals(docId, codec.decodeDocId(uri).getUniqueId()); |
| } |
| |
| @Test |
| public void testDoubleSlashAfterColon() { |
| String docId = "//drop///table/n:ow//"; |
| URI uri = codec.encodeDocId(new DocId(docId)); |
| String uriStr = uri.toString(); |
| assertTrue(uriStr.endsWith("/.../drop/.../.../table/n:ow/.../")); |
| assertEquals(docId, codec.decodeDocId(uri).getUniqueId()); |
| } |
| |
| @Test |
| public void testDoubleSlashAfterColon2() { |
| String docId = "//drop:///table////NOW"; |
| URI uri = codec.encodeDocId(new DocId(docId)); |
| String uriStr = uri.toString(); |
| assertTrue(uriStr.contains("p://.../t")); |
| assertFalse(uriStr.contains("////")); |
| assertEquals(docId, codec.decodeDocId(uri).getUniqueId()); |
| } |
| |
| @Test |
| public void testDoubleSlashAfterColon3() { |
| String docId = "//d:////t//://NOW://.//"; |
| URI uri = codec.encodeDocId(new DocId(docId)); |
| String uriStr = uri.toString(); |
| assertTrue(uriStr.endsWith("/.../d://.../.../t/.../://NOW://..../.../")); |
| assertEquals(docId, codec.decodeDocId(uri).getUniqueId()); |
| } |
| |
| @Test |
| public void testIndexEscaping() { |
| String docId = "index.html"; |
| URI uri = codec.encodeDocId(new DocId(docId)); |
| String uriStr = uri.toString(); |
| assertTrue(uriStr.endsWith("/_index.html")); |
| assertEquals(docId, codec.decodeDocId(uri).getUniqueId()); |
| } |
| |
| @Test |
| public void testIndexEscaping2() { |
| String docId = "index.htm"; |
| URI uri = codec.encodeDocId(new DocId(docId)); |
| String uriStr = uri.toString(); |
| assertTrue(uriStr.endsWith("/_index.htm")); |
| assertEquals(docId, codec.decodeDocId(uri).getUniqueId()); |
| } |
| |
| @Test |
| public void testIndexEscaping3() { |
| String docId = "__index.html"; |
| URI uri = codec.encodeDocId(new DocId(docId)); |
| String uriStr = uri.toString(); |
| assertTrue(uriStr.endsWith("/___index.html")); |
| assertEquals(docId, codec.decodeDocId(uri).getUniqueId()); |
| } |
| |
| @Test |
| public void testIndexEscaping4() { |
| String docId = "____index.htm"; |
| URI uri = codec.encodeDocId(new DocId(docId)); |
| String uriStr = uri.toString(); |
| assertTrue(uriStr.endsWith("/_____index.htm")); |
| assertEquals(docId, codec.decodeDocId(uri).getUniqueId()); |
| } |
| |
| @Test |
| public void testIndexEscaping5() { |
| String docId = "ooga//____index.htm"; |
| URI uri = codec.encodeDocId(new DocId(docId)); |
| String uriStr = uri.toString(); |
| assertTrue(uriStr.endsWith("ooga/.../_____index.htm")); |
| assertEquals(docId, codec.decodeDocId(uri).getUniqueId()); |
| } |
| |
| @Test |
| public void testIndexEscaping6() { |
| String docId = "index.htm/"; |
| URI uri = codec.encodeDocId(new DocId(docId)); |
| String uriStr = uri.toString(); |
| assertTrue(uriStr.endsWith("/index.htm/")); |
| assertEquals(docId, codec.decodeDocId(uri).getUniqueId()); |
| } |
| |
| private void decodeAndEncode(String id) { |
| URI uri = codec.encodeDocId(new DocId(id)); |
| assertEquals(id, codec.decodeDocId(uri).getUniqueId()); |
| } |
| |
| @Test |
| public void testAssortedNonDotIds() { |
| decodeAndEncode("simple-id"); |
| decodeAndEncode("harder-id/"); |
| decodeAndEncode("harder-id/./"); |
| decodeAndEncode(""); |
| decodeAndEncode(" "); |
| decodeAndEncode(" \n\t "); |
| decodeAndEncode("/"); |
| decodeAndEncode("drop/table/now"); |
| decodeAndEncode("/drop/table/now"); |
| } |
| |
| @Test |
| public void testDocIdIsUrl() throws Exception { |
| final String docIdStr = "https://something:12/somewhere"; |
| final DocId docId = new DocId(docIdStr); |
| final URI uri = new URI(docIdStr); |
| |
| codec = new DocIdCodec(baseUri, true); |
| assertEquals(uri, codec.encodeDocId(docId)); |
| assertEquals(docId, codec.decodeDocId(uri)); |
| } |
| } |