split random number and uuid generator modules
All checks were successful
Build, test and publish the Quarkus libraries / build (push) Successful in 10m15s

This commit is contained in:
Jorge Bornhausen 2024-10-18 22:23:04 +02:00
parent 15c6263395
commit 0ae750fc0c
13 changed files with 29 additions and 5 deletions

View file

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>ch.phoenixtechnologies.quarkus</groupId>
<artifactId>quarkus-commons</artifactId>
<version>0.1.0-SNAPSHOT</version>
</parent>
<artifactId>quarkus-uuid-generator</artifactId>
<packaging>jar</packaging>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.fasterxml.uuid/java-uuid-generator -->
<dependency>
<groupId>com.fasterxml.uuid</groupId>
<artifactId>java-uuid-generator</artifactId>
<version>${java-uuid-generator.version}</version>
</dependency>
</dependencies>
</project>

View file

@ -0,0 +1,37 @@
package ch.phoenixtechnologies.quarkus.commons.uuid;
import java.util.Random;
import java.util.UUID;
public interface UUIDGenerator {
UUID NAMESPACE_DNS = UUID.fromString("6ba7b810-9dad-11d1-80b4-00c04fd430c8");
UUID NAMESPACE_URL = UUID.fromString("6ba7b811-9dad-11d1-80b4-00c04fd430c8");
UUID NAMESPACE_OID = UUID.fromString("6ba7b812-9dad-11d1-80b4-00c04fd430c8");
UUID NAMESPACE_X500 = UUID.fromString("6ba7b814-9dad-11d1-80b4-00c04fd430c8");
UUID generateV4();
UUID generateV4(Random random);
UUID generateV5(String name);
UUID generateV5(UUID namespace, String name);
default UUID generateV5WithDNSNamespace(String name) {
return generateV5(NAMESPACE_DNS, name);
}
default UUID generateV5WithURLNamespace(String name) {
return generateV5(NAMESPACE_URL, name);
}
default UUID generateV5WithOIDNamespace(String name) {
return generateV5(NAMESPACE_OID, name);
}
default UUID generateV5WithX500Namespace(String name) {
return generateV5(NAMESPACE_X500, name);
}
}

View file

@ -0,0 +1,34 @@
package ch.phoenixtechnologies.quarkus.commons.uuid;
import com.fasterxml.uuid.Generators;
import io.quarkus.arc.DefaultBean;
import jakarta.enterprise.context.ApplicationScoped;
import java.util.Random;
import java.util.UUID;
@DefaultBean
@ApplicationScoped
class UUIDGeneratorImpl implements UUIDGenerator {
@Override
public UUID generateV4() {
return Generators.randomBasedGenerator().generate();
}
@Override
public UUID generateV4(Random random) {
return Generators.randomBasedGenerator(random).generate();
}
@Override
public UUID generateV5(String name) {
return Generators.nameBasedGenerator().generate(name);
}
@Override
public UUID generateV5(UUID namespace, String name) {
return Generators.nameBasedGenerator(namespace).generate(name);
}
}

View file

@ -0,0 +1,118 @@
package ch.phoenixtechnologies.quarkus.commons.uuid;
import ch.phoenixtechnologies.quarkus.commons.uuid.UUIDGeneratorImpl;
import io.quarkus.test.junit.QuarkusTest;
import jakarta.inject.Inject;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import java.util.Random;
import java.util.UUID;
import java.util.stream.Stream;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
@QuarkusTest
class UUIDGeneratorImplTest {
private static final UUID NAMESPACE_DNS = UUID.fromString("6ba7b810-9dad-11d1-80b4-00c04fd430c8");
private static final UUID NAMESPACE_URL = UUID.fromString("6ba7b811-9dad-11d1-80b4-00c04fd430c8");
private static final UUID NAMESPACE_OID = UUID.fromString("6ba7b812-9dad-11d1-80b4-00c04fd430c8");
private static final UUID NAMESPACE_X500 = UUID.fromString("6ba7b814-9dad-11d1-80b4-00c04fd430c8");
private static final String V5_NAME = "test";
private static final UUID EXPECTED_V5_DNS = UUID.fromString("4be0643f-1d98-573b-97cd-ca98a65347dd");
private static final UUID EXPECTED_V5_URL = UUID.fromString("da5b8893-d6ca-5c1c-9a9c-91f40a2a3649");
private static final UUID EXPECTED_V5_OID = UUID.fromString("b428b5d9-df19-5bb9-a1dc-115e071b836c");
private static final UUID EXPECTED_V5_X500 = UUID.fromString("63a3ab2b-61b8-5b04-ae2f-70d3875c6e97");
@Inject
UUIDGeneratorImpl generator;
@Test
void generateV4() {
assertThat(generator.generateV4())
.as("Generated UUID should not be null")
.isNotNull();
}
@Test
void generateV4WithLocalRandom() {
var expected = UUID.fromString("b22f5354-f5ed-4f02-bca8-8882a6ec4750");
var actual = generator.generateV4(getRandom());
assertThat(actual)
.as("Generated UUID should match expected value")
.isEqualTo(expected);
}
@Test
void generateV5() {
var expected = UUID.fromString("a94a8fe5-ccb1-5ba6-9c4c-0873d391e987");
var actual = generator.generateV5("test");
assertThat(actual)
.as("Generated UUID should match expected value")
.isEqualTo(expected);
}
public static Stream<Arguments> generateV5WithNamespace() {
return Stream.of(
Arguments.of(NAMESPACE_DNS, V5_NAME, EXPECTED_V5_DNS),
Arguments.of(NAMESPACE_URL, V5_NAME, EXPECTED_V5_URL),
Arguments.of(NAMESPACE_OID, V5_NAME, EXPECTED_V5_OID),
Arguments.of(NAMESPACE_X500, V5_NAME, EXPECTED_V5_X500)
);
}
@MethodSource
@ParameterizedTest
void generateV5WithNamespace(UUID namespace, String name, UUID expected) {
var actual = generator.generateV5(namespace, name);
assertThat(actual)
.as("Generated UUID should match expected value")
.isEqualTo(expected);
}
@Test
void generateV5WithDNSNamespace() {
var actual = generator.generateV5WithDNSNamespace(V5_NAME);
assertThat(actual)
.as("Generated UUID should match expected value")
.isEqualTo(EXPECTED_V5_DNS);
}
@Test
void generateV5WithURLNamespace() {
var actual = generator.generateV5WithURLNamespace(V5_NAME);
assertThat(actual)
.as("Generated UUID should match expected value")
.isEqualTo(EXPECTED_V5_URL);
}
@Test
void generateV5WithOIDNamespace() {
assertThat(generator.generateV5WithOIDNamespace(V5_NAME))
.as("Generated UUID should match expected value")
.isEqualTo(EXPECTED_V5_OID);
}
@Test
void generateV5WithX500Namespace() {
assertThat(generator.generateV5WithX500Namespace(V5_NAME))
.as("Generated UUID should match expected value")
.isEqualTo(EXPECTED_V5_X500);
}
private static Random getRandom() {
return new Random(24353L);
}
}