You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sj...@apache.org on 2023/01/04 07:48:57 UTC

[maven-surefire] branch master updated: [SUREFIRE-2109] Add suffix derived from current user to Surefire temp directory name

This is an automated email from the ASF dual-hosted git repository.

sjaranowski pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git


The following commit(s) were added to refs/heads/master by this push:
     new c068b121a [SUREFIRE-2109] Add suffix derived from current user to Surefire temp directory name
c068b121a is described below

commit c068b121a556028b45632f04dd310e582623487d
Author: Markus Spann <sm...@outlook.de>
AuthorDate: Sun Jul 10 12:08:12 2022 +0200

    [SUREFIRE-2109] Add suffix derived from current user to Surefire temp directory name
---
 .../surefire/api/util/SureFireFileManager.java     | 33 ++++++++++-
 .../surefire/api/util/SureFireFileManagerTest.java | 64 ++++++++++++++++++++++
 2 files changed, 94 insertions(+), 3 deletions(-)

diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/api/util/SureFireFileManager.java b/surefire-api/src/main/java/org/apache/maven/surefire/api/util/SureFireFileManager.java
index 212f29985..0f414593a 100644
--- a/surefire-api/src/main/java/org/apache/maven/surefire/api/util/SureFireFileManager.java
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/api/util/SureFireFileManager.java
@@ -20,20 +20,47 @@ package org.apache.maven.surefire.api.util;
  */
 
 import java.io.File;
+import java.util.Objects;
+import java.util.stream.Stream;
 
 /**
- * Centralized file management of surefire.
+ * Centralized file management of temporary files in surefire.<br>
+ * Files are deleted on VM exit.
  *
  * @author Markus Spann
  */
 public final class SureFireFileManager
 {
 
-    public static File createTempFile( String prefix, String suffix )
+    private static TempFileManager instance = create();
+
+    private static TempFileManager create()
     {
+        String subDirName = "surefire";
 
-        return TempFileManager.instance( "surefire" ).createTempFile( prefix, suffix );
+        // create directory name suffix from legal chars in the current user name
+        // or a millisecond timestamp as fallback
+        String userSuffix = Stream.of( "user.name", "USER", "USERNAME" )
+                        .map( System::getProperty )
+                        .filter( Objects::nonNull )
+                        .findFirst()
+                        .map( u -> u.replaceAll( "[^A-Za-z0-9\\-_]", "" ) )
+                        .map( u -> u.isEmpty() ? null : u )
+                        .orElse( Long.toString( System.currentTimeMillis() ) );
 
+        if ( userSuffix != null )
+        {
+            subDirName += "-" + userSuffix;
+        }
+
+        TempFileManager tfm = TempFileManager.instance( subDirName );
+        tfm.setDeleteOnExit( true );
+        return tfm;
+    }
+
+    public static File createTempFile( String prefix, String suffix )
+    {
+        return instance.createTempFile( prefix, suffix );
     }
 
 }
diff --git a/surefire-api/src/test/java/org/apache/maven/surefire/api/util/SureFireFileManagerTest.java b/surefire-api/src/test/java/org/apache/maven/surefire/api/util/SureFireFileManagerTest.java
new file mode 100644
index 000000000..cda37d83f
--- /dev/null
+++ b/surefire-api/src/test/java/org/apache/maven/surefire/api/util/SureFireFileManagerTest.java
@@ -0,0 +1,64 @@
+package org.apache.maven.surefire.api.util;
+
+/*
+ * 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.
+ */
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import junit.framework.TestCase;
+import org.junit.Test;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.nio.file.attribute.PosixFilePermission;
+import java.nio.file.attribute.PosixFilePermissions;
+import java.util.Set;
+
+/**
+ * Unit test for the surefire instance of temp file manager.
+ *
+ * @author Markus Spann
+ */
+public class SureFireFileManagerTest extends TestCase
+{
+
+    @Test
+    public void testCreateTempFile() throws IOException
+    {
+
+        File tempFile = SureFireFileManager.createTempFile( "sfprefix", "sfsuffix" );
+        assertThat( tempFile ).isWritable();
+        assertThat( tempFile.getName() ).startsWith( "sfprefix" ).endsWith( "sfsuffix" );
+
+        File tempDir = tempFile.getParentFile();
+        assertThat( tempDir ).isDirectory().isWritable();
+        assertThat( tempDir.getName() ).startsWith( "surefire-" ).doesNotMatch( "[^A-Za-z0-9\\\\-_]" );
+
+        boolean isPosix = FileSystems.getDefault().supportedFileAttributeViews().contains( "posix" );
+        if ( isPosix )
+        {
+            Set<PosixFilePermission> permissions = Files.getPosixFilePermissions( tempDir.toPath() );
+            assertEquals( "rwxrwxr-x", PosixFilePermissions.toString( permissions ) );
+        }
+
+    }
+
+}