1
0
Fork 0
mirror of https://github.com/pgpainless/pgpainless.git synced 2025-09-09 18:29:39 +02:00

Add test for CompressionAlgorithmNegotiator

This commit is contained in:
Paul Schaub 2025-06-03 12:25:40 +02:00
parent f834ebe6f0
commit 6fe4a6c9c6
Signed by: vanitasvitae
GPG key ID: 62BEE9264BF17311
2 changed files with 71 additions and 1 deletions

View file

@ -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>?
): 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, _ ->

View file

@ -0,0 +1,52 @@
// SPDX-FileCopyrightText: 2025 Paul Schaub <vanitasvitae@fsfe.org>
//
// 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()));
}
}