test/jdk/java/lang/invoke/lambda/LogGeneratedClassesTest.java
author vlivanov
Tue, 26 Nov 2019 16:09:17 +0300
changeset 59275 a6e25566cb56
parent 47216 71c04702a3d5
permissions -rw-r--r--
8234401: ConstantCallSite may stuck in non-frozen state Reviewed-by: psandoz
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
20748
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
     1
/*
43221
eef9383d25cb 8055206: Update SecurityManager::checkPackageAccess to restrict non-exported JDK packages by default
mullan
parents: 42327
diff changeset
     2
 * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
20748
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
     4
 *
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
     7
 * published by the Free Software Foundation.
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
     8
 *
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    13
 * accompanied this code).
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    14
 *
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    18
 *
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    21
 * questions.
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    22
 */
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    23
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    24
/*
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    25
 * @test
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    26
 * @bug 8023524
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    27
 * @summary tests logging generated classes for lambda
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    28
 * @library /java/nio/file
36237
963d1115678b 8150998: Fix module dependences in java/lang tests
shurailine
parents: 29117
diff changeset
    29
 * @modules jdk.compiler
963d1115678b 8150998: Fix module dependences in java/lang tests
shurailine
parents: 29117
diff changeset
    30
 *          jdk.zipfs
20748
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    31
 * @run testng LogGeneratedClassesTest
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    32
 */
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    33
import java.io.File;
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    34
import java.io.IOException;
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    35
import java.util.ArrayList;
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    36
import java.util.List;
29117
7956b5dc0eac 8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents: 24628
diff changeset
    37
