From d789d3e0c4945892c216bd8748f2615abcdfb916 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Tue, 3 Jun 2025 12:25:40 +0200 Subject: [PATCH] Add test for CompressionAlgorithmNegotiator --- .../CompressionAlgorithmNegotiator.kt | 20 ++++++- .../CompressionAlgorithmNegotiatorTest.java | 52 +++++++++++++++++++ 2 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 pgpainless-core/src/test/java/org/pgpainless/algorithm/negotiation/CompressionAlgorithmNegotiatorTest.java diff --git a/pgpainless-core/src/main/kotlin/org/pgpainless/algorithm/negotiation/CompressionAlgorithmNegotiator.kt b/pgpainless-core/src/main/kotlin/org/pgpainless/algorithm/negotiation/CompressionAlgorithmNegotiator.kt index a028fc84..ab3128db 100644 --- a/pgpainless-core/src/main/kotlin/org/pgpainless/algorithm/negotiation/CompressionAlgorithmNegotiator.kt +++ b/pgpainless-core/src/main/kotlin/org/pgpainless/algorithm/negotiation/CompressionAlgorithmNegotiator.kt @@ -8,13 +8,31 @@ import org.pgpainless.algorithm.CompressionAlgorithm import org.pgpainless.policy.Policy fun interface CompressionAlgorithmNegotiator { + + /** + * Negotiate a suitable [CompressionAlgorithm] by taking into consideration the [Policy], a + * user-provided [compressionAlgorithmOverride] and the users set of [orderedPreferences]. + * + * @param policy implementations [Policy] + * @param compressionAlgorithmOverride user-provided [CompressionAlgorithm] override. + * @param orderedPreferences preferred compression algorithms taken from the users certificate + * @return negotiated [CompressionAlgorithm] + */ fun negotiate( policy: Policy, - override: CompressionAlgorithm?, + compressionAlgorithmOverride: CompressionAlgorithm?, orderedPreferences: Set? ): CompressionAlgorithm companion object { + + /** + * Static negotiation of compression algorithms. This implementation discards compression + * algorithm preferences and instead either returns the non-null algorithm override, + * otherwise the policies default hash algorithm. + * + * @return delegate implementation + */ @JvmStatic fun staticNegotiation(): CompressionAlgorithmNegotiator = CompressionAlgorithmNegotiator { policy, override, _ -> diff --git a/pgpainless-core/src/test/java/org/pgpainless/algorithm/negotiation/CompressionAlgorithmNegotiatorTest.java b/pgpainless-core/src/test/java/org/pgpainless/algorithm/negotiation/CompressionAlgorithmNegotiatorTest.java new file mode 100644 index 00000000..ced8b4a1 --- /dev/null +++ b/pgpainless-core/src/test/java/org/pgpainless/algorithm/negotiation/CompressionAlgorithmNegotiatorTest.java @@ -0,0 +1,52 @@ +// SPDX-FileCopyrightText: 2025 Paul Schaub +// +// SPDX-License-Identifier: Apache-2.0 + +package org.pgpainless.algorithm.negotiation; + +import org.junit.jupiter.api.Test; +import org.pgpainless.PGPainless; +import org.pgpainless.algorithm.CompressionAlgorithm; +import org.pgpainless.policy.Policy; + +import java.util.Arrays; +import java.util.Collections; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class CompressionAlgorithmNegotiatorTest { + + @Test + public void staticNegotiateWithoutOverride() { + Policy policy = PGPainless.getInstance().getAlgorithmPolicy() + .copy() + .withCompressionAlgorithmPolicy(new Policy.CompressionAlgorithmPolicy( + CompressionAlgorithm.BZIP2, + Arrays.asList(CompressionAlgorithm.BZIP2, CompressionAlgorithm.UNCOMPRESSED) + )) + .build(); + CompressionAlgorithmNegotiator negotiator = CompressionAlgorithmNegotiator.staticNegotiation(); + + // If the user did not pass an override, return the policy default + assertEquals( + CompressionAlgorithm.BZIP2, + negotiator.negotiate(policy, null, Collections.emptySet())); + } + + @Test + public void staticNegotiateWithOverride() { + Policy policy = PGPainless.getInstance().getAlgorithmPolicy() + .copy() + .withCompressionAlgorithmPolicy(new Policy.CompressionAlgorithmPolicy( + CompressionAlgorithm.BZIP2, + Arrays.asList(CompressionAlgorithm.BZIP2, CompressionAlgorithm.UNCOMPRESSED) + )) + .build(); + CompressionAlgorithmNegotiator negotiator = CompressionAlgorithmNegotiator.staticNegotiation(); + + // If the user passed an override, return that + assertEquals( + CompressionAlgorithm.ZLIB, + negotiator.negotiate(policy, CompressionAlgorithm.ZLIB, Collections.emptySet())); + } +}