Skip to content

Commit

Permalink
Factory/conversion methods in PortAssigner enums (#466)
Browse files Browse the repository at this point in the history
* Add factory method to create PortAssigner.PortAssignment from a boolean
* Add factory method to create PortAssigner.PortSecurity from a boolean
* Add methods to convert between PortAssigner.PortSecurity and Port.Security

Closes #463
Closes #464
Closes #465
  • Loading branch information
sleberknight committed Apr 26, 2024
1 parent f183d8e commit da74f24
Show file tree
Hide file tree
Showing 3 changed files with 112 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,25 @@

import org.kiwiproject.dropwizard.util.startup.AllowablePortRange;
import org.kiwiproject.dropwizard.util.startup.PortAssigner;
import org.kiwiproject.dropwizard.util.startup.PortAssigner.PortAssignment;
import org.kiwiproject.dropwizard.util.startup.PortAssigner.PortSecurity;

@UtilityClass
class PortAssigners {

static PortAssigner.PortAssignment portAssignmentFrom(DynamicPortsConfiguration dynamicPortsConfig) {
return dynamicPortsConfig.isUseDynamicPorts() ?
PortAssigner.PortAssignment.DYNAMIC : PortAssigner.PortAssignment.STATIC;
static PortAssignment portAssignmentFrom(DynamicPortsConfiguration dynamicPortsConfig) {
return PortAssignment.fromBooleanDynamicWhenTrue(dynamicPortsConfig.isUseDynamicPorts());
}

static PortAssigner.PortAssignment portAssignmentFrom(StartupLockConfiguration startupLockConfig) {
return startupLockConfig.isUseDynamicPorts() ?
PortAssigner.PortAssignment.DYNAMIC : PortAssigner.PortAssignment.STATIC;
static PortAssignment portAssignmentFrom(StartupLockConfiguration startupLockConfig) {
return PortAssignment.fromBooleanDynamicWhenTrue(startupLockConfig.isUseDynamicPorts());
}

static AllowablePortRange allowablePortRangeFrom(DynamicPortsConfiguration dynamicPortsConfig) {
return new AllowablePortRange(dynamicPortsConfig.getMinDynamicPort(), dynamicPortsConfig.getMaxDynamicPort());
}

static PortAssigner.PortSecurity portSecurityFrom(DynamicPortsConfiguration dynamicPortsConfig) {
return dynamicPortsConfig.isUseSecureDynamicPorts() ?
PortAssigner.PortSecurity.SECURE : PortAssigner.PortSecurity.NON_SECURE;
return PortSecurity.fromBooleanSecureWhenTrue(dynamicPortsConfig.isUseSecureDynamicPorts());
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.kiwiproject.dropwizard.util.startup;

import static java.util.Objects.isNull;
import static org.kiwiproject.base.KiwiPreconditions.checkArgumentNotNull;
import static org.kiwiproject.base.KiwiPreconditions.requireNotNull;
import static org.kiwiproject.base.KiwiStrings.format;
import static org.kiwiproject.collect.KiwiLists.first;
Expand Down Expand Up @@ -50,12 +51,58 @@
@Getter(AccessLevel.PACKAGE) // For testing
public class PortAssigner {

/**
* An enum that represents static or dynamic port assignment.
*/
public enum PortAssignment {
STATIC, DYNAMIC
STATIC, DYNAMIC;

/**
* Return {@link #DYNAMIC} when the given value is true, otherwise {@link #STATIC}.
*
* @param value the boolean value to convert
* @return the equivalent {@link PortAssignment} instance
*/
public static PortAssignment fromBooleanDynamicWhenTrue(boolean value) {
return value ? DYNAMIC : STATIC;
}
}

/**
* An enum that represents whether a port is secure (HTTPS) or not secure (HTTP).
*/
public enum PortSecurity {
SECURE, NON_SECURE
SECURE, NON_SECURE;

/**
* Return {@link #SECURE} when the given value is true, otherwise {@link #NON_SECURE}.
*
* @param value the boolean value to convert
* @return the equivalent {@link PortSecurity} instance
*/
public static PortSecurity fromBooleanSecureWhenTrue(boolean value) {
return value ? SECURE : NON_SECURE;
}

/**
* Return the instance of this enum which is equivalent to the given {@link Port.Security}.
*
* @param security the {@link Port.Security} value to convert
* @return
*/
public static PortSecurity fromSecurity(Port.Security security) {
checkArgumentNotNull(security, "security must not be null");
return (security == Port.Security.SECURE) ? SECURE : NON_SECURE;
}

/**
* Convert this instance to a {@link Port.Security} instance.
*
* @return the equivalent {@link Port.Security} instance
*/
public Port.Security toSecurity() {
return (this == PortSecurity.SECURE) ? Port.Security.SECURE : Port.Security.NOT_SECURE;
}
}

private final LocalPortChecker localPortChecker;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.kiwiproject.dropwizard.util.startup;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.junit.jupiter.api.Assertions.assertAll;
import static org.kiwiproject.collect.KiwiLists.first;
Expand All @@ -24,8 +25,12 @@
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.kiwiproject.config.TlsContextConfiguration;
import org.kiwiproject.dropwizard.util.exception.NoAvailablePortException;
import org.kiwiproject.dropwizard.util.startup.PortAssigner.PortAssignment;
import org.kiwiproject.dropwizard.util.startup.PortAssigner.PortSecurity;
import org.kiwiproject.net.LocalPortChecker;
import org.kiwiproject.registry.model.Port;

Expand Down Expand Up @@ -597,4 +602,55 @@ private static int firstAdminPort(DefaultServerFactory serverFactory) {
private static int getPort(ConnectorFactory connectorFactory) {
return ((HttpConnectorFactory) connectorFactory).getPort();
}

@Nested
class PortAssignmentEnum {

@ParameterizedTest
@CsvSource(textBlock = """
true, DYNAMIC
false, STATIC
""")
void shouldCreateFromBooleanValues(boolean value, PortAssignment expectedPortAssignment) {
assertThat(PortAssignment.fromBooleanDynamicWhenTrue(value)).isEqualTo(expectedPortAssignment);
}
}

@Nested
class PortSecurityEnum {

@ParameterizedTest
@CsvSource(textBlock = """
true, SECURE
false, NON_SECURE
""")
void shouldCreateFromBooleanValues(boolean value, PortSecurity expectedPortSecurity) {
assertThat(PortSecurity.fromBooleanSecureWhenTrue(value)).isEqualTo(expectedPortSecurity);
}

@ParameterizedTest
@CsvSource(textBlock = """
SECURE, SECURE
NOT_SECURE, NON_SECURE
""")
void shouldCreateFromSecurityEnumInPortClass(Port.Security security, PortSecurity expectedPortSecurity) {
assertThat(PortSecurity.fromSecurity(security)).isEqualTo(expectedPortSecurity);
}

@Test
void shouldRequireNonNullSecurityEnumValue() {
assertThatIllegalArgumentException()
.isThrownBy(() -> PortSecurity.fromSecurity(null))
.withMessage("security must not be null");
}

@ParameterizedTest
@CsvSource(textBlock = """
SECURE, SECURE
NON_SECURE, NOT_SECURE
""")
void shouldConvertToSecurityEnumInPortClass(PortSecurity portSecurity, Port.Security expectedSecurity) {
assertThat(portSecurity.toSecurity()).isEqualTo(expectedSecurity);
}
}
}

0 comments on commit da74f24

Please sign in to comment.