From f2f8d5a91cfd5e68872a453dfa716a652577056d Mon Sep 17 00:00:00 2001 From: Michael Bien Date: Mon, 27 May 2024 21:05:02 +0200 Subject: [PATCH] Disable FS event notifier test on mac and consolidate fs tests. - FSEvent order isn't predictable on mac causing frequent failures - moved test to the core module and removed duplicates since the test itself is platform independent - run (now agregated) masterfs tests on all platforms (previously only linux) and: - disable the NotifierTest on mac - disable all other failing tests on windows (since they didn't run for a long time, see TODOs) - fix some JDK sensitive tests --- .github/workflows/main.yml | 11 +- platform/masterfs.linux/nbproject/project.xml | 14 -- .../linux/LinuxNotifier235632Test.java | 152 ------------------ .../masterfs.macosx/nbproject/project.xml | 17 -- .../modules/masterfs/NotifierTest.java} | 13 +- .../filebasedfs/BaseFileObjectTestHid.java | 2 + .../fileobjects/FolderObjTest.java | 2 + .../fileobjects/StatFilesTest.java | 8 +- .../filesystems/FileObjectTestHid.java | 2 + .../openide/filesystems/test/StatFiles.java | 11 +- 10 files changed, 28 insertions(+), 204 deletions(-) delete mode 100644 platform/masterfs.linux/test/unit/src/org/netbeans/modules/masterfs/watcher/linux/LinuxNotifier235632Test.java rename platform/{masterfs.macosx/test/unit/src/org/netbeans/modules/masterfs/watcher/macosx/OSXNotifierTest.java => masterfs/test/unit/src/org/netbeans/modules/masterfs/NotifierTest.java} (93%) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e26ba7f3e136..1e668b61d1d3 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -259,9 +259,8 @@ jobs: if: contains(matrix.os, 'macos') == false && success() run: tar --zstd -xf build.tar.zst - - name: platform/masterfs.macosx - if: contains(matrix.os, 'macos') && success() - run: .github/retry.sh ant $OPTS -f platform/masterfs.macosx test + - name: platform/masterfs + run: .github/retry.sh ant $OPTS -f platform/masterfs test - name: Commit Validation tests run: .github/retry.sh ant $OPTS -Dcluster.config=$CLUSTER_CONFIG commit-validation @@ -1048,12 +1047,6 @@ jobs: - name: platform/libs.junit4 run: ant $OPTS -f platform/libs.junit4 test - - name: platform/masterfs - run: .github/retry.sh ant $OPTS -f platform/masterfs test - - - name: platform/masterfs.linux - run: ant $OPTS -f platform/masterfs.linux test - - name: platform/o.n.core run: ant $OPTS -f platform/o.n.core test-unit diff --git a/platform/masterfs.linux/nbproject/project.xml b/platform/masterfs.linux/nbproject/project.xml index c0eeec676afa..f8353e6be3f5 100644 --- a/platform/masterfs.linux/nbproject/project.xml +++ b/platform/masterfs.linux/nbproject/project.xml @@ -49,20 +49,6 @@ - - - unit - - org.netbeans.libs.junit4 - - - - org.netbeans.modules.nbjunit - - - - - diff --git a/platform/masterfs.linux/test/unit/src/org/netbeans/modules/masterfs/watcher/linux/LinuxNotifier235632Test.java b/platform/masterfs.linux/test/unit/src/org/netbeans/modules/masterfs/watcher/linux/LinuxNotifier235632Test.java deleted file mode 100644 index dd15c72bf5e8..000000000000 --- a/platform/masterfs.linux/test/unit/src/org/netbeans/modules/masterfs/watcher/linux/LinuxNotifier235632Test.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * 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.netbeans.modules.masterfs.watcher.linux; - -import java.io.File; -import java.io.IOException; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.logging.Handler; -import java.util.logging.Level; -import java.util.logging.LogRecord; -import java.util.logging.Logger; -import org.netbeans.junit.Log; -import org.netbeans.junit.NbTestCase; -import org.netbeans.modules.masterfs.filebasedfs.fileobjects.FolderObj; -import org.openide.filesystems.FileChangeAdapter; -import org.openide.filesystems.FileChangeListener; -import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileUtil; -import org.openide.util.Utilities; - -/** - * Test for bug 235632. - * - * @author jhavlin - */ -public class LinuxNotifier235632Test extends NbTestCase { - - private File folder1; - private File folder1text1Txt; - private FileObject folder2FO; - private FileObject folder2text2TxtFO; - - public LinuxNotifier235632Test(String testName) { - super(testName); - } - - @Override - protected void setUp() throws Exception { - Log.enable(FolderObj.class.getName(), Level.FINEST); - clearWorkDir(); - } - - @Override - public boolean canRun() { - return super.canRun() && Utilities.getOperatingSystem() == Utilities.OS_LINUX; - } - - /** - * Prepare folders and files for testing. - * - *
-     * - folder1          (only java.io.File)
-     *    - text1.txt     (only java.io.File)
-     * - folder2          (FileObject)
-     *    - text2.txt     (FileObject, with registered listener)
-     * 
- * - * @throws IOException - */ - private void prepareFiles() throws IOException { - folder1 = new File(getWorkDir(), "folder1"); - folder1.mkdir(); - folder1text1Txt = new File(folder1, "text1.txt"); - folder1text1Txt.createNewFile(); - - File folder2 = new File(getWorkDir(), "folder2"); - folder2.mkdir(); - folder2FO = FileUtil.toFileObject(folder2); - folder2text2TxtFO = folder2FO.createData("text2.txt"); - // Causes the path to be registered in the notifier. - folder2text2TxtFO.addFileChangeListener(new FileChangeAdapter()); - folder2FO.refresh(); - } - - /** - * Test of nextEvent method, of class LinuxNotifier. - * - * @throws java.lang.Exception - */ - public void testNextEvent() throws Exception { - - prepareFiles(); - - final AtomicBoolean folder2refreshed = new AtomicBoolean(false); - Logger log = Logger.getLogger(FolderObj.class.getName()); - - Handler h = createHandler(folder2refreshed); - log.addHandler(h); - try { - FileChangeListener l = new FileChangeAdapter(); - FileUtil.addFileChangeListener(l, folder1text1Txt); - // This causes an IN_IGNORED native event. - FileUtil.removeFileChangeListener(l, folder1text1Txt); - // Native listeners may need some time. - Thread.sleep(2000); - } finally { - log.removeHandler(h); - } - assertFalse("Folder folder2 should not be refreshed.", - folder2refreshed.get()); - } - - /** - * Create a logging handler that sets value in an AtomicBoolean to true if - * folder2 or text2.txt is refreshed. - * - * @param refreshedFlag The AtomicBoolean to be set to true if incorrect - * refreshing was triggered. - * @return The new logging handler. - */ - private Handler createHandler(final AtomicBoolean refreshedFlag) { - Handler h = new Handler() { - - @Override - public void publish(LogRecord record) { - if (record.getMessage() != null - && record.getMessage().startsWith("refreshImpl for ") - && record.getParameters() != null - && record.getParameters().length > 0 - && (record.getParameters()[0] == folder2FO - || record.getParameters()[0] == folder2text2TxtFO)) { - refreshedFlag.set(true); - } - } - - @Override - public void flush() { - } - - @Override - public void close() throws SecurityException { - } - }; - return h; - } -} diff --git a/platform/masterfs.macosx/nbproject/project.xml b/platform/masterfs.macosx/nbproject/project.xml index 8f12405da9f6..07121bd69d2f 100644 --- a/platform/masterfs.macosx/nbproject/project.xml +++ b/platform/masterfs.macosx/nbproject/project.xml @@ -49,23 +49,6 @@ - - - unit - - org.netbeans.insane - - - - org.netbeans.libs.junit4 - - - - org.netbeans.modules.nbjunit - - - - diff --git a/platform/masterfs.macosx/test/unit/src/org/netbeans/modules/masterfs/watcher/macosx/OSXNotifierTest.java b/platform/masterfs/test/unit/src/org/netbeans/modules/masterfs/NotifierTest.java similarity index 93% rename from platform/masterfs.macosx/test/unit/src/org/netbeans/modules/masterfs/watcher/macosx/OSXNotifierTest.java rename to platform/masterfs/test/unit/src/org/netbeans/modules/masterfs/NotifierTest.java index c7f0e4bd5a09..e1f33d17c6dc 100644 --- a/platform/masterfs.macosx/test/unit/src/org/netbeans/modules/masterfs/watcher/macosx/OSXNotifierTest.java +++ b/platform/masterfs/test/unit/src/org/netbeans/modules/masterfs/NotifierTest.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.netbeans.modules.masterfs.watcher.macosx; +package org.netbeans.modules.masterfs; import java.io.File; import java.util.concurrent.atomic.AtomicBoolean; @@ -36,23 +36,26 @@ import org.openide.util.Utilities; /** - * Test based in the LinuxNotifier235632Test test class + * Test for bug 235632. + * + * @author jhavlin * @author Hector Espert */ -public class OSXNotifierTest extends NbTestCase { +public class NotifierTest extends NbTestCase { private File folder1; private File folder1text1Txt; private FileObject folder2FO; private FileObject folder2text2TxtFO; - public OSXNotifierTest(String name) { + public NotifierTest(String name) { super(name); } @Override public boolean canRun() { - return super.canRun() && Utilities.getOperatingSystem() == Utilities.OS_MAC; + // FSEvent order isn't predictable on mac causing frequent test failures + return super.canRun() && Utilities.getOperatingSystem() != Utilities.OS_MAC; } @Override diff --git a/platform/masterfs/test/unit/src/org/netbeans/modules/masterfs/filebasedfs/BaseFileObjectTestHid.java b/platform/masterfs/test/unit/src/org/netbeans/modules/masterfs/filebasedfs/BaseFileObjectTestHid.java index 72f39db1a314..4362868d54f4 100644 --- a/platform/masterfs/test/unit/src/org/netbeans/modules/masterfs/filebasedfs/BaseFileObjectTestHid.java +++ b/platform/masterfs/test/unit/src/org/netbeans/modules/masterfs/filebasedfs/BaseFileObjectTestHid.java @@ -37,6 +37,7 @@ import java.util.logging.Logger; import java.util.zip.ZipEntry; import javax.swing.filechooser.FileSystemView; +import org.junit.Assume; import org.netbeans.junit.RandomlyFails; import org.netbeans.modules.masterfs.filebasedfs.fileobjects.FileObj; import org.netbeans.modules.masterfs.filebasedfs.fileobjects.FileObjectFactory; @@ -605,6 +606,7 @@ public void testCreateFolderOrDataFile_ReadOnly() throws Exception { } public void testCannotLockReadOnlyFile() throws Exception { + Assume.assumeFalse(Utilities.isWindows()); // TODO fails on win clearWorkDir(); final File wDir = getWorkDir(); final File data = new File(wDir,"c.data"); diff --git a/platform/masterfs/test/unit/src/org/netbeans/modules/masterfs/filebasedfs/fileobjects/FolderObjTest.java b/platform/masterfs/test/unit/src/org/netbeans/modules/masterfs/filebasedfs/fileobjects/FolderObjTest.java index 951f364b8484..872e334c1e9c 100644 --- a/platform/masterfs/test/unit/src/org/netbeans/modules/masterfs/filebasedfs/fileobjects/FolderObjTest.java +++ b/platform/masterfs/test/unit/src/org/netbeans/modules/masterfs/filebasedfs/fileobjects/FolderObjTest.java @@ -35,6 +35,7 @@ import java.util.logging.Level; import java.util.logging.LogRecord; import java.util.logging.Logger; +import org.junit.Assume; import org.netbeans.junit.NbTestCase; import org.netbeans.modules.masterfs.filebasedfs.Statistics; import org.netbeans.modules.masterfs.filebasedfs.FileBasedFileSystem; @@ -1782,6 +1783,7 @@ public void run() { } public void testVirtualFOs() throws IOException { + Assume.assumeFalse(Utilities.isWindows()); // TODO fails on win final FileObject wd = FileBasedFileSystem.getFileObject(getWorkDir()); FileObject nonExisting = wd.getFileObject("non-existing-folder/non-existing-folder/non-existing-child.xyz", false); assertFalse(nonExisting.isValid()); diff --git a/platform/masterfs/test/unit/src/org/netbeans/modules/masterfs/filebasedfs/fileobjects/StatFilesTest.java b/platform/masterfs/test/unit/src/org/netbeans/modules/masterfs/filebasedfs/fileobjects/StatFilesTest.java index 009658eb37b3..9a9015fd0125 100644 --- a/platform/masterfs/test/unit/src/org/netbeans/modules/masterfs/filebasedfs/fileobjects/StatFilesTest.java +++ b/platform/masterfs/test/unit/src/org/netbeans/modules/masterfs/filebasedfs/fileobjects/StatFilesTest.java @@ -156,10 +156,16 @@ public void testLockFile() throws IOException { monitor.reset(); final FileLock lock = fobj.lock(); try { + // TODO fragile int expectedCount = 0; if (Utilities.isUnix()) { // called File.toURI() from FileUtil.normalizeFile() - expectedCount = 1; + expectedCount++; + // sun.awt.PlatformGraphicsInfo.getDefaultHeadlessProperty probes a .so or .dylib + // Runtime.version().feature() > 18 + if (Integer.parseInt(System.getProperty("java.version").split("\\.")[0]) > 18) { + expectedCount++; + } } // we check canWrite once monitor.getResults().assertResult(1, StatFiles.WRITE); diff --git a/platform/openide.filesystems/test/unit/src/org/openide/filesystems/FileObjectTestHid.java b/platform/openide.filesystems/test/unit/src/org/openide/filesystems/FileObjectTestHid.java index cd20490ad156..11ee9ad76f3f 100644 --- a/platform/openide.filesystems/test/unit/src/org/openide/filesystems/FileObjectTestHid.java +++ b/platform/openide.filesystems/test/unit/src/org/openide/filesystems/FileObjectTestHid.java @@ -30,6 +30,7 @@ import java.net.*; import java.nio.charset.StandardCharsets; import java.util.logging.Level; +import org.junit.Assume; import org.openide.util.Lookup.Result; /** @@ -3522,6 +3523,7 @@ public void testNonExistingFileObjectInFolder() throws Exception { } public void testNonExistingDoubleFileObjectInFolder() throws Exception { + Assume.assumeFalse(Utilities.isWindows()); // TODO fails on win nonExistingFileObject("non-existing-folder/non-existing-folder/non-existing-child.xyz", 2); } diff --git a/platform/openide.filesystems/test/unit/src/org/openide/filesystems/test/StatFiles.java b/platform/openide.filesystems/test/unit/src/org/openide/filesystems/test/StatFiles.java index 715df256be06..6fab0f33a51a 100644 --- a/platform/openide.filesystems/test/unit/src/org/openide/filesystems/test/StatFiles.java +++ b/platform/openide.filesystems/test/unit/src/org/openide/filesystems/test/StatFiles.java @@ -129,18 +129,17 @@ public void checkDelete(String file) { } private boolean canBeSkipped() { - boolean result = false; Throwable th = new Throwable(); StackTraceElement[] elems = th.getStackTrace(); for (StackTraceElement stackTraceElement : elems) { if (stackTraceElement.getClassName().endsWith("ClassLoader") && - (stackTraceElement.getMethodName().endsWith("loadClass") || - stackTraceElement.getMethodName().endsWith("getResource"))) { - result = true; - break; + (stackTraceElement.getMethodName().endsWith("loadClass") + || stackTraceElement.getMethodName().endsWith("getResource") + || stackTraceElement.getMethodName().endsWith("loadLibrary"))) { + return true; } } - return result; + return false; } /** Add current stack trace to given map or increase count if the stack trace