Я собираю Apache Flink из исходного кода, используя Gitlab CI с изображением java:8u111-jdk
, и обнаружил, что тесты разрешений для файлов не прошли, потому что разрешения для файлов не соблюдаются.
Один из модульных тестов выглядит так:
@Test
public void testDeleteDirectory() throws Exception {
// deleting a non-existent file should not cause an error
File doesNotExist = new File(tmp.newFolder(), "abc");
FileUtils.deleteDirectory(doesNotExist);
// deleting a write protected file should throw an error
File cannotDeleteParent = tmp.newFolder();
File cannotDeleteChild = new File(cannotDeleteParent, "child");
try {
assumeTrue(cannotDeleteChild.createNewFile());
assumeTrue(cannotDeleteParent.setWritable(false));
assumeTrue(cannotDeleteChild.setWritable(false));
FileUtils.deleteDirectory(cannotDeleteParent);
fail("this should fail with an exception");
}
catch (AccessDeniedException ignored) {
// this is expected
}
finally {
//noinspection ResultOfMethodCallIgnored
cannotDeleteParent.setWritable(true);
//noinspection ResultOfMethodCallIgnored
cannotDeleteChild.setWritable(true);
}
}
И результат теста:
testDeleteDirectory(org.apache.flink.util.FileUtilsTest) Time elapsed: 0.022 sec <<< FAILURE!
java.lang.AssertionError: this should fail with an exception
at org.junit.Assert.fail(Assert.java:88)
at org.apache.flink.util.FileUtilsTest.testDeleteDirectory(FileUtilsTest.java:129)
Когда я углубился в коды, я нашел следующие утверждения в java.io.File
:
На некоторых платформах может быть возможно запустить виртуальную машину Java со специальными привилегиями, которые позволяют ей изменять файлы, которые запрещают операции записи.
Так что я подозреваю, что что-то не так со средой CI.Как я могу далее отладить проблему?Спасибо!
Среда:
- Образ докера: java: 8u111-jdk
- Ядро ОС: Linux 4.9.0-8-amd64 x86_64
- дистрибутив: Debian 8
- JDK-версия: openjdk 1.8.0_111