import java.util.function.Predicate;
20748
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    38
import java.nio.file.Files;
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    39
import java.nio.file.Path;
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    40
import java.nio.file.Paths;
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    41
import java.nio.file.attribute.PosixFileAttributeView;
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    42
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    43
import org.testng.annotations.AfterClass;
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    44
import org.testng.annotations.BeforeClass;
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    45
import org.testng.annotations.Test;
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    46
import org.testng.SkipException;
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    47
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    48
import static java.nio.file.attribute.PosixFilePermissions.*;
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    49
import static org.testng.Assert.assertEquals;
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    50
import static org.testng.Assert.assertFalse;
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    51
import static org.testng.Assert.assertTrue;
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    52
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    53
public class LogGeneratedClassesTest extends LUtils {
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    54
    String longFQCN;
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    55
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    56
    @BeforeClass
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    57
    public void setup() throws IOException {
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    58
        final List<String> scratch = new ArrayList<>();
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    59
        scratch.clear();
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    60
        scratch.add("package com.example;");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    61
        scratch.add("public class TestLambda {");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    62
        scratch.add("    interface I {");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    63
        scratch.add("        int foo();");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    64
        scratch.add("    }");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    65
        scratch.add("    public static void main(String[] args) {");
43221
eef9383d25cb 8055206: Update SecurityManager::checkPackageAccess to restrict non-exported JDK packages by default
mullan
parents: 42327
diff changeset
    66
        scratch.add("        System.setSecurityManager(new SecurityManager());");
20748
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    67
        scratch.add("        I lam = () -> 10;");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    68
        scratch.add("        Runnable r = () -> {");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    69
        scratch.add("            System.out.println(\"Runnable\");");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    70
        scratch.add("        };");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    71
        scratch.add("        r.run();");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    72
        scratch.add("        System.out.println(\"Finish\");");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    73
        scratch.add("    }");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    74
        scratch.add("}");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    75
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    76
        File test = new File("TestLambda.java");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    77
        createFile(test, scratch);
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    78
        compile("-d", ".", test.getName());
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    79
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    80
        scratch.remove(0);
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    81
        scratch.remove(0);
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    82
        scratch.add(0, "public class LongPackageName {");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    83
        StringBuilder sb = new StringBuilder("com.example.");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    84
        // longer than 255 which exceed max length of most filesystems
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    85
        for (int i = 0; i < 30; i++) {
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    86
            sb.append("nonsense.");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    87
        }
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    88
        sb.append("enough");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    89
        longFQCN = sb.toString() + ".LongPackageName";
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    90
        sb.append(";");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    91
        sb.insert(0, "package ");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    92
        scratch.add(0, sb.toString());
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    93
        test = new File("LongPackageName.java");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    94
        createFile(test, scratch);
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    95
        compile("-d", ".", test.getName());
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    96
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    97
        // create target
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    98
        Files.createDirectory(Paths.get("dump"));
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
    99
        Files.createDirectories(Paths.get("dumpLong/com/example/nonsense"));
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   100
        Files.createFile(Paths.get("dumpLong/com/example/nonsense/nonsense"));
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   101
        Files.createFile(Paths.get("file"));
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   102
    }
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   103
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   104
    @AfterClass
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   105
    public void cleanup() throws IOException {
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   106
        Files.delete(Paths.get("TestLambda.java"));
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   107
        Files.delete(Paths.get("LongPackageName.java"));
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   108
        Files.delete(Paths.get("file"));
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   109
        TestUtil.removeAll(Paths.get("com"));
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   110
        TestUtil.removeAll(Paths.get("dump"));
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   111
        TestUtil.removeAll(Paths.get("dumpLong"));
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   112
    }
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   113
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   114
    @Test
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   115
    public void testNotLogging() {
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   116
        TestResult tr = doExec(JAVA_CMD.getAbsolutePath(),
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   117
                               "-cp", ".",
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   118
                               "com.example.TestLambda");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   119
        tr.assertZero("Should still return 0");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   120
    }
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   121
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   122
    @Test
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   123
    public void testLogging() throws IOException {
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   124
        assertTrue(Files.exists(Paths.get("dump")));
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   125
        TestResult tr = doExec(JAVA_CMD.getAbsolutePath(),
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   126
                               "-cp", ".",
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   127
                               "-Djdk.internal.lambda.dumpProxyClasses=dump",
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   128
                               "com.example.TestLambda");
42327
9acc435acfa2 8170408: LogGeneratedClassesTest.java fails with recent changes
weijun
parents: 36237
diff changeset
   129
        // 2 our own class files. We don't care about the others
9acc435acfa2 8170408: LogGeneratedClassesTest.java fails with recent changes
weijun
parents: 36237
diff changeset
   130
        assertEquals(Files.find(
9acc435acfa2 8170408: LogGeneratedClassesTest.java fails with recent changes
weijun
parents: 36237
diff changeset
   131
                        Paths.get("dump"),
9acc435acfa2 8170408: LogGeneratedClassesTest.java fails with recent changes
weijun
parents: 36237
diff changeset
   132
                        99,
9acc435acfa2 8170408: LogGeneratedClassesTest.java fails with recent changes
weijun
parents: 36237
diff changeset
   133
                        (p, a) -> p.startsWith(Paths.get("dump/com/example"))
9acc435acfa2 8170408: LogGeneratedClassesTest.java fails with recent changes
weijun
parents: 36237
diff changeset
   134
                                && a.isRegularFile()).count(),
9acc435acfa2 8170408: LogGeneratedClassesTest.java fails with recent changes
weijun
parents: 36237
diff changeset
   135
                2, "Two lambda captured");
20748
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   136
        tr.assertZero("Should still return 0");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   137
    }
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   138
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   139
    @Test
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   140
    public void testDumpDirNotExist() throws IOException {
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   141
        assertFalse(Files.exists(Paths.get("notExist")));
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   142
        TestResult tr = doExec(JAVA_CMD.getAbsolutePath(),
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   143
                               "-cp", ".",
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   144
                               "-Djdk.internal.lambda.dumpProxyClasses=notExist",
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   145
                               "com.example.TestLambda");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   146
        assertEquals(tr.testOutput.stream()
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   147
                                  .filter(s -> s.startsWith("WARNING"))
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   148
                                  .peek(s -> assertTrue(s.contains("does not exist")))
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   149
                                  .count(),
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   150
                     1, "only show error once");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   151
        tr.assertZero("Should still return 0");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   152
    }
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   153
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   154
    @Test
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   155
    public void testDumpDirIsFile() throws IOException {
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   156
        assertTrue(Files.isRegularFile(Paths.get("file")));
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   157
        TestResult tr = doExec(JAVA_CMD.getAbsolutePath(),
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   158
                               "-cp", ".",
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   159
                               "-Djdk.internal.lambda.dumpProxyClasses=file",
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   160
                               "com.example.TestLambda");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   161
        assertEquals(tr.testOutput.stream()
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   162
                                  .filter(s -> s.startsWith("WARNING"))
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   163
                                  .peek(s -> assertTrue(s.contains("not a directory")))
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   164
                                  .count(),
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   165
                     1, "only show error once");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   166
        tr.assertZero("Should still return 0");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   167
    }
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   168
24628
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   169
    private static boolean isWriteableDirectory(Path p) {
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   170
        if (!Files.isDirectory(p)) {
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   171
            return false;
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   172
        }
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   173
        Path test = p.resolve(Paths.get("test"));
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   174
        try {
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   175
            Files.createFile(test);
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   176
            assertTrue(Files.exists(test));
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   177
            return true;
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   178
        } catch (IOException e) {
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   179
            assertFalse(Files.exists(test));
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   180
            return false;
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   181
        } finally {
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   182
            if (Files.exists(test)) {
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   183
                try {
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   184
                    Files.delete(test);
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   185
                } catch (IOException e) {
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   186
                    throw new Error(e);
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   187
                }
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   188
            }
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   189
        }
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   190
    }
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   191
20748
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   192
    @Test
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   193
    public void testDumpDirNotWritable() throws IOException {
24628
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   194
        if (!Files.getFileStore(Paths.get("."))
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   195
                  .supportsFileAttributeView(PosixFileAttributeView.class)) {
20788
a8a30ee0732d 8026362: java/lang/invoke/lambda/LogGeneratedClassesTest.java failed on windows, jtreg report Fail to org.testng.SkipException
henryjen
parents: 20748
diff changeset
   196
            // No easy way to setup readonly directory without POSIX
a8a30ee0732d 8026362: java/lang/invoke/lambda/LogGeneratedClassesTest.java failed on windows, jtreg report Fail to org.testng.SkipException
henryjen
parents: 20748
diff changeset
   197
            // We would like to skip the test with a cause with
a8a30ee0732d 8026362: java/lang/invoke/lambda/LogGeneratedClassesTest.java failed on windows, jtreg report Fail to org.testng.SkipException
henryjen
parents: 20748
diff changeset
   198
            //     throw new SkipException("Posix not supported");
a8a30ee0732d 8026362: java/lang/invoke/lambda/LogGeneratedClassesTest.java failed on windows, jtreg report Fail to org.testng.SkipException
henryjen
parents: 20748
diff changeset
   199
            // but jtreg will report failure so we just pass the test
a8a30ee0732d 8026362: java/lang/invoke/lambda/LogGeneratedClassesTest.java failed on windows, jtreg report Fail to org.testng.SkipException
henryjen
parents: 20748
diff changeset
   200
            // which we can look at if jtreg changed its behavior
24628
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   201
            System.out.println("WARNING: POSIX is not supported. Skipping testDumpDirNotWritable test.");
20788
a8a30ee0732d 8026362: java/lang/invoke/lambda/LogGeneratedClassesTest.java failed on windows, jtreg report Fail to org.testng.SkipException
henryjen
parents: 20748
diff changeset
   202
            return;
20748
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   203
        }
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   204
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   205
        Files.createDirectory(Paths.get("readOnly"),
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   206
                              asFileAttribute(fromString("r-xr-xr-x")));
24628
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   207
        try {
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   208
            if (isWriteableDirectory(Paths.get("readOnly"))) {
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   209
                // Skipping the test: it's allowed to write into read-only directory
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   210
                // (e.g. current user is super user).
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   211
                System.out.println("WARNING: readOnly directory is writeable. Skipping testDumpDirNotWritable test.");
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   212
                return;
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   213
            }
20748
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   214
24628
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   215
            TestResult tr = doExec(JAVA_CMD.getAbsolutePath(),
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   216
                                   "-cp", ".",
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   217
                                   "-Djdk.internal.lambda.dumpProxyClasses=readOnly",
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   218
                                   "com.example.TestLambda");
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   219
            assertEquals(tr.testOutput.stream()
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   220
                                      .filter(s -> s.startsWith("WARNING"))
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   221
                                      .peek(s -> assertTrue(s.contains("not writable")))
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   222
                                      .count(),
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   223
                         1, "only show error once");
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   224
            tr.assertZero("Should still return 0");
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   225
        } finally {
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   226
            TestUtil.removeAll(Paths.get("readOnly"));
a78064864267 8035186: j2se_jdk/jdk/test/java/lang/invoke/lambda/LogGeneratedClassesTest.java - assertion error
vlivanov
parents: 20788
diff changeset
   227
        }
20748
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   228
    }
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   229
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   230
    @Test
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   231
    public void testLoggingException() throws IOException {
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   232
        assertTrue(Files.exists(Paths.get("dumpLong")));
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   233
        TestResult tr = doExec(JAVA_CMD.getAbsolutePath(),
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   234
                               "-cp", ".",
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   235
                               "-Djdk.internal.lambda.dumpProxyClasses=dumpLong",
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   236
                               longFQCN);
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   237
        assertEquals(tr.testOutput.stream()
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   238
                                  .filter(s -> s.startsWith("WARNING: Exception"))
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   239
                                  .count(),
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   240
                     2, "show error each capture");
29117
7956b5dc0eac 8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents: 24628
diff changeset
   241
        // dumpLong/com/example/nonsense/nonsense
7956b5dc0eac 8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents: 24628
diff changeset
   242
        Path dumpPath = Paths.get("dumpLong/com/example/nonsense");
7956b5dc0eac 8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents: 24628
diff changeset
   243
        Predicate<Path> filter = p -> p.getParent() == null || dumpPath.startsWith(p) || p.startsWith(dumpPath);
7956b5dc0eac 8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents: 24628
diff changeset
   244
        boolean debug = true;
7956b5dc0eac 8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents: 24628
diff changeset
   245
        if (debug) {
7956b5dc0eac 8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents: 24628
diff changeset
   246
           Files.walk(Paths.get("dumpLong"))
7956b5dc0eac 8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents: 24628
diff changeset
   247
                .forEachOrdered(p -> {
7956b5dc0eac 8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents: 24628
diff changeset
   248
                    if (filter.test(p)) {
7956b5dc0eac 8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents: 24628
diff changeset
   249
                        System.out.println("accepted: " + p.toString());
7956b5dc0eac 8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents: 24628
diff changeset
   250
                    } else {
7956b5dc0eac 8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents: 24628
diff changeset
   251
                        System.out.println("filetered out: " + p.toString());
7956b5dc0eac 8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents: 24628
diff changeset
   252
                    }
7956b5dc0eac 8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents: 24628
diff changeset
   253
                 });
7956b5dc0eac 8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents: 24628
diff changeset
   254
        }
7956b5dc0eac 8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents: 24628
diff changeset
   255
        assertEquals(Files.walk(Paths.get("dumpLong"))
7956b5dc0eac 8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents: 24628
diff changeset
   256
                .filter(filter)
7956b5dc0eac 8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents: 24628
diff changeset
   257
                .count(), 5, "Two lambda captured failed to log");
20748
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   258
        tr.assertZero("Should still return 0");
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   259
    }
fbf53402134d 8023524: Mechanism to dump generated lambda classes / log lambda code generation
henryjen
parents:
diff changeset
   260
}