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:
parent
f834ebe6f0
commit
6fe4a6c9c6
2 changed files with 71 additions and 1 deletions
|
@ -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, _ ->
|
||||
|
|
|
@ -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()));
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue