1/*
2 * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24/**
25 * @test
26 * @library /lib/testlibrary
27 * @modules jdk.compiler
28 * @build UpgradeModulePathTest CompilerUtils jdk.testlibrary.*
29 * @run testng UpgradeModulePathTest
30 * @summary Basic test for java --upgrade-module-path
31 */
32
33import java.io.File;
34import java.nio.file.Path;
35import java.nio.file.Paths;
36
37import static jdk.testlibrary.ProcessTools.executeTestJava;
38
39import org.testng.annotations.BeforeTest;
40import org.testng.annotations.Test;
41import static org.testng.Assert.*;
42
43/**
44 * This test upgrades module java.transaction. The upgraded module has a
45 * dependency on module java.enterprise that is deployed on the application
46 * modue path.
47 */
48
49
50@Test
51public class UpgradeModulePathTest {
52
53    private static final String TEST_SRC = System.getProperty("test.src");
54    private static final Path SRC_DIR = Paths.get(TEST_SRC, "src");
55    private static final Path MODS_DIR = Paths.get("mods");
56    private static final Path UPGRADEDMODS_DIR = Paths.get("upgradedmods");
57
58
59    @BeforeTest
60    public void setup() throws Exception {
61
62        // javac -d mods/java.enterprise src/java.enterprise/**
63        boolean compiled = CompilerUtils.compile(
64                SRC_DIR.resolve("java.enterprise"),
65                MODS_DIR.resolve("java.enterprise"));
66        assertTrue(compiled);
67
68        // javac -d upgrademods/java.transaction --module-path mods src/java.transaction/**
69        compiled = CompilerUtils.compile(
70                SRC_DIR.resolve("java.transaction"),
71                UPGRADEDMODS_DIR.resolve("java.transaction"),
72                "--module-path", MODS_DIR.toString());
73        assertTrue(compiled);
74
75        // javac -d mods --upgrade-module-path upgrademods --module-path mods src/test/**
76        compiled = CompilerUtils.compile(
77                SRC_DIR.resolve("test"),
78                MODS_DIR.resolve("test"),
79                "--upgrade-module-path", UPGRADEDMODS_DIR.toString(),
80                "--module-path", MODS_DIR.toString());
81        assertTrue(compiled);
82
83    }
84
85
86    /**
87     * Run the test with an upgraded java.transaction module.
88     */
89    public void testWithUpgradedModule() throws Exception {
90
91        String mid = "test/jdk.test.Main";
92
93        int exitValue
94            = executeTestJava(
95                "--upgrade-module-path", UPGRADEDMODS_DIR.toString(),
96                "--module-path", MODS_DIR.toString(),
97                "-m", mid)
98            .outputTo(System.out)
99            .errorTo(System.out)
100            .getExitValue();
101
102        assertTrue(exitValue == 0);
103
104    }
105
106
107    /**
108     * Run the test with a non-existent file on the upgrade module path.
109     * It should be silently ignored.
110     */
111    public void testRunWithNonExistentEntry() throws Exception {
112
113        String upgrademodulepath
114            = "DoesNotExit" + File.pathSeparator + UPGRADEDMODS_DIR.toString();
115        String mid = "test/jdk.test.Main";
116
117        int exitValue
118            = executeTestJava(
119                "--upgrade-module-path", upgrademodulepath,
120                "--module-path", MODS_DIR.toString(),
121                "-m", mid)
122            .outputTo(System.out)
123            .errorTo(System.out)
124            .getExitValue();
125
126        assertTrue(exitValue == 0);
127
128    }
129
130}
131