Skip to content

Commit b79449f

Browse files
author
Alexey Semenyuk
committed
8379431: [macos] jpackage issues unexpected warning when bundling an unsigned runtime package from the signed predefined runtime bundle
Reviewed-by: almatvee
1 parent 3c09c2c commit b79449f

5 files changed

Lines changed: 62 additions & 23 deletions

File tree

src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/MacPackageBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2025, 2026, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -65,7 +65,7 @@ MacPackage create() {
6565
}
6666

6767
private static void validatePredefinedAppImage(MacPackage pkg) {
68-
if (pkg.predefinedAppImageSigned().orElse(false)) {
68+
if (pkg.predefinedAppImageSigned().orElse(false) && !pkg.isRuntimeInstaller()) {
6969
pkg.predefinedAppImage().ifPresent(predefinedAppImage -> {
7070
var thePackageFile = PackageFile.getPathInAppImage(APPLICATION_LAYOUT);
7171
if (!Files.exists(predefinedAppImage.resolve(thePackageFile))) {

test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JPackageOutputValidator.java

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public JPackageOutputValidator() {
4343
}
4444

4545
public JPackageOutputValidator(JPackageOutputValidator other) {
46-
stdout = other.stdout;
46+
stream = other.stream;
4747
match = other.match;
4848
matchTimestamps = other.matchTimestamps;
4949
stripTimestamps = other.stripTimestamps;
@@ -59,7 +59,7 @@ JPackageOutputValidator copy() {
5959
* @return this
6060
*/
6161
public JPackageOutputValidator stdout() {
62-
stdout = true;
62+
stream = StdStream.OUT;
6363
return this;
6464
}
6565

@@ -68,7 +68,16 @@ public JPackageOutputValidator stdout() {
6868
* @return this
6969
*/
7070
public JPackageOutputValidator stderr() {
71-
stdout = false;
71+
stream = StdStream.ERR;
72+
return this;
73+
}
74+
75+
/**
76+
* Configures this validator to validate both stdout and stderr.
77+
* @return this
78+
*/
79+
public JPackageOutputValidator stdoutAndStderr() {
80+
stream = StdStream.OUT_AND_ERR;
7281
return this;
7382
}
7483

@@ -171,7 +180,7 @@ public JPackageOutputValidator add(JPackageOutputValidator other) {
171180
}
172181

173182
public JPackageOutputValidator compose(JPackageOutputValidator other) {
174-
if (stdout != other.stdout) {
183+
if (stream != other.stream) {
175184
throw new IllegalArgumentException();
176185
}
177186
if (match != other.match) {
@@ -188,7 +197,7 @@ public JPackageOutputValidator compose(JPackageOutputValidator other) {
188197

189198
private Optional<Consumer<Executor.Result>> toResultConsumer(JPackageCommand cmd) {
190199
return toStringIteratorConsumer(cmd).map(validator -> {
191-
return toResultConsumer(validator, stdout, match, label());
200+
return toResultConsumer(validator, stream, match, label());
192201
});
193202
}
194203

@@ -244,7 +253,11 @@ private Optional<Consumer<Iterator<String>>> toStringIteratorConsumer(JPackageCo
244253
}
245254

246255
private String label() {
247-
return stdout ? "'stdout'" : "'stderr'";
256+
return switch (stream) {
257+
case OUT -> "'stdout'";
258+
case ERR -> "'stderr'";
259+
case OUT_AND_ERR -> "'stdout+stderr'";
260+
};
248261
}
249262

250263
private Consumer<Iterator<String>> decorate(TKit.TextStreamVerifier validator) {
@@ -256,17 +269,16 @@ private Consumer<Iterator<String>> decorate(TKit.TextStreamVerifier validator) {
256269
}
257270

258271
private static Consumer<Executor.Result> toResultConsumer(
259-
Consumer<Iterator<String>> validator, boolean stdout, boolean match, String label) {
272+
Consumer<Iterator<String>> validator, StdStream stream, boolean match, String label) {
260273
Objects.requireNonNull(validator);
261274
Objects.requireNonNull(label);
262275

263276
return result -> {
264-
List<String> content;
265-
if (stdout) {
266-
content = result.stdout();
267-
} else {
268-
content = result.stderr();
269-
}
277+
List<String> content = switch (stream) {
278+
case OUT -> result.stdout();
279+
case ERR -> result.stderr();
280+
case OUT_AND_ERR -> result.getOutput();
281+
};
270282

271283
if (match) {
272284
TKit.trace(String.format("Checking %s for exact match against defined validators...", label));
@@ -371,7 +383,14 @@ public void accept(Iterator<String> it) {
371383
}
372384
}
373385

374-
boolean stdout = true;
386+
private enum StdStream {
387+
OUT,
388+
ERR,
389+
OUT_AND_ERR,
390+
;
391+
}
392+
393+
StdStream stream = StdStream.OUT;
375394
boolean match;
376395
boolean matchTimestamps;
377396
boolean stripTimestamps;

test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JPackageStringBundle.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,10 @@ public Pattern cannedFormattedStringAsPattern(String key, Function<Object, Patte
7878
});
7979
}
8080

81+
public Pattern cannedFormattedStringAsPattern(String key, Object ... args) {
82+
return cannedFormattedStringAsPattern(key, MATCH_ANY, args);
83+
}
84+
8185
static Pattern toPattern(MessageFormat mf, Function<Object, Pattern> formatArgMapper, Object ... args) {
8286
Objects.requireNonNull(mf);
8387
Objects.requireNonNull(formatArgMapper);
@@ -154,4 +158,14 @@ Optional<MessageFormat> messageFormat() {
154158
private final Class<?> i18nClass;
155159
private final Method i18nClass_getString;
156160
private final BiFunction<String, Object[], String> formatter;
161+
162+
private static final Function<Object, Pattern> MATCH_ANY = new Function<>() {
163+
164+
@Override
165+
public Pattern apply(Object v) {
166+
return PATTERN;
167+
}
168+
169+
private static final Pattern PATTERN = Pattern.compile(".*");
170+
};
157171
}

test/jdk/tools/jpackage/macosx/SigningRuntimeImagePackageTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
import jdk.jpackage.test.Annotations.ParameterSupplier;
3838
import jdk.jpackage.test.Annotations.Test;
3939
import jdk.jpackage.test.JPackageCommand;
40+
import jdk.jpackage.test.JPackageOutputValidator;
41+
import jdk.jpackage.test.JPackageStringBundle;
4042
import jdk.jpackage.test.MacHelper;
4143
import jdk.jpackage.test.MacHelper.ResolvableCertificateRequest;
4244
import jdk.jpackage.test.MacHelper.SignKeyOption;
@@ -98,6 +100,13 @@ public static void testBundleSignedRuntime() {
98100
cmd.ignoreDefaultRuntime(true);
99101
cmd.removeArgumentWithValue("--input");
100102
cmd.setArgumentValue("--runtime-image", predefinedRuntime.get());
103+
104+
// `warning.per.user.app.image.signed` warning doesn't apply to runtime bundling.
105+
// Ensure the warning is not in the output.
106+
new JPackageOutputValidator().add(TKit.assertTextStream(
107+
JPackageStringBundle.MAIN.cannedFormattedStringAsPattern("warning.per.user.app.image.signed", "file")
108+
).negate()).stdoutAndStderr().applyTo(cmd);
109+
101110
}).addInstallVerifier(cmd -> {
102111
MacSignVerify.verifyAppImageSigned(cmd, signRuntime.certRequest());
103112
}).run();

test/jdk/tools/jpackage/share/AppVersionTest.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@
4646
import java.util.Set;
4747
import java.util.function.Consumer;
4848
import java.util.function.Predicate;
49-
import java.util.regex.Pattern;
5049
import java.util.stream.Stream;
5150
import jdk.internal.util.OperatingSystem;
5251
import jdk.jpackage.internal.util.MacBundle;
@@ -287,9 +286,7 @@ CannedFormattedString cannedFormattedString(Object ... args) {
287286
}
288287

289288
TKit.TextStreamVerifier negateFind() {
290-
var pattern = JPackageStringBundle.MAIN.cannedFormattedStringAsPattern(key, _ -> {
291-
return Pattern.compile(".*");
292-
}, args);
289+
var pattern = JPackageStringBundle.MAIN.cannedFormattedStringAsPattern(key, args);
293290
return TKit.assertTextStream(pattern).negate();
294291
}
295292

@@ -400,7 +397,7 @@ void applyTo(JPackageCommand cmd) {
400397
Stream.of(Message.values()).filter(message -> {
401398
return !expectMessageKeys.contains(message.key());
402399
}).map(Message::negateFind).forEach(validator -> {
403-
new JPackageOutputValidator().add(validator).applyTo(cmd);
400+
new JPackageOutputValidator().add(validator).stdoutAndStderr().applyTo(cmd);
404401
});
405402
}
406403

@@ -760,7 +757,7 @@ private static Set<PackageType> normalize(Collection<PackageType> types) {
760757
private final List<VersionSource> versions = new ArrayList<>();
761758
private final Map<PackageType, Expected> expected = new HashMap<>();
762759

763-
private final static Set<PackageType> ALL_TYPES = Set.of(PackageType.values());
760+
private static final Set<PackageType> ALL_TYPES = Set.of(PackageType.values());
764761
}
765762
}
766763

@@ -1019,7 +1016,7 @@ private Path createRuntime(RuntimeType type, Optional<String> releaseFileVersion
10191016
return predefinedRuntimeDir;
10201017
}
10211018

1022-
final static String MAC_PREDEFINED_RUNTIME_BUNDLE_VERSION = "1.22.333";
1019+
static final String MAC_PREDEFINED_RUNTIME_BUNDLE_VERSION = "1.22.333";
10231020
}
10241021

10251022
private static Consumer<TestSpec> skipImagePackageType(Consumer<TestSpec> consumer) {

0 commit comments

Comments
 (0)