8370442: Compilation error in jpackage EntitlementsTest test

Reviewed-by: almatvee
This commit is contained in:
Alexey Semenyuk 2025-10-22 18:08:19 +00:00
parent afba636869
commit a925461395
4 changed files with 109 additions and 43 deletions

View File

@ -95,6 +95,18 @@ public class AnnotationsTest extends JUnitAdapter {
recordTestCase(a, b, other);
}
enum Tack {
STARBOARD,
PORTSIDE;
}
@Test
@Parameter({"STARBOARD"})
@Parameter({"PORTSIDE", "STARBOARD"})
public void testEnumVarArg(Tack ... cource) {
recordTestCase((Object[]) cource);
}
@Test
@ParameterSupplier("dateSupplier")
@ParameterSupplier("jdk.jpackage.test.AnnotationsTest.dateSupplier")
@ -118,6 +130,8 @@ public class AnnotationsTest extends JUnitAdapter {
"().testVarArg2(-89, bar, [more, moore](length=2))",
"().testVarArg2(-89, bar, [more](length=1))",
"().testVarArg2(12, foo, [](length=0))",
"().testEnumVarArg(STARBOARD)",
"().testEnumVarArg(PORTSIDE, STARBOARD)",
"().testDates(2018-05-05)",
"().testDates(2018-07-11)",
"().testDates(2034-05-05)",

View File

@ -203,6 +203,17 @@ public class JPackageCommand extends CommandArguments<JPackageCommand> {
return addArguments(name, value.toString());
}
public JPackageCommand mutate(Consumer<JPackageCommand> mutator) {
return mutate(List.of(mutator));
}
public JPackageCommand mutate(Iterable<Consumer<JPackageCommand>> mutators) {
for (var mutator : mutators) {
mutator.accept(this);
}
return this;
}
public boolean isImagePackageType() {
return PackageType.IMAGE == getArgumentValue("--type",
() -> null, PACKAGE_TYPES::get);

View File

@ -54,6 +54,7 @@ import java.util.Properties;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.BiFunction;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@ -370,6 +371,16 @@ public final class MacHelper {
}).run();
}
public static Consumer<JPackageCommand> useKeychain(MacSign.ResolvedKeychain keychain) {
return useKeychain(keychain.spec().keychain());
}
public static Consumer<JPackageCommand> useKeychain(MacSign.Keychain keychain) {
return cmd -> {
useKeychain(cmd, keychain);
};
}
public static JPackageCommand useKeychain(JPackageCommand cmd, MacSign.ResolvedKeychain keychain) {
return useKeychain(cmd, keychain.spec().keychain());
}

View File

