blob: 5492adacb37f18ff85736666adb70628a5071f7e [file] [log] [blame]
// 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 adaptorlib;
import static org.junit.Assert.*;
import org.junit.*;
import java.net.*;
/**
* Test cases for {@link DocIdCodec}.
*/
public class DocIdCodecTest {
private Config config = new Config();
private DocIdCodec codec = new DocIdCodec(config);
@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());
}
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("harder-id///&?///");
decodeAndEncode("");
decodeAndEncode(" ");
decodeAndEncode(" \n\t ");
decodeAndEncode("/");
decodeAndEncode("//");
decodeAndEncode("drop/table/now");
decodeAndEncode("/drop/table/now");
decodeAndEncode("//drop/table/now");
decodeAndEncode("//d&op/t+b+e/n*w");
}
@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);
config.setValue("docId.isUrl", "true");
assertEquals(uri, codec.encodeDocId(docId));
assertEquals(docId, codec.decodeDocId(uri));
}
}