|
16 | 16 |
|
17 | 17 | package org.springframework.r2dbc.connection; |
18 | 18 |
|
19 | | -import io.r2dbc.spi.R2dbcBadGrammarException; |
20 | | -import io.r2dbc.spi.R2dbcDataIntegrityViolationException; |
21 | | -import io.r2dbc.spi.R2dbcException; |
22 | | -import io.r2dbc.spi.R2dbcNonTransientResourceException; |
23 | | -import io.r2dbc.spi.R2dbcPermissionDeniedException; |
24 | | -import io.r2dbc.spi.R2dbcRollbackException; |
25 | | -import io.r2dbc.spi.R2dbcTimeoutException; |
26 | | -import io.r2dbc.spi.R2dbcTransientResourceException; |
27 | | -import org.junit.jupiter.api.Test; |
| 19 | +import static org.assertj.core.api.Assertions.assertThat; |
| 20 | + |
| 21 | +import java.util.stream.Stream; |
28 | 22 |
|
29 | 23 | import org.springframework.dao.CannotAcquireLockException; |
30 | 24 | import org.springframework.dao.DataAccessResourceFailureException; |
|
37 | 31 | import org.springframework.r2dbc.BadSqlGrammarException; |
38 | 32 | import org.springframework.r2dbc.UncategorizedR2dbcException; |
39 | 33 |
|
40 | | -import static org.assertj.core.api.Assertions.assertThat; |
| 34 | +import io.r2dbc.spi.R2dbcBadGrammarException; |
| 35 | +import io.r2dbc.spi.R2dbcDataIntegrityViolationException; |
| 36 | +import io.r2dbc.spi.R2dbcException; |
| 37 | +import io.r2dbc.spi.R2dbcNonTransientResourceException; |
| 38 | +import io.r2dbc.spi.R2dbcPermissionDeniedException; |
| 39 | +import io.r2dbc.spi.R2dbcRollbackException; |
| 40 | +import io.r2dbc.spi.R2dbcTimeoutException; |
| 41 | +import io.r2dbc.spi.R2dbcTransientResourceException; |
| 42 | +import org.junit.jupiter.api.Test; |
| 43 | +import org.junit.jupiter.params.ParameterizedTest; |
| 44 | +import org.junit.jupiter.params.provider.Arguments; |
| 45 | +import org.junit.jupiter.params.provider.MethodSource; |
41 | 46 |
|
42 | 47 | /** |
43 | 48 | * Tests for {@link ConnectionFactoryUtils}. |
@@ -86,35 +91,32 @@ void shouldTranslateNonTransientResourceException() { |
86 | 91 | assertThat(exception).isExactlyInstanceOf(DataAccessResourceFailureException.class); |
87 | 92 | } |
88 | 93 |
|
| 94 | + private static Stream<Arguments> duplicateKeyErrorCodes() { |
| 95 | + return Stream.of( |
| 96 | + Arguments.of("Oracle", "23505", 0), |
| 97 | + Arguments.of("Oracle", "23000", 1), |
| 98 | + Arguments.of("SAP HANA", "23000", 301), |
| 99 | + Arguments.of("MySQL/MariaDB", "23000", 1062), |
| 100 | + Arguments.of("MS SQL Server", "23000", 2601), |
| 101 | + Arguments.of("MS SQL Server", "23000", 2627), |
| 102 | + Arguments.of("Informix", "23000", -239), |
| 103 | + Arguments.of("Informix", "23000", -268) |
| 104 | + ); |
| 105 | + } |
| 106 | + |
| 107 | + @ParameterizedTest |
| 108 | + @MethodSource("duplicateKeyErrorCodes") |
| 109 | + void shouldTranslateIntegrityViolationException(final String db, String sqlState, final int errorCode) { |
| 110 | + Exception exception = ConnectionFactoryUtils.convertR2dbcException("", "", |
| 111 | + new R2dbcDataIntegrityViolationException("reason", sqlState, errorCode)); |
| 112 | + assertThat(exception).as(db).isExactlyInstanceOf(DuplicateKeyException.class); |
| 113 | + } |
| 114 | + |
89 | 115 | @Test |
90 | | - void shouldTranslateIntegrityViolationException() { |
| 116 | + void shouldTranslateGenericIntegrityViolationException() { |
91 | 117 | Exception exception = ConnectionFactoryUtils.convertR2dbcException("", "", |
92 | 118 | new R2dbcDataIntegrityViolationException()); |
93 | 119 | assertThat(exception).isExactlyInstanceOf(DataIntegrityViolationException.class); |
94 | | - |
95 | | - exception = ConnectionFactoryUtils.convertR2dbcException("", "", |
96 | | - new R2dbcDataIntegrityViolationException("reason", "23505")); |
97 | | - assertThat(exception).isExactlyInstanceOf(DuplicateKeyException.class); |
98 | | - |
99 | | - exception = ConnectionFactoryUtils.convertR2dbcException("", "", |
100 | | - new R2dbcDataIntegrityViolationException("reason", "23000", 1)); |
101 | | - assertThat(exception).as("Oracle").isExactlyInstanceOf(DuplicateKeyException.class); |
102 | | - |
103 | | - exception = ConnectionFactoryUtils.convertR2dbcException("", "", |
104 | | - new R2dbcDataIntegrityViolationException("reason", "23000", 301)); |
105 | | - assertThat(exception).as("SAP HANA").isExactlyInstanceOf(DuplicateKeyException.class); |
106 | | - |
107 | | - exception = ConnectionFactoryUtils.convertR2dbcException("", "", |
108 | | - new R2dbcDataIntegrityViolationException("reason", "23000", 1062)); |
109 | | - assertThat(exception).as("MySQL/MariaDB").isExactlyInstanceOf(DuplicateKeyException.class); |
110 | | - |
111 | | - exception = ConnectionFactoryUtils.convertR2dbcException("", "", |
112 | | - new R2dbcDataIntegrityViolationException("reason", "23000", 2601)); |
113 | | - assertThat(exception).as("MS SQL Server").isExactlyInstanceOf(DuplicateKeyException.class); |
114 | | - |
115 | | - exception = ConnectionFactoryUtils.convertR2dbcException("", "", |
116 | | - new R2dbcDataIntegrityViolationException("reason", "23000", 2627)); |
117 | | - assertThat(exception).as("MS SQL Server").isExactlyInstanceOf(DuplicateKeyException.class); |
118 | 120 | } |
119 | 121 |
|
120 | 122 | @Test |
|
0 commit comments