@ -21,20 +21,26 @@
* questions.
*/
import static jdk.jpackage.internal.util.PListWriter.writeBoolean;
import static jdk.jpackage.internal.util.PListWriter.writeDict;
import static jdk.jpackage.internal.util.PListWriter.writePList;
import static jdk.jpackage.internal.util.PListWriter.writeBoolean;
import static jdk.jpackage.internal.util.XmlUtils.createXml;
import static jdk.jpackage.internal.util.XmlUtils.toXmlConsumer;
import static jdk.jpackage.internal.util.function.ThrowingConsumer.toConsumer;
import java.io.IOException;
import java.nio.file.Path;
import java.util.Date;
import jdk.jpackage.test.JPackageCommand;
import jdk.jpackage.test.TKit;
import jdk.jpackage.test.Annotations.Test;
import java.util.function.Consumer;
import java.util.stream.Stream;
import jdk.jpackage.internal.util.function.ThrowingConsumer;
import jdk.jpackage.test.AdditionalLauncher;
import jdk.jpackage.test.Annotations.Parameter;
import jdk.jpackage.test.Annotations.Test;
import jdk.jpackage.test.JPackageCommand;
import jdk.jpackage.test.MacHelper;
import jdk.jpackage.test.MacHelper.SignKeyOption;
import jdk.jpackage.test.MacSign;
import jdk.jpackage.test.TKit;
/*
* Test generates signed app-image with custom entitlements file from the
@ -61,7 +67,7 @@ import jdk.jpackage.test.Annotations.Parameter;
*/
public class EntitlementsTest {
void createEntitlementsFile(Path file, boolean microphone) throws IOException {
private static void createEntitlementsFile(Path file, boolean microphone) throws IOException {
createXml(file, xml -> {
writePList(xml, toXmlConsumer(() -> {
writeDict(xml, toXmlConsumer(() -> {
@ -77,47 +83,71 @@ public class EntitlementsTest {
});
}
@Test
// ({"--mac-app-store", doMacEntitlements", "doResources"})
@Parameter({"false", "true", "false"})
@Parameter({"false", "false", "true"})
@Parameter({"false", "true", "true"})
@Parameter({"true", "true", "false"})
@Parameter({"true", "false", "true"})
@Parameter({"true", "true", "true"})
public void test(boolean appStore, boolean doMacEntitlements, boolean doResources) throws Exception {
final Path macEntitlementsFile;
final Path resourcesDir;
if (doMacEntitlements) {
macEntitlementsFile = TKit.createTempFile("EntitlementsTest.plist");
public enum EntitlementsSource implements Consumer<JPackageCommand> {
CMDLINE(cmd -> {
var macEntitlementsFile = TKit.createTempFile("foo.plist");
createEntitlementsFile(macEntitlementsFile, true);
} else {
macEntitlementsFile = null;
cmd.addArguments("--mac-entitlements", macEntitlementsFile);
}),
RESOURCE_DIR(cmd -> {
if (!cmd.hasArgument("--resource-dir")) {
cmd.setArgumentValue("--resource-dir", TKit.createTempDirectory("resources"));
}
var resourcesDir = Path.of(cmd.getArgumentValue("--resource-dir"));
createEntitlementsFile(resourcesDir.resolve(cmd.name() + ".entitlements"), false);
}),
;
EntitlementsSource(ThrowingConsumer<JPackageCommand> initializer) {
this.initializer = toConsumer(initializer);
}
if (doResources) {
resourcesDir = TKit.createTempDirectory("resources");
createEntitlementsFile(resourcesDir.resolve("EntitlementsTest.entitlements"), false);
} else {
resourcesDir = null;
@Override
public void accept(JPackageCommand cmd) {
initializer.accept(cmd);
}
JPackageCommand cmd = JPackageCommand.helloAppImage()
.addArguments("--mac-sign", "--mac-signing-keychain",
SigningBase.getKeyChain(), "--mac-app-image-sign-identity",
SigningBase.getAppCert(SigningBase.CertIndex.ASCII_INDEX.value()));
if (appStore) {
cmd.addArguments("--mac-app-store");
}
if (doMacEntitlements) {
cmd.addArguments("--mac-entitlements",
macEntitlementsFile.toAbsolutePath().toString());
}
if (doResources) {
cmd.addArguments("--resource-dir",
resourcesDir.toAbsolutePath().toString());
}
private final Consumer<JPackageCommand> initializer;
}
@Test
@Parameter({"CMDLINE"})
@Parameter({"RESOURCE_DIR"})
@Parameter({"CMDLINE", "RESOURCE_DIR"})
public static void test(EntitlementsSource... entitlementsSources) {
MacSign.withKeychain(toConsumer(keychain -> {
test(keychain, Stream.of(entitlementsSources));
}), SigningBase.StandardKeychain.MAIN.keychain());
}
@Test
@Parameter({"CMDLINE"})
@Parameter({"RESOURCE_DIR"})
@Parameter({"CMDLINE", "RESOURCE_DIR"})
public static void testAppStore(EntitlementsSource... entitlementsSources) {
MacSign.withKeychain(toConsumer(keychain -> {
test(keychain, Stream.concat(Stream.of(cmd -> {
cmd.addArguments("--mac-app-store");
// Ignore externally supplied runtime as it may have the "bin"
// directory that will cause jpackage to bail out.
cmd.ignoreDefaultRuntime(true);
}), Stream.of(entitlementsSources)));
}), SigningBase.StandardKeychain.MAIN.keychain());
}
private static void test(MacSign.ResolvedKeychain keychain, Stream<Consumer<JPackageCommand>> mutators) {
var cmd = JPackageCommand.helloAppImage();
cmd.mutate(MacHelper.useKeychain(keychain)).mutate(new SignKeyOption(
SignKeyOption.Type.SIGN_KEY_IDENTITY,
SigningBase.StandardCertificateRequest.CODESIGN.spec()
)::addTo);
cmd.mutate(new AdditionalLauncher("x")::applyTo);
mutators.forEach(cmd::mutate);
cmd.executeAndAssertHelloAppImageCreated();
}