Skip to content

Commit a32e20d

Browse files
committed
close context and vfs instances used in tests
1 parent 51a3e3a commit a32e20d

File tree

2 files changed

+135
-108
lines changed

2 files changed

+135
-108
lines changed

graalpython/com.oracle.graal.python.test.integration/src/org/graalvm/python/embedding/utils/test/integration/VirtualFileSystemIntegrationTest.java

Lines changed: 91 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -87,31 +87,30 @@ public VirtualFileSystemIntegrationTest() {
8787
}
8888

8989
@Test
90-
public void defaultValues() {
91-
VirtualFileSystem fs = VirtualFileSystem.create();
92-
VirtualFileSystem fs2 = VirtualFileSystem.create();
93-
94-
assertEquals(fs.getMountPoint(), fs2.getMountPoint());
95-
96-
assertEquals(IS_WINDOWS ? "X:\\graalpy_vfs" : "/graalpy_vfs", fs.getMountPoint());
90+
public void defaultValues() throws IOException {
91+
try (VirtualFileSystem fs = VirtualFileSystem.create(); VirtualFileSystem fs2 = VirtualFileSystem.create()) {
92+
assertEquals(fs.getMountPoint(), fs2.getMountPoint());
93+
assertEquals(IS_WINDOWS ? "X:\\graalpy_vfs" : "/graalpy_vfs", fs.getMountPoint());
94+
}
9795
}
9896

9997
@Test
100-
public void mountPoints() {
101-
VirtualFileSystem fs = VirtualFileSystem.newBuilder().//
98+
public void mountPoints() throws IOException {
99+
try (VirtualFileSystem vfs = VirtualFileSystem.newBuilder().//
102100
unixMountPoint(VFS_UNIX_MOUNT_POINT).//
103-
windowsMountPoint(VFS_WIN_MOUNT_POINT).build();
104-
105-
assertEquals(VFS_MOUNT_POINT, fs.getMountPoint());
101+
windowsMountPoint(VFS_WIN_MOUNT_POINT).build()) {
102+
assertEquals(VFS_MOUNT_POINT, vfs.getMountPoint());
103+
}
106104

107105
String multiPathUnixMountPoint = "/test/mount/point";
108106
String multiPathWinMountPoint = "X:\\test\\win\\mount\\point";
109107
VirtualFileSystem vfs = VirtualFileSystem.newBuilder().//
110108
unixMountPoint(multiPathUnixMountPoint).//
111109
windowsMountPoint(multiPathWinMountPoint).//
112110
resourceLoadingClass(VirtualFileSystemIntegrationTest.class).build();
113-
Context ctx = addTestOptions(GraalPyResources.contextBuilder(vfs)).build();
114-
ctx.eval(PYTHON, "from os import listdir; listdir('" + (IS_WINDOWS ? multiPathWinMountPoint.replace("\\", "\\\\") : multiPathUnixMountPoint) + "')");
111+
try (Context ctx = addTestOptions(GraalPyResources.contextBuilder(vfs)).build()) {
112+
ctx.eval(PYTHON, "from os import listdir; listdir('" + (IS_WINDOWS ? multiPathWinMountPoint.replace("\\", "\\\\") : multiPathUnixMountPoint) + "')");
113+
}
115114
}
116115

117116
private static void checkExtractedFile(Path extractedFile, String[] expectedContens) throws IOException {
@@ -144,10 +143,12 @@ private static void checkException(Class<?> exType, Callable<Object> c, String m
144143

145144
@Test
146145
public void fsOperations() {
147-
Context ctx = createContext(null, null);
148-
fsOperations(ctx, "/test_mount_point/");
149-
ctx = createContext(null, b -> b.currentWorkingDirectory(Path.of(VFS_MOUNT_POINT)));
150-
fsOperations(ctx, "");
146+
try (Context ctx = createContext(null, null)) {
147+
fsOperations(ctx, "/test_mount_point/");
148+
}
149+
try (Context ctx = createContext(null, b -> b.currentWorkingDirectory(Path.of(VFS_MOUNT_POINT)))) {
150+
fsOperations(ctx, "");
151+
}
151152
}
152153

153154
public void fsOperations(Context ctx, String pathPrefix) {
@@ -392,26 +393,28 @@ assert len(l) == 0, 'expect 0 lines from empty file, got ' + str(len(l))
392393

393394
@Test
394395
public void osChdir() {
395-
Context ctx = createContext(null, null);
396-
// os.path.exists
397-
eval(ctx, """
398-
import os
399-
assert not os.path.exists('file1')
400-
os.chdir('/test_mount_point')
401-
assert os.path.exists('file1')
402-
""");
396+
try (Context ctx = createContext(null, null)) {
397+
// os.path.exists
398+
eval(ctx, """
399+
import os
400+
assert not os.path.exists('file1')
401+
os.chdir('/test_mount_point')
402+
assert os.path.exists('file1')
403+
""");
404+
}
403405
}
404406

405407
@Test
406408
public void fsOperationsCaseInsensitive() {
407-
Context ctx = createContext(b -> b.caseInsensitive(true), null);
408-
eval(ctx, """
409-
import os
410-
assert os.path.exists('/test_mount_point/SomeFile')
411-
assert os.path.exists('/test_mount_point/someFile')
412-
assert os.path.exists('/test_mount_point/somefile')
413-
assert not os.path.exists('/test_mount_point/somefile1')
414-
""");
409+
try (Context ctx = createContext(b -> b.caseInsensitive(true), null)) {
410+
eval(ctx, """
411+
import os
412+
assert os.path.exists('/test_mount_point/SomeFile')
413+
assert os.path.exists('/test_mount_point/someFile')
414+
assert os.path.exists('/test_mount_point/somefile')
415+
assert not os.path.exists('/test_mount_point/somefile1')
416+
""");
417+
}
415418
}
416419

417420
private static void eval(Context ctx, String s, String pathPrefix) {
@@ -449,48 +452,50 @@ public Context createContext(Function<VirtualFileSystem.Builder, VirtualFileSyst
449452

450453
@Test
451454
public void vfsBuilderTest() {
452-
Context context = addTestOptions(GraalPyResources.contextBuilder()).allowAllAccess(true).allowHostAccess(HostAccess.ALL).build();
453-
context.eval(PYTHON, "import java; java.type('java.lang.String')");
454-
455-
context = addTestOptions(GraalPyResources.contextBuilder()).allowAllAccess(false).allowHostAccess(HostAccess.NONE).build();
456-
context.eval(PYTHON, """
457-
import java
458-
try:
459-
java.type('java.lang.String');
460-
except NotImplementedError:
461-
pass
462-
else:
463-
assert False, 'expected NotImplementedError'
464-
""");
455+
try (Context context = addTestOptions(GraalPyResources.contextBuilder()).allowAllAccess(true).allowHostAccess(HostAccess.ALL).build()) {
456+
context.eval(PYTHON, "import java; java.type('java.lang.String')");
457+
}
465458

459+
try (Context context = addTestOptions(GraalPyResources.contextBuilder()).allowAllAccess(false).allowHostAccess(HostAccess.NONE).build()) {
460+
context.eval(PYTHON, """
461+
import java
462+
try:
463+
java.type('java.lang.String');
464+
except NotImplementedError:
465+
pass
466+
else:
467+
assert False, 'expected NotImplementedError'
468+
""");
469+
}
466470
VirtualFileSystem fs = VirtualFileSystem.newBuilder().//
467471
unixMountPoint(VFS_MOUNT_POINT).//
468472
windowsMountPoint(VFS_WIN_MOUNT_POINT).//
469473
resourceLoadingClass(VirtualFileSystemIntegrationTest.class).build();
470-
context = addTestOptions(GraalPyResources.contextBuilder(fs)).build();
471-
context.eval(PYTHON, patchMountPoint("from os import listdir; listdir('/test_mount_point')"));
472-
473-
context = GraalPyResources.createContext();
474-
context.eval(PYTHON, "from os import listdir; listdir('.')");
474+
try (Context context = addTestOptions(GraalPyResources.contextBuilder(fs)).build()) {
475+
context.eval(PYTHON, patchMountPoint("from os import listdir; listdir('/test_mount_point')"));
476+
}
475477

476-
context = addTestOptions(GraalPyResources.contextBuilder()).allowIO(IOAccess.NONE).build();
477-
boolean gotPE = false;
478-
try {
478+
try (Context context = GraalPyResources.createContext()) {
479479
context.eval(PYTHON, "from os import listdir; listdir('.')");
480-
} catch (PolyglotException pe) {
481-
gotPE = true;
482480
}
483-
assert gotPE : "expected PolyglotException";
481+
try (Context context = addTestOptions(GraalPyResources.contextBuilder()).allowIO(IOAccess.NONE).build()) {
482+
boolean gotPE = false;
483+
try {
484+
context.eval(PYTHON, "from os import listdir; listdir('.')");
485+
} catch (PolyglotException pe) {
486+
gotPE = true;
487+
}
488+
assert gotPE : "expected PolyglotException";
489+
}
484490
}
485491

486492
@Test
487493
public void externalResourcesBuilderTest() throws IOException {
488-
VirtualFileSystem fs = VirtualFileSystem.newBuilder().resourceLoadingClass(VirtualFileSystemIntegrationTest.class).build();
489494
Path resourcesDir = Files.createTempDirectory("vfs-test-resources");
490-
491-
// extract VFS
492-
GraalPyResources.extractVirtualFileSystemResources(fs, resourcesDir);
493-
495+
try (VirtualFileSystem fs = VirtualFileSystem.newBuilder().resourceLoadingClass(VirtualFileSystemIntegrationTest.class).build()) {
496+
// extract VFS
497+
GraalPyResources.extractVirtualFileSystemResources(fs, resourcesDir);
498+
}
494499
// check extracted contents
495500
InputStream stream = VirtualFileSystemIntegrationTest.class.getResourceAsStream("/org.graalvm.python.vfs/fileslist.txt");
496501
BufferedReader br = new BufferedReader(new InputStreamReader(stream));
@@ -535,30 +540,37 @@ public void vfsMountPointTest() {
535540
@SuppressWarnings("unchecked")
536541
@Test
537542
public void pythonPathsTest() throws IOException {
538-
Context ctx = GraalPyResources.createContext();
539-
String getPathsSource = "import sys; [__graalpython__.get_python_home_paths(), sys.path, sys.executable]";
543+
String defaultMountPoint;
544+
try (VirtualFileSystem vfs = VirtualFileSystem.newBuilder().build()) {
545+
defaultMountPoint = vfs.getMountPoint();
546+
}
540547

541-
Value paths = ctx.eval("python", getPathsSource);
542-
String defaultMountPoint = VirtualFileSystem.newBuilder().build().getMountPoint();
543-
assertEquals(IS_WINDOWS ? "X:\\graalpy_vfs" : "/graalpy_vfs", defaultMountPoint);
544-
checkPaths(paths.as(List.class), defaultMountPoint);
548+
String getPathsSource = "import sys; [__graalpython__.get_python_home_paths(), sys.path, sys.executable]";
549+
try (Context ctx = GraalPyResources.createContext()) {
550+
Value paths = ctx.eval("python", getPathsSource);
545551

546-
ctx = GraalPyResources.contextBuilder().build();
547-
paths = ctx.eval("python", getPathsSource);
548-
checkPaths(paths.as(List.class), defaultMountPoint);
552+
assertEquals(IS_WINDOWS ? "X:\\graalpy_vfs" : "/graalpy_vfs", defaultMountPoint);
553+
checkPaths(paths.as(List.class), defaultMountPoint);
554+
}
549555

556+
try (Context ctx = GraalPyResources.contextBuilder().build()) {
557+
Value paths = ctx.eval("python", getPathsSource);
558+
checkPaths(paths.as(List.class), defaultMountPoint);
559+
}
550560
VirtualFileSystem vfs = VirtualFileSystem.newBuilder().//
551561
unixMountPoint(VFS_UNIX_MOUNT_POINT).//
552562
windowsMountPoint(VFS_WIN_MOUNT_POINT).build();
553563
assertEquals(VFS_MOUNT_POINT, vfs.getMountPoint());
554-
ctx = GraalPyResources.contextBuilder(vfs).build();
555-
paths = ctx.eval("python", getPathsSource);
556-
checkPaths(paths.as(List.class), vfs.getMountPoint(), true);
557-
564+
try (Context ctx = GraalPyResources.contextBuilder(vfs).build()) {
565+
Value paths = ctx.eval("python", getPathsSource);
566+
checkPaths(paths.as(List.class), vfs.getMountPoint(), true);
567+
}
558568
Path resourcesDir = Files.createTempDirectory("python-resources");
559-
ctx = GraalPyResources.contextBuilder(resourcesDir).build();
560-
paths = ctx.eval("python", getPathsSource);
561-
checkPaths(paths.as(List.class), resourcesDir.toString());
569+
570+
try (Context ctx = GraalPyResources.contextBuilder(resourcesDir).build()) {
571+
Value paths = ctx.eval("python", getPathsSource);
572+
checkPaths(paths.as(List.class), resourcesDir.toString());
573+
}
562574
}
563575

564576
private static void checkPaths(List<Object> l, String pathPrefix) {

graalpython/com.oracle.graal.python.test/src/org/graalvm/python/embedding/utils/test/VirtualFileSystemTest.java

Lines changed: 44 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,9 @@
4343

4444
import org.graalvm.polyglot.io.FileSystem;
4545
import org.graalvm.python.embedding.utils.VirtualFileSystem;
46+
import org.junit.After;
4647
import org.junit.Assert;
48+
import org.junit.Before;
4749
import org.junit.Test;
4850

4951
import java.io.File;
@@ -94,9 +96,9 @@ public class VirtualFileSystemTest {
9496
static final String VFS_SRC = VFS_ROOT + "src" + File.separator;
9597
private static final Path VFS_ROOT_PATH = Path.of(VFS_ROOT);
9698

97-
private final FileSystem rwHostIOVFS;
98-
private final FileSystem rHostIOVFS;
99-
private final FileSystem noHostIOVFS;
99+
private FileSystem rwHostIOVFS;
100+
private FileSystem rHostIOVFS;
101+
private FileSystem noHostIOVFS;
100102

101103
private static FileSystem getVFSImpl(VirtualFileSystem vfs) throws NoSuchFieldException, IllegalAccessException {
102104
Field impl = vfs.getClass().getDeclaredField("impl");
@@ -110,7 +112,10 @@ public VirtualFileSystemTest() throws NoSuchFieldException, IllegalAccessExcepti
110112
handler.setLevel(Level.FINE);
111113
}
112114
logger.setLevel(Level.FINE);
115+
}
113116

117+
@Before
118+
public void initFS() throws Exception {
114119
rwHostIOVFS = getVFSImpl(VirtualFileSystem.newBuilder().//
115120
allowHostIO(READ_WRITE).//
116121
unixMountPoint(VFS_UNIX_MOUNT_POINT).//
@@ -129,7 +134,13 @@ public VirtualFileSystemTest() throws NoSuchFieldException, IllegalAccessExcepti
129134
windowsMountPoint(VFS_WIN_MOUNT_POINT).//
130135
extractFilter(p -> p.getFileName().toString().equals("extractme")).//
131136
resourceLoadingClass(VirtualFileSystemTest.class).build());
137+
}
132138

139+
@After
140+
public void close() throws Exception {
141+
((AutoCloseable) rwHostIOVFS).close();
142+
((AutoCloseable) rHostIOVFS).close();
143+
((AutoCloseable) noHostIOVFS).close();
133144
}
134145

135146
@Test
@@ -573,26 +584,28 @@ public void readAttributesVFS(FileSystem fs, String pathPrefix) throws IOExcepti
573584
}
574585

575586
@Test
576-
public void libsExtract() throws Exception {
577-
FileSystem fs = getVFSImpl(VirtualFileSystem.newBuilder().//
587+
public void libsExtract() throws Exception, InterruptedException {
588+
try (VirtualFileSystem vfs = VirtualFileSystem.newBuilder().//
578589
unixMountPoint(VFS_MOUNT_POINT).//
579590
windowsMountPoint(VFS_WIN_MOUNT_POINT).//
580591
extractFilter(p -> p.getFileName().toString().endsWith(".tso")).//
581-
resourceLoadingClass(VirtualFileSystemTest.class).build());
582-
Path p = fs.toRealPath(VFS_ROOT_PATH.resolve("site-packages/testpkg/file.tso"));
583-
checkExtractedFile(p, null);
584-
Path extractedRoot = p.getParent().getParent().getParent();
592+
resourceLoadingClass(VirtualFileSystemTest.class).build()) {
593+
FileSystem fs = getVFSImpl(vfs);
594+
Path p = fs.toRealPath(VFS_ROOT_PATH.resolve("site-packages/testpkg/file.tso"));
595+
checkExtractedFile(p, null);
596+
Path extractedRoot = p.getParent().getParent().getParent();
585597

586-
checkExtractedFile(extractedRoot.resolve("site-packages/testpkg.libs/file1.tso"), null);
587-
checkExtractedFile(extractedRoot.resolve("site-packages/testpkg.libs/file2.tso"), null);
588-
checkExtractedFile(extractedRoot.resolve("site-packages/testpkg.libs/dir/file1.tso"), null);
589-
checkExtractedFile(extractedRoot.resolve("site-packages/testpkg.libs/dir/file2.tso"), null);
590-
checkExtractedFile(extractedRoot.resolve("site-packages/testpkg.libs/dir/nofilterfile"), null);
591-
checkExtractedFile(extractedRoot.resolve("site-packages/testpkg.libs/dir/dir/file1.tso"), null);
592-
checkExtractedFile(extractedRoot.resolve("site-packages/testpkg.libs/dir/dir/file2.tso"), null);
598+
checkExtractedFile(extractedRoot.resolve("site-packages/testpkg.libs/file1.tso"), null);
599+
checkExtractedFile(extractedRoot.resolve("site-packages/testpkg.libs/file2.tso"), null);
600+
checkExtractedFile(extractedRoot.resolve("site-packages/testpkg.libs/dir/file1.tso"), null);
601+
checkExtractedFile(extractedRoot.resolve("site-packages/testpkg.libs/dir/file2.tso"), null);
602+
checkExtractedFile(extractedRoot.resolve("site-packages/testpkg.libs/dir/nofilterfile"), null);
603+
checkExtractedFile(extractedRoot.resolve("site-packages/testpkg.libs/dir/dir/file1.tso"), null);
604+
checkExtractedFile(extractedRoot.resolve("site-packages/testpkg.libs/dir/dir/file2.tso"), null);
593605

594-
p = fs.toRealPath(VFS_ROOT_PATH.resolve("site-packages/testpkg-nolibs/file.tso"));
595-
checkExtractedFile(p, null);
606+
p = fs.toRealPath(VFS_ROOT_PATH.resolve("site-packages/testpkg-nolibs/file.tso"));
607+
checkExtractedFile(p, null);
608+
}
596609
}
597610

598611
private static void checkExtractedFile(Path extractedFile, String[] expectedContens) throws IOException {
@@ -610,22 +623,21 @@ private static void checkExtractedFile(Path extractedFile, String[] expectedCont
610623

611624
@Test
612625
public void noExtractFilter() throws Exception {
613-
FileSystem fs = getVFSImpl(VirtualFileSystem.newBuilder().//
626+
try (VirtualFileSystem vfs = VirtualFileSystem.newBuilder().//
614627
unixMountPoint(VFS_MOUNT_POINT).//
615628
windowsMountPoint(VFS_WIN_MOUNT_POINT).//
616629
extractFilter(null).//
617-
resourceLoadingClass(VirtualFileSystemTest.class).build());
618-
checkNotExtracted(fs, VFS_ROOT_PATH);
630+
resourceLoadingClass(VirtualFileSystemTest.class).build()) {
631+
FileSystem fs = getVFSImpl(vfs);
632+
checkNotExtracted(fs, VFS_ROOT_PATH);
633+
}
619634
}
620635

621636
private void checkNotExtracted(FileSystem fs, Path dir) throws IOException {
622637
DirectoryStream<Path> ds = fs.newDirectoryStream(dir, (p) -> true);
623638
Iterator<Path> it = ds.iterator();
624639
while (it.hasNext()) {
625640
Path p = it.next();
626-
627-
System.out.println("+++ " + p + " " + fs.readAttributes(p, "isDirectory").get("isDirectory"));
628-
629641
assertTrue(p.toString().startsWith(VFS_ROOT));
630642
fs.readAttributes(p, "isDirectory");
631643
if (Boolean.TRUE.equals((fs.readAttributes(p, "isDirectory").get("isDirectory")))) {
@@ -890,7 +902,7 @@ public void copy() throws Exception {
890902
}
891903

892904
@Test
893-
public void testImpl() throws NoSuchFieldException, IllegalAccessException {
905+
public void testImpl() throws Exception {
894906
Set<String> ignored = Set.of(
895907
"allowInternalResourceAccess",
896908
"allowLanguageHomeAccess",
@@ -901,10 +913,13 @@ public void testImpl() throws NoSuchFieldException, IllegalAccessException {
901913
"getSeparator",
902914
"getPathSeparator");
903915
Set<String> implementedMethods = new HashSet<>();
904-
Class<?> vfsClass = getVFSImpl(VirtualFileSystem.create()).getClass();
905-
for (Method m : vfsClass.getDeclaredMethods()) {
906-
if ((m.getModifiers() & Modifier.PUBLIC) != 0) {
907-
implementedMethods.add(m.getName());
916+
Class<?> vfsClass;
917+
try (VirtualFileSystem vfs = VirtualFileSystem.create()) {
918+
vfsClass = getVFSImpl(vfs).getClass();
919+
for (Method m : vfsClass.getDeclaredMethods()) {
920+
if ((m.getModifiers() & Modifier.PUBLIC) != 0) {
921+
implementedMethods.add(m.getName());
922+
}
908923
}
909924
}
910925

0 commit comments

Comments
 (0)