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
21439854e3
commit
d789d3e0c4
2 changed files with 71 additions and 1 deletions
|
@ -8,13 +8,31 @@ import org.pgpainless.algorithm.CompressionAlgorithm
|
||||||
import org.pgpainless.policy.Policy
|
import org.pgpainless.policy.Policy
|
||||||
|
|
||||||
fun interface CompressionAlgorithmNegotiator {
|
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(
|
fun negotiate(
|
||||||
policy: Policy,
|
policy: Policy,
|
||||||
override: CompressionAlgorithm?,
|
compressionAlgorithmOverride: CompressionAlgorithm?,
|
||||||
orderedPreferences: Set<CompressionAlgorithm>?
|
orderedPreferences: Set<CompressionAlgorithm>?
|
||||||
): CompressionAlgorithm
|
): CompressionAlgorithm
|
||||||
|
|
||||||
companion object {
|
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
|
@JvmStatic
|
||||||
fun staticNegotiation(): CompressionAlgorithmNegotiator =
|
fun staticNegotiation(): CompressionAlgorithmNegotiator =
|
||||||
CompressionAlgorithmNegotiator { policy, override, _ ->
|
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