/** * Performs client path validations. * * @throws IllegalArgumentException * if an invalid path is specified * @throws KeeperException.BadArgumentsException * if an invalid create mode flag is specified */ void validate() throws KeeperException { PathUtils.validatePath(path); }
/** validate the provided znode path string * @param path znode path string * @param isSequential if the path is being created * with a sequential flag * @throws IllegalArgumentException if the path is invalid */ public static void validatePath(String path, boolean isSequential) throws IllegalArgumentException { validatePath(isSequential? path + "1": path); }
private void validatePath(String path, long sessionId) throws BadArgumentsException { try { PathUtils.validatePath(path); } catch(IllegalArgumentException ie) { LOG.info("Invalid path {} with session 0x{}, reason: {}", path, Long.toHexString(sessionId), ie.getMessage()); throw new BadArgumentsException(path); } }
@Test public void testValidatePath_0x7e() { // The last valid ASCII character PathUtils.validatePath("/test\u007e"); }
@Test public void testValidatePath_NameContainingPeriod() { // A period that isn't on its own is ok PathUtils.validatePath("/name/with.period."); }
@Test public void testValidatePath_ValidPath() { PathUtils.validatePath("/this is / a valid/path"); }
@Test(expected=IllegalArgumentException.class) public void testValidatePath_Null() { PathUtils.validatePath(null); }
@Test(expected=IllegalArgumentException.class) public void testValidatePath_NotAbsolutePath() { PathUtils.validatePath("not/valid"); }
@Test(expected=IllegalArgumentException.class) public void testValidatePath_0x1F() { PathUtils.validatePath("/test\u001F"); }
@Test(expected=IllegalArgumentException.class) public void testValidatePath_ud800() { PathUtils.validatePath("/test\ud800"); }
@Test(expected=IllegalArgumentException.class) public void testValidatePath_SupplementaryChar() { PathUtils.validatePath("/test\ufff0"); }
@Test(expected=IllegalArgumentException.class) public void testValidatePath_EmptyString() { PathUtils.validatePath(""); }
@Test(expected=IllegalArgumentException.class) public void testValidatePath_ContainsNullCharacter() { PathUtils.validatePath("/test\u0000"); }
@Test(expected=IllegalArgumentException.class) public void testValidatePath_0x9f() { PathUtils.validatePath("/test\u009f"); }
@Test // The first allowable character public void testValidatePath_0x20() { PathUtils.validatePath("/test\u0020"); }
@Test(expected=IllegalArgumentException.class) public void testValidatePath_0x7f() { PathUtils.validatePath("/test\u007f"); }
@Test(expected=IllegalArgumentException.class) public void testValidatePath_DoublePeriod() { PathUtils.validatePath("/double/../period"); }
@Test(expected=IllegalArgumentException.class) public void testValidatePath_uf8ff() { PathUtils.validatePath("/test\uf8ff"); }
@Override void validate() throws KeeperException { CreateMode createMode = CreateMode.fromFlag(flags); PathUtils.validatePath(getPath(), createMode.isSequential()); EphemeralType.validateTTL(createMode, ttl); } }
@Override void validate() throws KeeperException { CreateMode createMode = CreateMode.fromFlag(flags); PathUtils.validatePath(getPath(), createMode.isSequential()); EphemeralType.validateTTL(createMode, -1); } }