HADOOP-9437. TestNativeIO#testRenameTo fails on Windows due to assumption that POSIX errno is embedded in NativeIOException. Contributed by Chris Nauroth.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1466306 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Suresh Srinivas 2013-04-10 00:45:47 +00:00
parent f0351527d5
commit 2b19054c92
3 changed files with 36 additions and 2 deletions

View File

@ -506,6 +506,10 @@ Trunk (Unreleased)
HADOOP-9353. Activate native-win maven profile by default on Windows. HADOOP-9353. Activate native-win maven profile by default on Windows.
(Arpit Agarwal via szetszwo) (Arpit Agarwal via szetszwo)
HADOOP-9437. TestNativeIO#testRenameTo fails on Windows due to assumption
that POSIX errno is embedded in NativeIOException. (Chris Nauroth via
suresh)
Release 2.0.5-beta - UNRELEASED Release 2.0.5-beta - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -816,6 +816,7 @@ JNIEXPORT void JNICALL
Java_org_apache_hadoop_io_nativeio_NativeIO_renameTo0(JNIEnv *env, Java_org_apache_hadoop_io_nativeio_NativeIO_renameTo0(JNIEnv *env,
jclass clazz, jstring jsrc, jstring jdst) jclass clazz, jstring jsrc, jstring jdst)
{ {
#ifdef UNIX
const char *src = NULL, *dst = NULL; const char *src = NULL, *dst = NULL;
src = (*env)->GetStringUTFChars(env, jsrc, NULL); src = (*env)->GetStringUTFChars(env, jsrc, NULL);
@ -829,6 +830,23 @@ jclass clazz, jstring jsrc, jstring jdst)
done: done:
if (src) (*env)->ReleaseStringUTFChars(env, jsrc, src); if (src) (*env)->ReleaseStringUTFChars(env, jsrc, src);
if (dst) (*env)->ReleaseStringUTFChars(env, jdst, dst); if (dst) (*env)->ReleaseStringUTFChars(env, jdst, dst);
#endif
#ifdef WINDOWS
LPCWSTR src = NULL, dst = NULL;
src = (LPCWSTR) (*env)->GetStringChars(env, jsrc, NULL);
if (!src) goto done; // exception was thrown
dst = (LPCWSTR) (*env)->GetStringChars(env, jdst, NULL);
if (!dst) goto done; // exception was thrown
if (!MoveFile(src, dst)) {
throw_ioe(env, GetLastError());
}
done:
if (src) (*env)->ReleaseStringChars(env, jsrc, src);
if (dst) (*env)->ReleaseStringChars(env, jdst, dst);
#endif
} }
/** /**

View File

@ -446,7 +446,13 @@ public void testRenameTo() throws Exception {
NativeIO.renameTo(nonExistentFile, targetFile); NativeIO.renameTo(nonExistentFile, targetFile);
Assert.fail(); Assert.fail();
} catch (NativeIOException e) { } catch (NativeIOException e) {
Assert.assertEquals(e.getErrno(), Errno.ENOENT); if (Path.WINDOWS) {
Assert.assertEquals(
String.format("The system cannot find the file specified.%n"),
e.getMessage());
} else {
Assert.assertEquals(Errno.ENOENT, e.getErrno());
}
} }
// Test renaming a file to itself. It should succeed and do nothing. // Test renaming a file to itself. It should succeed and do nothing.
@ -465,7 +471,13 @@ public void testRenameTo() throws Exception {
NativeIO.renameTo(sourceFile, badTarget); NativeIO.renameTo(sourceFile, badTarget);
Assert.fail(); Assert.fail();
} catch (NativeIOException e) { } catch (NativeIOException e) {
Assert.assertEquals(e.getErrno(), Errno.ENOTDIR); if (Path.WINDOWS) {
Assert.assertEquals(
String.format("The parameter is incorrect.%n"),
e.getMessage());
} else {
Assert.assertEquals(Errno.ENOTDIR, e.getErrno());
}
} }
FileUtils.deleteQuietly(TEST_DIR); FileUtils.deleteQuietly(TEST_DIR);