package org.elasticsearch.hadoop.util.encoding;
import org.junit.Test;
import java.util.Arrays;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.Matchers.containsInAnyOrder;
import static org.junit.Assert.assertThat;
public class HttpEncodingToolsTest {
@Test
public void encodeUri() throws Exception {
assertThat(HttpEncodingTools.encodeUri("http://127.0.0.1:9200/tést/typé/_search?x=x;x&y=y:¥&z=z|Ω"),
is("http://127.0.0.1:9200/t%C3%A9st/typ%C3%A9/_search?x=x;x&y=y:%C2%A5&z=z%7C%CE%A9"));
}
@Test
public void encodePath() throws Exception {
assertThat(HttpEncodingTools.encodePath(""),
is(""));
assertThat(HttpEncodingTools.encodePath("/a"),
is("/a"));
assertThat(HttpEncodingTools.encodePath("/a/b"),
is("/a/b"));
assertThat(HttpEncodingTools.encodePath("/a/b/_c"),
is("/a/b/_c"));
assertThat(HttpEncodingTools.encodePath("/å∫ç∂/˚¬µñøπœ/_search"),
is("/%C3%A5%E2%88%AB%C3%A7%E2%88%82/%CB%9A%C2%AC%C2%B5%C3%B1%C3%B8%CF%80%C5%93/_search"));
}
@Test
public void encode() throws Exception {
assertThat(HttpEncodingTools.encode("?x=x&y=y|¥&z=Ω"),
is("%3Fx%3Dx%26y%3Dy%7C%C2%A5%26z%3D%CE%A9"));
}
@Test
public void decode() throws Exception {
assertThat(HttpEncodingTools.decode("http://127.0.0.1:9200/%C3%A5%E2%88%AB%C3%A7%E2%88%82/%CB%9A%C2%AC%C2%B5%C3%B1%C3%B8%CF%80%C5%93/_search?x=x&y=y%7C%C2%A5&z=%CE%A9"),
is("http://127.0.0.1:9200/å∫ç∂/˚¬µñøπœ/_search?x=x&y=y|¥&z=Ω"));
}
@Test
public void testMultiAmpersandEscapeSimple() {
assertThat(HttpEncodingTools.concatenateAndUriEncode(Arrays.asList("&a", "$b", "#c", "!d", "/e", ":f"), ","),
is("%26a,%24b,%23c,%21d,%2Fe,%3Af"));
}
@Test
public void tokenizeAndUriDecode() throws Exception {
assertThat(HttpEncodingTools.tokenizeAndUriDecode("%26a,%24b,%23c,%21d,%2Fe,%3Af",","),
containsInAnyOrder("&a", "$b", "#c", "!d", "/e", ":f"));
}
@Test
public void testSingleAmpersandEscape() {
String uri = HttpEncodingTools.encode("&c");
assertThat(uri, is("%26c"));
}
@Test
public void testEscapePercent() {
String uri = HttpEncodingTools.encode("%s");
assertThat(uri, is("%25s"));
}
}