Stop using Constants utility in AbstractPlatformTransactionManager

See gh-30851
This commit is contained in:
Sam Brannen
2023-07-19 17:29:36 +03:00
parent d0076f5c14
commit 97810c84a2
2 changed files with 68 additions and 5 deletions

View File

@@ -43,6 +43,7 @@ import static org.springframework.transaction.TransactionDefinition.ISOLATION_SE
import static org.springframework.transaction.TransactionDefinition.PROPAGATION_MANDATORY;
import static org.springframework.transaction.TransactionDefinition.PROPAGATION_REQUIRED;
import static org.springframework.transaction.TransactionDefinition.PROPAGATION_SUPPORTS;
import static org.springframework.transaction.support.AbstractPlatformTransactionManager.SYNCHRONIZATION_ON_ACTUAL_TRANSACTION;
import static org.springframework.transaction.support.DefaultTransactionDefinition.PREFIX_ISOLATION;
import static org.springframework.transaction.support.DefaultTransactionDefinition.PREFIX_PROPAGATION;
@@ -264,6 +265,53 @@ class TransactionSupportTests {
assertThat(template3).isEqualTo(template2);
}
@Nested
class AbstractPlatformTransactionManagerConfigurationTests {
private final AbstractPlatformTransactionManager tm = new TestTransactionManager(false, true);
@Test
void setTransactionSynchronizationNameToUnsupportedValues() {
assertThatIllegalArgumentException().isThrownBy(() -> tm.setTransactionSynchronizationName(null));
assertThatIllegalArgumentException().isThrownBy(() -> tm.setTransactionSynchronizationName(" "));
assertThatIllegalArgumentException().isThrownBy(() -> tm.setTransactionSynchronizationName("bogus"));
}
/**
* Verify that the internal 'constants' map is properly configured for all
* SYNCHRONIZATION_ constants defined in {@link AbstractPlatformTransactionManager}.
*/
@Test
void setTransactionSynchronizationNameToAllSupportedValues() {
Set<Integer> uniqueValues = new HashSet<>();
streamSynchronizationConstants()
.forEach(name -> {
tm.setTransactionSynchronizationName(name);
int transactionSynchronization = tm.getTransactionSynchronization();
int expected = AbstractPlatformTransactionManager.constants.get(name);
assertThat(transactionSynchronization).isEqualTo(expected);
uniqueValues.add(transactionSynchronization);
});
assertThat(uniqueValues).hasSize(AbstractPlatformTransactionManager.constants.size());
}
@Test
void setTransactionSynchronization() {
tm.setTransactionSynchronization(SYNCHRONIZATION_ON_ACTUAL_TRANSACTION);
assertThat(tm.getTransactionSynchronization()).isEqualTo(SYNCHRONIZATION_ON_ACTUAL_TRANSACTION);
}
private static Stream<String> streamSynchronizationConstants() {
return Arrays.stream(AbstractPlatformTransactionManager.class.getFields())
.filter(ReflectionUtils::isPublicStaticFinal)
.map(Field::getName)
.filter(name -> name.startsWith("SYNCHRONIZATION_"));
}
}
@Nested
class TransactionTemplateConfigurationTests {