blob: 9a24f1c9c8597bc76c8146f12043a6e8cd9e79e5 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.hadoop.registry.client.binding;
import static org.apache.hadoop.registry.client.binding.RegistryPathUtils.*;
import java.io.IOException;
import java.util.List;
import org.apache.hadoop.fs.PathNotFoundException;
import org.apache.hadoop.registry.client.exceptions.InvalidPathnameException;
import org.junit.Assert;
import org.junit.Test;
public class TestRegistryPathUtils extends Assert {
public static final String EURO = "\u20AC";
@Test
public void testFormatAscii() throws Throwable {
String in = "hostname01101101-1";
assertConverted(in, in);
}
/*
* Euro symbol
*/
@Test
public void testFormatEuroSymbol() throws Throwable {
assertConverted("xn--lzg", EURO);
}
@Test
public void testFormatIdempotent() throws Throwable {
assertConverted("xn--lzg", RegistryPathUtils.encodeForRegistry(EURO));
}
@Test
public void testFormatCyrillicSpaced() throws Throwable {
assertConverted("xn--pa 3-k4di", "\u0413PA\u0414 3");
}
protected void assertConverted(String expected, String in) {
String out = RegistryPathUtils.encodeForRegistry(in);
assertEquals("Conversion of " + in, expected, out);
}
@Test
public void testPaths() throws Throwable {
assertCreatedPathEquals("/", "/", "");
assertCreatedPathEquals("/", "", "");
assertCreatedPathEquals("/", "", "/");
assertCreatedPathEquals("/", "/", "/");
assertCreatedPathEquals("/a", "/a", "");
assertCreatedPathEquals("/a", "/", "a");
assertCreatedPathEquals("/a/b", "/a", "b");
assertCreatedPathEquals("/a/b", "/a/", "b");
assertCreatedPathEquals("/a/b", "/a", "/b");
assertCreatedPathEquals("/a/b", "/a", "/b/");
assertCreatedPathEquals("/a", "/a", "/");
assertCreatedPathEquals("/alice", "/", "/alice");
assertCreatedPathEquals("/alice", "/alice", "/");
}
@Test
public void testComplexPaths() throws Throwable {
assertCreatedPathEquals("/", "", "");
assertCreatedPathEquals("/yarn/registry/users/hadoop/org-apache-hadoop",
"/yarn/registry",
"users/hadoop/org-apache-hadoop/");
}
private static void assertCreatedPathEquals(String expected, String base,
String path) throws IOException {
String fullPath = createFullPath(base, path);
assertEquals("\"" + base + "\" + \"" + path + "\" =\"" + fullPath + "\"",
expected, fullPath);
}
@Test
public void testSplittingEmpty() throws Throwable {
assertEquals(0, split("").size());
assertEquals(0, split("/").size());
assertEquals(0, split("///").size());
}
@Test
public void testSplitting() throws Throwable {
assertEquals(1, split("/a").size());
assertEquals(0, split("/").size());
assertEquals(3, split("/a/b/c").size());
assertEquals(3, split("/a/b/c/").size());
assertEquals(3, split("a/b/c").size());
assertEquals(3, split("/a/b//c").size());
assertEquals(3, split("//a/b/c/").size());
List<String> split = split("//a/b/c/");
assertEquals("a", split.get(0));
assertEquals("b", split.get(1));
assertEquals("c", split.get(2));
}
@Test
public void testParentOf() throws Throwable {
assertEquals("/", parentOf("/a"));
assertEquals("/", parentOf("/a/"));
assertEquals("/a", parentOf("/a/b"));
assertEquals("/a/b", parentOf("/a/b/c"));
}
@Test
public void testLastPathEntry() throws Throwable {
assertEquals("",lastPathEntry("/"));
assertEquals("",lastPathEntry("//"));
assertEquals("c",lastPathEntry("/a/b/c"));
assertEquals("c",lastPathEntry("/a/b/c/"));
}
@Test(expected = PathNotFoundException.class)
public void testParentOfRoot() throws Throwable {
parentOf("/");
}
@Test
public void testValidPaths() throws Throwable {
assertValidPath("/");
assertValidPath("/a/b/c");
assertValidPath("/users/drwho/org-apache-hadoop/registry/appid-55-55");
assertValidPath("/a50");
}
@Test
public void testInvalidPaths() throws Throwable {
assertInvalidPath("/a_b");
assertInvalidPath("/UpperAndLowerCase");
assertInvalidPath("/space in string");
// Is this valid? assertInvalidPath("/50");
}
private void assertValidPath(String path) throws InvalidPathnameException {
validateZKPath(path);
}
private void assertInvalidPath(String path) throws InvalidPathnameException {
try {
validateElementsAsDNS(path);
fail("path considered valid: " + path);
} catch (InvalidPathnameException expected) {
// expected
}
}
}