Skip to content

Commit

Permalink
Add more test cases on IntervalShardingAlgorithm (#33697)
Browse files Browse the repository at this point in the history
  • Loading branch information
terrymanu authored Nov 17, 2024
1 parent d1cf6e5 commit 75da004
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -303,42 +303,37 @@ private boolean hasIntersection(final Range<YearMonth> calculateRange, final Ran

private LocalDateTime parseLocalDateTime(final Comparable<?> endpoint) {
String dateTimeText = getDateTimeText(endpoint);
if (dateTimeText.length() >= dateTimePatternLength) {
return LocalDateTime.parse(dateTimeText.substring(0, dateTimePatternLength), dateTimeFormatter);
}
return LocalDateTime.parse(dateTimeText, createRelaxedDateTimeFormatter(dateTimeText));
return dateTimeText.length() >= dateTimePatternLength
? LocalDateTime.parse(dateTimeText.substring(0, dateTimePatternLength), dateTimeFormatter)
: LocalDateTime.parse(dateTimeText, createRelaxedDateTimeFormatter(dateTimeText));
}

private LocalDate parseLocalDate(final Comparable<?> endpoint) {
String dateTimeText = getDateTimeText(endpoint);
if (dateTimeText.length() >= dateTimePatternLength) {
return LocalDate.parse(dateTimeText.substring(0, dateTimePatternLength), dateTimeFormatter);
}
return LocalDate.parse(dateTimeText, createRelaxedDateTimeFormatter(dateTimeText));
return dateTimeText.length() >= dateTimePatternLength
? LocalDate.parse(dateTimeText.substring(0, dateTimePatternLength), dateTimeFormatter)
: LocalDate.parse(dateTimeText, createRelaxedDateTimeFormatter(dateTimeText));
}

private LocalTime parseLocalTime(final Comparable<?> endpoint) {
String dateTimeText = getDateTimeText(endpoint);
if (dateTimeText.length() >= dateTimePatternLength) {
return LocalTime.parse(dateTimeText.substring(0, dateTimePatternLength), dateTimeFormatter);
}
return LocalTime.parse(dateTimeText, createRelaxedDateTimeFormatter(dateTimeText));
return dateTimeText.length() >= dateTimePatternLength
? LocalTime.parse(dateTimeText.substring(0, dateTimePatternLength), dateTimeFormatter)
: LocalTime.parse(dateTimeText, createRelaxedDateTimeFormatter(dateTimeText));
}

private Year parseYear(final Comparable<?> endpoint) {
String dateTimeText = getDateTimeText(endpoint);
if (dateTimeText.length() >= dateTimePatternLength) {
return Year.parse(dateTimeText.substring(0, dateTimePatternLength), dateTimeFormatter);
}
return Year.parse(dateTimeText, createRelaxedDateTimeFormatter(dateTimeText));
return dateTimeText.length() >= dateTimePatternLength
? Year.parse(dateTimeText.substring(0, dateTimePatternLength), dateTimeFormatter)
: Year.parse(dateTimeText, createRelaxedDateTimeFormatter(dateTimeText));
}

private YearMonth parseYearMonth(final Comparable<?> endpoint) {
String dateTimeText = getDateTimeText(endpoint);
if (dateTimeText.length() >= dateTimePatternLength) {
return YearMonth.parse(dateTimeText.substring(0, dateTimePatternLength), dateTimeFormatter);
}
return YearMonth.parse(dateTimeText, createRelaxedDateTimeFormatter(dateTimeText));
return dateTimeText.length() >= dateTimePatternLength
? YearMonth.parse(dateTimeText.substring(0, dateTimePatternLength), dateTimeFormatter)
: YearMonth.parse(dateTimeText, createRelaxedDateTimeFormatter(dateTimeText));
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,12 @@

import com.google.common.collect.Range;
import org.apache.shardingsphere.infra.datanode.DataNodeInfo;
import org.apache.shardingsphere.infra.exception.generic.UnsupportedSQLOperationException;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.infra.util.datetime.DateTimeFormatterFactory;
import org.apache.shardingsphere.sharding.api.sharding.standard.PreciseShardingValue;
import org.apache.shardingsphere.sharding.api.sharding.standard.RangeShardingValue;
import org.apache.shardingsphere.sharding.exception.data.InvalidDatetimeFormatException;
import org.apache.shardingsphere.sharding.spi.ShardingAlgorithm;
import org.apache.shardingsphere.test.util.PropertiesBuilder;
import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
Expand Down Expand Up @@ -106,6 +108,18 @@ private void initShardingStrategyByDay() {
}
}

@Test
void assertInitFailedWithInvalidDatetimeFormat() {
assertThrows(InvalidDatetimeFormatException.class,
() -> TypedSPILoader.getService(ShardingAlgorithm.class, "INTERVAL", PropertiesBuilder.build(new Property("datetime-pattern", "yyyy"), new Property("datetime-lower", "invalid"))));
}

@Test
void assertInitFailedWithInvalidStepUnit() {
assertThrows(UnsupportedSQLOperationException.class, () -> TypedSPILoader.getService(ShardingAlgorithm.class, "INTERVAL", PropertiesBuilder.build(
new Property("datetime-pattern", "yy"), new Property("datetime-lower", "16"), new Property("sharding-suffix-pattern", "yy"), new Property("datetime-interval-unit", "invalid"))));
}

@Test
void assertPreciseDoShardingByQuarter() {
assertThat(shardingAlgorithmByQuarter.doSharding(availableTablesForQuarterDataSources,
Expand Down

0 comments on commit 75da004

Please sign in to comment.