From 9cb501ca77d2a3fe15961774496604b5b6e46d1b Mon Sep 17 00:00:00 2001 From: Uladzislau Arlouski Date: Wed, 18 Sep 2024 11:17:54 +0300 Subject: [PATCH] Align access bits across temp and regular files to avoid access related issues --- .../plugin/CustomTranslationsPlugin.java | 15 ++++++++ .../plugin/CustomTranslationsPluginTests.java | 38 +++++++++++++------ 2 files changed, 42 insertions(+), 11 deletions(-) diff --git a/vividus-allure-adaptor/src/main/java/org/vividus/report/allure/plugin/CustomTranslationsPlugin.java b/vividus-allure-adaptor/src/main/java/org/vividus/report/allure/plugin/CustomTranslationsPlugin.java index 0ba02c7cff..ff9ea4fae6 100644 --- a/vividus-allure-adaptor/src/main/java/org/vividus/report/allure/plugin/CustomTranslationsPlugin.java +++ b/vividus-allure-adaptor/src/main/java/org/vividus/report/allure/plugin/CustomTranslationsPlugin.java @@ -19,11 +19,14 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.attribute.PosixFilePermission; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; +import org.apache.commons.lang3.SystemUtils; import org.vividus.util.ResourceUtils; import org.vividus.util.json.JsonUtils; import org.vividus.util.property.PropertyMappedCollection; @@ -58,6 +61,18 @@ public CustomTranslationsPlugin(PropertyMappedCollection> customT Path indexJs = ResourceUtils.createTempFile("index", ".js"); Files.write(indexJs, jsFileLines); + /** + * For UNIX like operation systems default access for temp files is 600, whereas for regular files the + * default access is 644, so the following fix is used to align access bits across all files being created + * during test execution and avoid potential access related issues. + */ + if (SystemUtils.IS_OS_UNIX) + { + Files.setPosixFilePermissions(indexJs, + Set.of(PosixFilePermission.OWNER_WRITE, PosixFilePermission.OWNER_READ, + PosixFilePermission.GROUP_READ, PosixFilePermission.OTHERS_READ)); + } + this.pluginFiles.put(INDEX_JS, Path.of(indexJs.toUri())); getConfig().setJsFiles(List.of(INDEX_JS)); } diff --git a/vividus-allure-adaptor/src/test/java/org/vividus/report/allure/plugin/CustomTranslationsPluginTests.java b/vividus-allure-adaptor/src/test/java/org/vividus/report/allure/plugin/CustomTranslationsPluginTests.java index d24fc0c49c..27bf18966f 100644 --- a/vividus-allure-adaptor/src/test/java/org/vividus/report/allure/plugin/CustomTranslationsPluginTests.java +++ b/vividus-allure-adaptor/src/test/java/org/vividus/report/allure/plugin/CustomTranslationsPluginTests.java @@ -20,9 +20,13 @@ import java.io.IOException; import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.attribute.PosixFilePermissions; import java.util.Map; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledOnOs; +import org.junit.jupiter.api.condition.OS; import org.vividus.util.json.JsonUtils; import org.vividus.util.property.PropertyMappedCollection; @@ -31,20 +35,18 @@ class CustomTranslationsPluginTests @Test void shouldGenerateIndexJs() throws IOException { - var plugin = new CustomTranslationsPlugin(new PropertyMappedCollection<>(Map.of("en", Map.of( - "tab", Map.of( - "suites", Map.of( - "name", "Batches Tab" - ) - ) - ))), new JsonUtils()); - var pluginFiles = plugin.getPluginFiles(); - assertEquals(1, pluginFiles.size()); - var indexJsPath = pluginFiles.get("index.js"); assertEquals(""" 'use strict'; allure.api.addTranslation('en', {"tab":{"suites":{"name":"Batches Tab"}}}); - """.replaceAll("\r\n|\n", System.lineSeparator()), Files.readString(indexJsPath)); + """.replaceAll("\r\n|\n", System.lineSeparator()), Files.readString(generateIndexJs())); + } + + @Test + @DisabledOnOs(OS.WINDOWS) + void shouldGenerateIndexJsWith644Permissions() throws IOException + { + var permissions = PosixFilePermissions.toString(Files.getPosixFilePermissions(generateIndexJs())); + assertEquals("rw-r--r--", permissions); } @Test @@ -53,4 +55,18 @@ void shouldNotGenerateIndexJsIfNoTranslationsAreProvided() throws IOException var plugin = new CustomTranslationsPlugin(new PropertyMappedCollection<>(Map.of()), new JsonUtils()); assertEquals(0, plugin.getPluginFiles().size()); } + + private Path generateIndexJs() throws IOException + { + var plugin = new CustomTranslationsPlugin(new PropertyMappedCollection<>(Map.of("en", Map.of( + "tab", Map.of( + "suites", Map.of( + "name", "Batches Tab" + ) + ) + ))), new JsonUtils()); + var pluginFiles = plugin.getPluginFiles(); + assertEquals(1, pluginFiles.size()); + return pluginFiles.get("index.js"); + } }