undefect. CWE-407 — 63 sites patched across 27 ecosystems
Authors: russell@unturf.com · brackishbert@gmail.com · foxhop.net · TimeHexOn.com Patches, unit tests, benchmarks, whitepaper, and outreach briefs. Public domain — no copyright claimed. Use freely.
This commit is contained in:
commit
0a580b313d
70422 changed files with 17213626 additions and 0 deletions
157
test/jdk/java/util/Currency/PropertiesTestRun.java
Normal file
157
test/jdk/java/util/Currency/PropertiesTestRun.java
Normal file
|
|
@ -0,0 +1,157 @@
|
|||
/*
|
||||
* Copyright (c) 2007, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 6332666 6863624 7180362 8003846 8074350 8074351 8130246 8149735 7102969
|
||||
* 8157138 8190904 8210410
|
||||
* @summary Tests the capability of replacing the currency data with a user
|
||||
* specified currency properties file in lib directory (old way) or
|
||||
* via the system property in the cmdline (new way).
|
||||
* @library /test/lib
|
||||
* @build PropertiesTest
|
||||
* @run junit PropertiesTestRun
|
||||
*/
|
||||
|
||||
import jdk.test.lib.Utils;
|
||||
import jdk.test.lib.process.ProcessTools;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.fail;
|
||||
|
||||
public class PropertiesTestRun {
|
||||
|
||||
// String paths used for the cmdline processes
|
||||
private static final String TEST_JDK = Utils.TEST_JDK;
|
||||
private static final String TEST_PROPS =
|
||||
Utils.TEST_SRC+Utils.FILE_SEPARATOR+"currency.properties";
|
||||
private static final String WRITABLE_JDK =
|
||||
"."+Utils.FILE_SEPARATOR+"WRITABLE_JDK";
|
||||
private static final String WRITABLE_JDK_LIB =
|
||||
WRITABLE_JDK+Utils.FILE_SEPARATOR+"lib";
|
||||
private static final String WRITABLE_JDK_BIN =
|
||||
WRITABLE_JDK+Utils.FILE_SEPARATOR+"bin";
|
||||
private static final String WRITABLE_JDK_JAVA_PATH =
|
||||
WRITABLE_JDK_BIN + Utils.FILE_SEPARATOR + "java";
|
||||
|
||||
// Create a writable JDK and set up dumps 1-3
|
||||
@BeforeAll
|
||||
static void setUp() throws Throwable {
|
||||
// Create separate JDK to supersede currencies via lib directory
|
||||
createWritableJDK();
|
||||
// Create dump without user defined prop file
|
||||
executeTestJDKMethod("PropertiesTest", "-d", "dump1");
|
||||
// Create dump with user defined prop file (via system property)
|
||||
executeTestJDKMethod("-Djava.util.currency.data="+TEST_PROPS,
|
||||
"PropertiesTest", "-d", "dump2");
|
||||
// Create dump with user defined prop file (via lib)
|
||||
executeWritableJDKMethod("PropertiesTest", "-d", "dump3");
|
||||
}
|
||||
|
||||
// Need to create a separate JDK to insert the user defined properties file
|
||||
// into the lib folder. Create separate JDK to not disturb current TEST JDK.
|
||||
private static void createWritableJDK() throws Throwable {
|
||||
// Copy Test JDK into a separate JDK folder
|
||||
executeProcess(new String[]{"cp", "-H", "-R", TEST_JDK, WRITABLE_JDK});
|
||||
// Make the separate JDK writable
|
||||
executeProcess(new String[]{"chmod", "-R", "u+w", WRITABLE_JDK_LIB});
|
||||
// Copy the properties file into the writable JDK lib folder
|
||||
executeProcess(new String[]{"cp", TEST_PROPS, WRITABLE_JDK_LIB});
|
||||
}
|
||||
|
||||
// Compares the dumped output is expected between the default currencies
|
||||
// and the user-defined custom currencies
|
||||
@Test
|
||||
void compareDumps() throws Throwable {
|
||||
// Compare dump (from sys prop)
|
||||
executeTestJDKMethod("PropertiesTest", "-c", "dump1", "dump2",
|
||||
TEST_PROPS);
|
||||
// Compare dump (from lib)
|
||||
executeTestJDKMethod("PropertiesTest", "-c", "dump1", "dump3",
|
||||
TEST_PROPS);
|
||||
}
|
||||
|
||||
// Launch a test from PropertiesTest. See PropertiesTest.java for more
|
||||
// detail regarding a specific test that was launched.
|
||||
@ParameterizedTest
|
||||
@MethodSource("PropertiesTestMethods")
|
||||
void launchPropertiesTests(String methodName) throws Throwable {
|
||||
// Test via both the lib and system property
|
||||
executeWritableJDKMethod("PropertiesTest", methodName);
|
||||
executeTestJDKMethod("-Djava.util.currency.data="+TEST_PROPS,
|
||||
"PropertiesTest", methodName);
|
||||
}
|
||||
|
||||
private static Stream<String> PropertiesTestMethods() {
|
||||
return Stream.of("bug7102969", "bug8157138", "bug8190904");
|
||||
}
|
||||
|
||||
// Launch a PropertiesTest method using the TEST JDK
|
||||
private static void executeTestJDKMethod(String... params) throws Throwable {
|
||||
int exitStatus = ProcessTools.executeTestJava(params).getExitValue();
|
||||
if (exitStatus != 0) {
|
||||
fail("Process started with: " + Arrays.toString(params) + " failed");
|
||||
}
|
||||
}
|
||||
|
||||
// Launch a PropertiesTest method using the WRITABLE JDK
|
||||
private static void executeWritableJDKMethod(String... params) throws Throwable {
|
||||
// Need to include WritableJDK javapath, TEST JDK classpath
|
||||
String[] allParams = new String[3+params.length+Utils.getTestJavaOpts().length];
|
||||
// We don't use executeTestJava() because we want to point to separate JDK java path
|
||||
allParams[0] = WRITABLE_JDK_JAVA_PATH;
|
||||
allParams[1] = "-cp";
|
||||
allParams[2] = System.getProperty("java.class.path");
|
||||
// Add test.vm.opts and test.java.opts
|
||||
System.arraycopy(Utils.getTestJavaOpts(), 0, allParams, 3,
|
||||
Utils.getTestJavaOpts().length);
|
||||
// Add the rest of the actual arguments
|
||||
System.arraycopy(params, 0, allParams, Utils.getTestJavaOpts().length+3,
|
||||
params.length);
|
||||
// Launch the actual test method with all parameters set
|
||||
executeProcess(allParams);
|
||||
}
|
||||
|
||||
// Execute a process and fail if the command is not successful
|
||||
private static void executeProcess(String[] params) throws Throwable {
|
||||
System.out.println("Command line: " + Arrays.toString(params));
|
||||
int exitStatus = ProcessTools.executeProcess(params).getExitValue();
|
||||
if (exitStatus != 0) {
|
||||
fail("Process started with: " + Arrays.toString(params) + " failed");
|
||||
}
|
||||
}
|
||||
|
||||
@AfterAll
|
||||
static void tearDown() throws Throwable {
|
||||
// Remove the copied writable JDK image from scratch folder
|
||||
executeProcess(new String[]{"rm", "-rf", WRITABLE_JDK});
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue