Skip to content

Commit e53fb83

Browse files
committed
Add tests for UdtUtil and COPY FROM command
and move testing utilitary classes into a new package 'testing'
1 parent 1e5937f commit e53fb83

29 files changed

+339
-84
lines changed

Diff for: src/main/java/com/ing/data/cassandra/jdbc/commands/CopyFromCommandExecutor.java

+33-13
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import java.io.IOException;
3333
import java.sql.SQLException;
3434
import java.sql.SQLSyntaxErrorException;
35-
import java.sql.Statement;
3635
import java.sql.Types;
3736
import java.text.ParseException;
3837
import java.util.ArrayList;
@@ -48,7 +47,12 @@
4847
import static com.ing.data.cassandra.jdbc.commands.SpecialCommandsUtil.LOG;
4948
import static com.ing.data.cassandra.jdbc.commands.SpecialCommandsUtil.translateFilename;
5049
import static com.ing.data.cassandra.jdbc.utils.DriverUtil.COMMA;
50+
import static com.ing.data.cassandra.jdbc.utils.DriverUtil.DURATION_FORMAT_PATTERN;
51+
import static com.ing.data.cassandra.jdbc.utils.DriverUtil.DURATION_ISO8601_ALT_FORMAT_PATTERN;
52+
import static com.ing.data.cassandra.jdbc.utils.DriverUtil.DURATION_ISO8601_FORMAT_PATTERN;
5153
import static com.ing.data.cassandra.jdbc.utils.DriverUtil.SINGLE_QUOTE;
54+
import static com.ing.data.cassandra.jdbc.utils.DriverUtil.UUID_V1_PATTERN;
55+
import static com.ing.data.cassandra.jdbc.utils.DriverUtil.UUID_V4_PATTERN;
5256
import static com.ing.data.cassandra.jdbc.utils.ErrorConstants.CANNOT_READ_CSV_FILE;
5357
import static com.ing.data.cassandra.jdbc.utils.ErrorConstants.COLUMN_DEFINITIONS_RETRIEVAL_FAILED;
5458
import static com.ing.data.cassandra.jdbc.utils.ErrorConstants.CSV_FILE_NOT_FOUND;
@@ -193,7 +197,7 @@ public ResultSet execute(final CassandraStatement statement, final String cql) t
193197
}
194198
setTargetColumnsIfNotSpecified();
195199

196-
final Statement insertStatement = connection.createStatement();
200+
final CassandraStatement insertStatement = (CassandraStatement) connection.createStatement();
197201

198202
final boolean hasHeaders = Boolean.parseBoolean(this.options.getProperty(OPTION_HEADER));
199203
final Set<String> skippedColumns = Arrays.stream(((String) this.options.getOrDefault(OPTION_SKIPCOLS, EMPTY))
@@ -305,7 +309,7 @@ private Map<Integer, String> mapColumnsFromArray(final String[] columnsNames) {
305309
return csvColumns;
306310
}
307311

308-
private void handleValuesToInsert(final Statement statement,
312+
private void handleValuesToInsert(final CassandraStatement statement,
309313
final String[] row,
310314
final Map<Integer, String> csvColumns,
311315
final List<String> columnsToImport) {
@@ -325,6 +329,9 @@ private void handleValuesToInsert(final Statement statement,
325329
String.join(COMMA, values));
326330
try {
327331
statement.addBatch(cql);
332+
if (LOG.isTraceEnabled() || statement.getCassandraConnection().isDebugMode()) {
333+
LOG.trace("Added to batch: {}", cql);
334+
}
328335
} catch (final SQLException e) {
329336
LOG.warn("Failed to add statement to the batch: {}", cql, e);
330337
}
@@ -369,12 +376,6 @@ private String parseValue(final String value, final Integer colType) {
369376
case Types.TIMESTAMP:
370377
case Types.TIMESTAMP_WITH_TIMEZONE:
371378
// We assume here the date-time values respect the default date-time format supported by Cassandra CQL.
372-
case Types.BINARY:
373-
case Types.VARBINARY:
374-
case Types.LONGVARBINARY:
375-
case Types.BLOB:
376-
case Types.CLOB:
377-
case Types.NCLOB:
378379
case Types.NVARCHAR:
379380
case Types.NCHAR:
380381
case Types.LONGNVARCHAR:
@@ -383,11 +384,30 @@ private String parseValue(final String value, final Integer colType) {
383384
case Types.CHAR:
384385
case Types.DATALINK:
385386
return wrap(value, SINGLE_QUOTE);
386-
case Types.OTHER:
387+
case Types.BINARY:
388+
case Types.VARBINARY:
389+
case Types.LONGVARBINARY:
390+
case Types.BLOB:
391+
case Types.CLOB:
392+
case Types.NCLOB:
393+
// We assume blob values are represented as text in imported CSV files.
394+
return String.format("textAsBlob('%s')", value);
387395
case Types.ARRAY:
388-
// We assume the format provided for other types (tuples, maps, arrays, ...) is correct and does not
389-
// require any transformation.
390-
return value;
396+
case Types.OTHER:
397+
// We assume the format provided for collection types (tuples, maps, arrays, ...) is correct and does
398+
// not require any transformation.
399+
if (value.matches("[\\[({].*[])}]")) {
400+
return value;
401+
}
402+
// DURATION, TIMEUUID and UUID types does not require any transformation.
403+
if (UUID_V1_PATTERN.matcher(value).matches() || UUID_V4_PATTERN.matcher(value).matches()
404+
|| DURATION_FORMAT_PATTERN.matcher(value).matches()
405+
|| DURATION_ISO8601_FORMAT_PATTERN.matcher(value).matches()
406+
|| DURATION_ISO8601_ALT_FORMAT_PATTERN.matcher(value).matches()) {
407+
return value;
408+
}
409+
// For the others, wrap the value with single quotes.
410+
return wrap(value, SINGLE_QUOTE);
391411
default:
392412
// Types JAVA_OBJECT, DISTINCT, STRUCT, REF, ROWID, SQLXML, REF_CURSOR are not supported.
393413
return null;

Diff for: src/main/java/com/ing/data/cassandra/jdbc/utils/DriverUtil.java

+36
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import java.util.List;
3737
import java.util.Objects;
3838
import java.util.Properties;
39+
import java.util.regex.Pattern;
3940
import java.util.stream.Collectors;
4041

4142
import static com.ing.data.cassandra.jdbc.utils.JdbcUrlUtil.TAG_PASSWORD;
@@ -101,6 +102,41 @@ public final class DriverUtil {
101102
*/
102103
public static final String SINGLE_QUOTE = "'";
103104

105+
/**
106+
* UUIDv1 pattern, used by {@code TIMEUUID} CQL type.
107+
*/
108+
public static final Pattern UUID_V1_PATTERN = Pattern.compile(
109+
"^[0-9A-F]{8}-[0-9A-F]{4}-1[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$", Pattern.CASE_INSENSITIVE);
110+
111+
/**
112+
* UUIDv4 pattern, used by {@code UUID} CQL type.
113+
*/
114+
public static final Pattern UUID_V4_PATTERN = Pattern.compile(
115+
"^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$", Pattern.CASE_INSENSITIVE);
116+
117+
/**
118+
* Duration format pattern, used by {@code DURATION} CQL type.
119+
* See: <a href="https://cassandra.apache.org/doc/stable/cassandra/cql/types.html#durations">Duration CQL type</a>
120+
*/
121+
public static final Pattern DURATION_FORMAT_PATTERN = Pattern.compile(
122+
"^(\\d+y)?(\\d+mo)?(\\d+w)?(\\d+d)?(\\d+h)?(\\d+m)?(\\d+s)?(\\d+ms)?(\\d+us)?(\\d+ns)?$"
123+
);
124+
125+
/**
126+
* ISO-8601 duration format pattern, used by {@code DURATION} CQL type.
127+
* See: <a href="https://cassandra.apache.org/doc/stable/cassandra/cql/types.html#durations">Duration CQL type</a>
128+
*/
129+
public static final Pattern DURATION_ISO8601_FORMAT_PATTERN = Pattern.compile(
130+
"^P((\\d+Y)?(\\d+M)?(\\d+D)?T(\\d+H)?(\\d+M)?(\\d+S)?)?|(\\d+W)?$"
131+
);
132+
133+
/**
134+
* Alternative ISO-8601 duration format pattern, used by {@code DURATION} CQL type.
135+
* See: <a href="https://cassandra.apache.org/doc/stable/cassandra/cql/types.html#durations">Duration CQL type</a>
136+
*/
137+
public static final Pattern DURATION_ISO8601_ALT_FORMAT_PATTERN = Pattern.compile(
138+
"^P\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$");
139+
104140
static final Logger LOG = LoggerFactory.getLogger(DriverUtil.class);
105141

106142
private DriverUtil() {

Diff for: src/main/java/com/ing/data/cassandra/jdbc/utils/UdtUtil.java

+7-4
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import com.datastax.oss.driver.api.core.type.reflect.GenericType;
2121
import com.datastax.oss.driver.internal.core.data.DefaultUdtValue;
2222

23+
import java.util.LinkedHashMap;
24+
import java.util.LinkedHashSet;
2325
import java.util.List;
2426
import java.util.Map;
2527
import java.util.Set;
@@ -63,7 +65,7 @@ public static Set<UdtValue> udtValuesUsingFormattedContents(final Set<?> set) {
6365
if (set != null) {
6466
return set.stream()
6567
.map(item -> udtValueUsingFormattedContents((UdtValue) item))
66-
.collect(Collectors.toSet());
68+
.collect(Collectors.toCollection(LinkedHashSet::new));
6769
}
6870
return null;
6971
}
@@ -83,18 +85,19 @@ public static Set<UdtValue> udtValuesUsingFormattedContents(final Set<?> set) {
8385
.collect(Collectors.toMap(
8486
entry -> {
8587
final Object key = entry.getKey();
86-
if (key.getClass().isAssignableFrom(UdtValue.class)) {
88+
if (UdtValue.class.isAssignableFrom(key.getClass())) {
8789
return udtValueUsingFormattedContents((UdtValue) key);
8890
}
8991
return key;
9092
},
9193
entry -> {
9294
final Object value = entry.getValue();
93-
if (value.getClass().isAssignableFrom(UdtValue.class)) {
95+
if (UdtValue.class.isAssignableFrom(value.getClass())) {
9496
return udtValueUsingFormattedContents((UdtValue) value);
9597
}
9698
return value;
97-
})
99+
},
100+
(k, v) -> v, LinkedHashMap::new)
98101
);
99102
}
100103
return null;

Diff for: src/test/java/com/ing/data/cassandra/jdbc/CollectionsUnitTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import com.datastax.oss.driver.api.core.data.TupleValue;
1717
import com.datastax.oss.driver.api.core.data.UdtValue;
1818
import com.ing.data.cassandra.jdbc.utils.ArrayImpl;
19-
import com.ing.data.cassandra.jdbc.utils.CustomArrayImpl;
19+
import com.ing.data.cassandra.jdbc.testing.CustomArrayImpl;
2020
import org.junit.jupiter.api.BeforeAll;
2121
import org.junit.jupiter.api.Test;
2222

Diff for: src/test/java/com/ing/data/cassandra/jdbc/ConnectionUnitTest.java

+14-14
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@
3333
import com.datastax.oss.driver.internal.core.retry.DefaultRetryPolicy;
3434
import com.datastax.oss.driver.internal.core.type.codec.registry.DefaultCodecRegistry;
3535
import com.ing.data.cassandra.jdbc.optionset.Liquibase;
36-
import com.ing.data.cassandra.jdbc.utils.AnotherFakeLoadBalancingPolicy;
37-
import com.ing.data.cassandra.jdbc.utils.AnotherFakeRetryPolicy;
38-
import com.ing.data.cassandra.jdbc.utils.FakeLoadBalancingPolicy;
39-
import com.ing.data.cassandra.jdbc.utils.FakeReconnectionPolicy;
40-
import com.ing.data.cassandra.jdbc.utils.FakeRetryPolicy;
41-
import com.ing.data.cassandra.jdbc.utils.FakeSslEngineFactory;
36+
import com.ing.data.cassandra.jdbc.testing.AnotherFakeLoadBalancingPolicy;
37+
import com.ing.data.cassandra.jdbc.testing.AnotherFakeRetryPolicy;
38+
import com.ing.data.cassandra.jdbc.testing.FakeLoadBalancingPolicy;
39+
import com.ing.data.cassandra.jdbc.testing.FakeReconnectionPolicy;
40+
import com.ing.data.cassandra.jdbc.testing.FakeRetryPolicy;
41+
import com.ing.data.cassandra.jdbc.testing.FakeSslEngineFactory;
4242
import org.hamcrest.Matchers;
4343
import org.junit.jupiter.api.Test;
4444
import org.mockito.ArgumentCaptor;
@@ -155,10 +155,10 @@ void givenValidConfigurationFile_whenGetConnection_createConnectionWithExpectedC
155155
initConnection(KEYSPACE, "configfile=" + confTestUrl.getPath(), "localdatacenter=DC2",
156156
"user=aTestUser", "password=aTestPassword", "serialconsistency=SERIAL", "consistency=ONE",
157157
"requesttimeout=5000", "connecttimeout=8000", "keepalive=false", "tcpnodelay=true", "fetchsize=2000",
158-
"loadbalancing=com.ing.data.cassandra.jdbc.utils.FakeLoadBalancingPolicy",
159-
"retry=com.ing.data.cassandra.jdbc.utils.FakeRetryPolicy",
160-
"reconnection=com.ing.data.cassandra.jdbc.utils.FakeReconnectionPolicy()",
161-
"sslenginefactory=com.ing.data.cassandra.jdbc.utils.FakeSslEngineFactory");
158+
"loadbalancing=com.ing.data.cassandra.jdbc.testing.FakeLoadBalancingPolicy",
159+
"retry=com.ing.data.cassandra.jdbc.testing.FakeRetryPolicy",
160+
"reconnection=com.ing.data.cassandra.jdbc.testing.FakeReconnectionPolicy()",
161+
"sslenginefactory=com.ing.data.cassandra.jdbc.testing.FakeSslEngineFactory");
162162
assertNotNull(sqlConnection);
163163
assertNotNull(sqlConnection.getSession());
164164
assertNotNull(sqlConnection.getSession().getContext());
@@ -275,7 +275,7 @@ void givenNoLoadBalancingPolicy_whenGetConnection_createConnectionWithExpectedCo
275275

276276
@Test
277277
void givenCustomLoadBalancingPolicy_whenGetConnection_createConnectionWithExpectedConfig() throws Exception {
278-
initConnection(KEYSPACE, "loadbalancing=com.ing.data.cassandra.jdbc.utils.FakeLoadBalancingPolicy");
278+
initConnection(KEYSPACE, "loadbalancing=com.ing.data.cassandra.jdbc.testing.FakeLoadBalancingPolicy");
279279
assertNotNull(sqlConnection);
280280
assertNotNull(sqlConnection.getSession());
281281
assertNotNull(sqlConnection.getSession().getContext());
@@ -308,7 +308,7 @@ void givenNoRetryPolicy_whenGetConnection_createConnectionWithExpectedConfig() t
308308

309309
@Test
310310
void givenCustomRetryPolicy_whenGetConnection_createConnectionWithExpectedConfig() throws Exception {
311-
initConnection(KEYSPACE, "retry=com.ing.data.cassandra.jdbc.utils.FakeRetryPolicy", "localdatacenter=datacenter1");
311+
initConnection(KEYSPACE, "retry=com.ing.data.cassandra.jdbc.testing.FakeRetryPolicy", "localdatacenter=datacenter1");
312312
assertNotNull(sqlConnection);
313313
assertNotNull(sqlConnection.getSession());
314314
assertNotNull(sqlConnection.getSession().getContext());
@@ -355,7 +355,7 @@ void givenExponentialReconnectionPolicy_whenGetConnection_createConnectionWithEx
355355

356356
@Test
357357
void givenCustomReconnectionPolicy_whenGetConnection_createConnectionWithExpectedConfig() throws Exception {
358-
initConnection(KEYSPACE, "reconnection=com.ing.data.cassandra.jdbc.utils.FakeReconnectionPolicy()",
358+
initConnection(KEYSPACE, "reconnection=com.ing.data.cassandra.jdbc.testing.FakeReconnectionPolicy()",
359359
"localdatacenter=datacenter1");
360360
assertNotNull(sqlConnection);
361361
assertNotNull(sqlConnection.getSession());
@@ -474,7 +474,7 @@ void givenSslEngineFactory_whenConfigureSsl_addGivenSslEngineFactoryToSessionBui
474474
cassandraContainer.getContactPoint().getPort(), KEYSPACE, "localdatacenter=datacenter1")), null);
475475
final CqlSessionBuilder cqlSessionBuilder = spy(new CqlSessionBuilder());
476476
sessionHolder.configureSslEngineFactory(cqlSessionBuilder,
477-
"com.ing.data.cassandra.jdbc.utils.FakeSslEngineFactory");
477+
"com.ing.data.cassandra.jdbc.testing.FakeSslEngineFactory");
478478
verify(cqlSessionBuilder).withSslEngineFactory(any(FakeSslEngineFactory.class));
479479
}
480480

Diff for: src/test/java/com/ing/data/cassandra/jdbc/DataSourceUnitTest.java

+12-12
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424
import com.datastax.oss.driver.api.core.retry.RetryPolicy;
2525
import com.datastax.oss.driver.internal.core.connection.ConstantReconnectionPolicy;
2626
import com.datastax.oss.driver.internal.core.context.InternalDriverContext;
27-
import com.ing.data.cassandra.jdbc.utils.AnotherFakeLoadBalancingPolicy;
28-
import com.ing.data.cassandra.jdbc.utils.AnotherFakeRetryPolicy;
27+
import com.ing.data.cassandra.jdbc.testing.AnotherFakeLoadBalancingPolicy;
28+
import com.ing.data.cassandra.jdbc.testing.AnotherFakeRetryPolicy;
2929
import com.ing.data.cassandra.jdbc.utils.ContactPoint;
3030
import org.junit.jupiter.api.Test;
3131

@@ -112,12 +112,12 @@ void givenParameters_whenConstructDataSource_returnCassandraDataSource() {
112112
assertEquals(SERIAL_CONSISTENCY, ds.getSerialConsistency());
113113
ds.setActiveProfile("custom_profile");
114114
assertEquals("custom_profile", ds.getActiveProfile());
115-
ds.setRetryPolicy("com.ing.data.cassandra.jdbc.utils.FakeRetryPolicy");
116-
assertEquals("com.ing.data.cassandra.jdbc.utils.FakeRetryPolicy", ds.getRetryPolicy());
117-
ds.setLoadBalancingPolicy("com.ing.data.cassandra.jdbc.utils.FakeLoadBalancingPolicy");
118-
assertEquals("com.ing.data.cassandra.jdbc.utils.FakeLoadBalancingPolicy", ds.getLoadBalancingPolicy());
119-
ds.setReconnectionPolicy("com.ing.data.cassandra.jdbc.utils.FakeReconnectionPolicy()");
120-
assertEquals("com.ing.data.cassandra.jdbc.utils.FakeReconnectionPolicy()", ds.getReconnectionPolicy());
115+
ds.setRetryPolicy("com.ing.data.cassandra.jdbc.testing.FakeRetryPolicy");
116+
assertEquals("com.ing.data.cassandra.jdbc.testing.FakeRetryPolicy", ds.getRetryPolicy());
117+
ds.setLoadBalancingPolicy("com.ing.data.cassandra.jdbc.testing.FakeLoadBalancingPolicy");
118+
assertEquals("com.ing.data.cassandra.jdbc.testing.FakeLoadBalancingPolicy", ds.getLoadBalancingPolicy());
119+
ds.setReconnectionPolicy("com.ing.data.cassandra.jdbc.testing.FakeReconnectionPolicy()");
120+
assertEquals("com.ing.data.cassandra.jdbc.testing.FakeReconnectionPolicy()", ds.getReconnectionPolicy());
121121
ds.setFetchSize(500);
122122
assertEquals(500, ds.getFetchSize());
123123
ds.setRequestTimeout(5_000L);
@@ -127,8 +127,8 @@ void givenParameters_whenConstructDataSource_returnCassandraDataSource() {
127127
ds.setSslEnabled(true);
128128
assertTrue(ds.isSslEnabled());
129129
assertTrue(ds.isHostnameVerified()); // true when SSL enabled with DefaultSslEngineFactory.
130-
ds.setSslEngineFactory("com.ing.data.cassandra.jdbc.utils.FakeSslEngineFactory");
131-
assertEquals("com.ing.data.cassandra.jdbc.utils.FakeSslEngineFactory", ds.getSslEngineFactory());
130+
ds.setSslEngineFactory("com.ing.data.cassandra.jdbc.testing.FakeSslEngineFactory");
131+
assertEquals("com.ing.data.cassandra.jdbc.testing.FakeSslEngineFactory", ds.getSslEngineFactory());
132132
assertFalse(ds.isHostnameVerified()); // false when SSL enabled with custom SslEngineFactory.
133133
ds.setHostnameVerified(true);
134134
assertTrue(ds.isHostnameVerified());
@@ -188,8 +188,8 @@ void givenDataSourceWithUrl_whenConnect_returnCassandraConnection() throws Excep
188188
final CassandraDataSource ds = new CassandraDataSource(CONTACT_POINTS, KEYSPACE);
189189
ds.setURL(buildJdbcUrl(CONTACT_POINT_HOST, CONTACT_POINT_PORT, KEYSPACE, "consistency=TWO",
190190
"serialconsistency=LOCAL_SERIAL", "fetchsize=5000", "localdatacenter=DC1",
191-
"loadbalancing=com.ing.data.cassandra.jdbc.utils.AnotherFakeLoadBalancingPolicy",
192-
"requesttimeout=8000", "retry=com.ing.data.cassandra.jdbc.utils.AnotherFakeRetryPolicy",
191+
"loadbalancing=com.ing.data.cassandra.jdbc.testing.AnotherFakeLoadBalancingPolicy",
192+
"requesttimeout=8000", "retry=com.ing.data.cassandra.jdbc.testing.AnotherFakeRetryPolicy",
193193
"reconnection=ConstantReconnectionPolicy((long)10)", "connecttimeout=15000", "tcpnodelay=false",
194194
"keepalive=true", "user=testUser", "password=testPassword"));
195195

Diff for: src/test/java/com/ing/data/cassandra/jdbc/JsonSupportUnitTest.java

+5-8
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
package com.ing.data.cassandra.jdbc;
1515

1616
import com.datastax.oss.driver.api.core.uuid.Uuids;
17-
import com.ing.data.cassandra.jdbc.utils.CustomObject;
18-
import com.ing.data.cassandra.jdbc.utils.CustomObjectStringOnly;
19-
import com.ing.data.cassandra.jdbc.utils.JsonResult;
17+
import com.ing.data.cassandra.jdbc.testing.CustomObject;
18+
import com.ing.data.cassandra.jdbc.testing.CustomObjectStringOnly;
19+
import com.ing.data.cassandra.jdbc.testing.JsonResult;
2020
import org.junit.jupiter.api.BeforeAll;
2121
import org.junit.jupiter.api.Test;
2222

@@ -36,8 +36,9 @@
3636
import java.util.Arrays;
3737
import java.util.HashMap;
3838
import java.util.HashSet;
39-
import java.util.regex.Pattern;
4039

40+
import static com.ing.data.cassandra.jdbc.utils.DriverUtil.UUID_V1_PATTERN;
41+
import static com.ing.data.cassandra.jdbc.utils.DriverUtil.UUID_V4_PATTERN;
4142
import static org.hamcrest.CoreMatchers.is;
4243
import static org.hamcrest.MatcherAssert.assertThat;
4344
import static org.hamcrest.Matchers.contains;
@@ -52,10 +53,6 @@
5253
class JsonSupportUnitTest extends UsingCassandraContainerTest {
5354

5455
private static final String KEYSPACE = "test_json_support";
55-
private static final Pattern UUID_V1_PATTERN = Pattern.compile(
56-
"^[0-9A-F]{8}-[0-9A-F]{4}-1[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$", Pattern.CASE_INSENSITIVE);
57-
private static final Pattern UUID_V4_PATTERN = Pattern.compile(
58-
"^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$", Pattern.CASE_INSENSITIVE);
5956

6057
@BeforeAll
6158
static void finalizeSetUpTests() throws Exception {

0 commit comments

Comments
 (0)