Browse Source
Removed SQL Server and MariaDB tests for the time being until drivers are available. Closes #1292pull/1298/head
10 changed files with 22 additions and 421 deletions
@ -1,96 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright 2019-2022 the original author or authors. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
*/ |
|
||||||
package org.springframework.data.r2dbc.repository; |
|
||||||
|
|
||||||
import io.r2dbc.spi.ConnectionFactory; |
|
||||||
import reactor.core.publisher.Flux; |
|
||||||
import reactor.core.publisher.Mono; |
|
||||||
|
|
||||||
import javax.sql.DataSource; |
|
||||||
|
|
||||||
import org.junit.jupiter.api.extension.ExtendWith; |
|
||||||
import org.junit.jupiter.api.extension.RegisterExtension; |
|
||||||
|
|
||||||
import org.springframework.context.annotation.Bean; |
|
||||||
import org.springframework.context.annotation.ComponentScan.Filter; |
|
||||||
import org.springframework.context.annotation.Configuration; |
|
||||||
import org.springframework.context.annotation.FilterType; |
|
||||||
import org.springframework.data.r2dbc.config.AbstractR2dbcConfiguration; |
|
||||||
import org.springframework.data.r2dbc.repository.config.EnableR2dbcRepositories; |
|
||||||
import org.springframework.data.r2dbc.repository.support.R2dbcRepositoryFactory; |
|
||||||
import org.springframework.data.r2dbc.testing.ExternalDatabase; |
|
||||||
import org.springframework.data.r2dbc.testing.MariaDbTestSupport; |
|
||||||
import org.springframework.test.context.ContextConfiguration; |
|
||||||
import org.springframework.test.context.junit.jupiter.SpringExtension; |
|
||||||
|
|
||||||
/** |
|
||||||
* Integration tests for {@link LegoSetRepository} using {@link R2dbcRepositoryFactory} against MariaDB. |
|
||||||
* |
|
||||||
* @author Mark Paluch |
|
||||||
*/ |
|
||||||
@ExtendWith(SpringExtension.class) |
|
||||||
@ContextConfiguration |
|
||||||
public class MariaDbR2dbcRepositoryIntegrationTests extends AbstractR2dbcRepositoryIntegrationTests { |
|
||||||
|
|
||||||
@RegisterExtension public static final ExternalDatabase database = MariaDbTestSupport.database(); |
|
||||||
|
|
||||||
@Configuration |
|
||||||
@EnableR2dbcRepositories(considerNestedRepositories = true, |
|
||||||
includeFilters = @Filter(classes = MySqlLegoSetRepository.class, type = FilterType.ASSIGNABLE_TYPE)) |
|
||||||
static class IntegrationTestConfiguration extends AbstractR2dbcConfiguration { |
|
||||||
|
|
||||||
@Bean |
|
||||||
@Override |
|
||||||
public ConnectionFactory connectionFactory() { |
|
||||||
return MariaDbTestSupport.createConnectionFactory(database); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
protected DataSource createDataSource() { |
|
||||||
return MariaDbTestSupport.createDataSource(database); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
protected ConnectionFactory createConnectionFactory() { |
|
||||||
return MariaDbTestSupport.createConnectionFactory(database); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
protected String getCreateTableStatement() { |
|
||||||
return MariaDbTestSupport.CREATE_TABLE_LEGOSET_WITH_ID_GENERATION; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
protected Class<? extends LegoSetRepository> getRepositoryInterfaceType() { |
|
||||||
return MySqlLegoSetRepository.class; |
|
||||||
} |
|
||||||
|
|
||||||
interface MySqlLegoSetRepository extends LegoSetRepository { |
|
||||||
|
|
||||||
@Override |
|
||||||
@Query("SELECT name FROM legoset") |
|
||||||
Flux<Named> findAsProjection(); |
|
||||||
|
|
||||||
@Override |
|
||||||
@Query("SELECT * FROM legoset WHERE manual = :manual") |
|
||||||
Mono<LegoSet> findByManual(int manual); |
|
||||||
|
|
||||||
@Override |
|
||||||
@Query("SELECT id FROM legoset") |
|
||||||
Flux<Integer> findAllIds(); |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,96 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright 2021-2022 the original author or authors. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
*/ |
|
||||||
package org.springframework.data.r2dbc.repository; |
|
||||||
|
|
||||||
import io.r2dbc.spi.ConnectionFactory; |
|
||||||
|
|
||||||
import java.util.Optional; |
|
||||||
|
|
||||||
import javax.sql.DataSource; |
|
||||||
|
|
||||||
import org.junit.jupiter.api.extension.ExtendWith; |
|
||||||
import org.junit.jupiter.api.extension.RegisterExtension; |
|
||||||
import org.springframework.context.annotation.Bean; |
|
||||||
import org.springframework.context.annotation.ComponentScan.Filter; |
|
||||||
import org.springframework.context.annotation.Configuration; |
|
||||||
import org.springframework.context.annotation.FilterType; |
|
||||||
import org.springframework.data.r2dbc.config.AbstractR2dbcConfiguration; |
|
||||||
import org.springframework.data.r2dbc.convert.R2dbcCustomConversions; |
|
||||||
import org.springframework.data.r2dbc.mapping.R2dbcMappingContext; |
|
||||||
import org.springframework.data.r2dbc.repository.config.EnableR2dbcRepositories; |
|
||||||
import org.springframework.data.r2dbc.testing.ExternalDatabase; |
|
||||||
import org.springframework.data.r2dbc.testing.MariaDbTestSupport; |
|
||||||
import org.springframework.data.relational.RelationalManagedTypes; |
|
||||||
import org.springframework.data.relational.core.mapping.NamingStrategy; |
|
||||||
import org.springframework.test.context.ContextConfiguration; |
|
||||||
import org.springframework.test.context.junit.jupiter.SpringExtension; |
|
||||||
|
|
||||||
/** |
|
||||||
* Integration tests for {@link LegoSetRepository} with table and column names that contain upper and lower case |
|
||||||
* characters against MariaDb. |
|
||||||
* |
|
||||||
* @author Jens Schauder |
|
||||||
*/ |
|
||||||
@ExtendWith(SpringExtension.class) |
|
||||||
@ContextConfiguration |
|
||||||
public class MariaDbR2dbcRepositoryWithMixedCaseNamesIntegrationTests |
|
||||||
extends AbstractR2dbcRepositoryWithMixedCaseNamesIntegrationTests { |
|
||||||
|
|
||||||
@RegisterExtension public static final ExternalDatabase database = MariaDbTestSupport.database(); |
|
||||||
|
|
||||||
@Configuration |
|
||||||
@EnableR2dbcRepositories(considerNestedRepositories = true, |
|
||||||
includeFilters = @Filter(classes = { LegoSetRepository.class }, type = FilterType.ASSIGNABLE_TYPE)) |
|
||||||
static class IntegrationTestConfiguration extends AbstractR2dbcConfiguration { |
|
||||||
|
|
||||||
@Bean |
|
||||||
@Override |
|
||||||
public ConnectionFactory connectionFactory() { |
|
||||||
return MariaDbTestSupport.createConnectionFactory(database); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public R2dbcMappingContext r2dbcMappingContext(Optional<NamingStrategy> namingStrategy, |
|
||||||
R2dbcCustomConversions r2dbcCustomConversions, RelationalManagedTypes r2dbcManagedTypes) { |
|
||||||
|
|
||||||
R2dbcMappingContext r2dbcMappingContext = super.r2dbcMappingContext(namingStrategy, r2dbcCustomConversions, |
|
||||||
r2dbcManagedTypes); |
|
||||||
r2dbcMappingContext.setForceQuote(true); |
|
||||||
|
|
||||||
return r2dbcMappingContext; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
protected DataSource createDataSource() { |
|
||||||
return MariaDbTestSupport.createDataSource(database); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
protected ConnectionFactory createConnectionFactory() { |
|
||||||
return MariaDbTestSupport.createConnectionFactory(database); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
protected String getCreateTableStatement() { |
|
||||||
return MariaDbTestSupport.CREATE_TABLE_LEGOSET_WITH_MIXED_CASE_NAMES; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
protected String getDropTableStatement() { |
|
||||||
return MariaDbTestSupport.DROP_TABLE_LEGOSET_WITH_MIXED_CASE_NAMES; |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,161 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright 2019-2022 the original author or authors. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
*/ |
|
||||||
package org.springframework.data.r2dbc.testing; |
|
||||||
|
|
||||||
import io.r2dbc.spi.ConnectionFactory; |
|
||||||
import io.r2dbc.spi.ConnectionFactoryOptions; |
|
||||||
import lombok.SneakyThrows; |
|
||||||
|
|
||||||
import java.util.function.Supplier; |
|
||||||
import java.util.stream.Stream; |
|
||||||
|
|
||||||
import javax.sql.DataSource; |
|
||||||
|
|
||||||
import org.mariadb.jdbc.MariaDbDataSource; |
|
||||||
import org.mariadb.r2dbc.MariadbConnectionFactoryProvider; |
|
||||||
|
|
||||||
import org.springframework.data.r2dbc.testing.ExternalDatabase.ProvidedDatabase; |
|
||||||
|
|
||||||
import org.testcontainers.containers.MariaDBContainer; |
|
||||||
|
|
||||||
/** |
|
||||||
* Utility class for testing against MariaDB. |
|
||||||
* |
|
||||||
* @author Mark Paluch |
|
||||||
* @author Jens Schauder |
|
||||||
*/ |
|
||||||
public class MariaDbTestSupport { |
|
||||||
|
|
||||||
private static ExternalDatabase testContainerDatabase; |
|
||||||
|
|
||||||
public static final String CREATE_TABLE_LEGOSET = "CREATE TABLE legoset (\n" //
|
|
||||||
+ " id integer PRIMARY KEY,\n" //
|
|
||||||
+ " name varchar(255) NOT NULL,\n" //
|
|
||||||
+ " manual integer NULL\n," //
|
|
||||||
+ " cert varbinary(255) NULL\n" //
|
|
||||||
+ ") ENGINE=InnoDB;"; |
|
||||||
|
|
||||||
public static final String CREATE_TABLE_LEGOSET_WITH_ID_GENERATION = "CREATE TABLE legoset (\n" //
|
|
||||||
+ " id integer AUTO_INCREMENT PRIMARY KEY,\n" //
|
|
||||||
+ " name varchar(255) NOT NULL,\n" //
|
|
||||||
+ " flag boolean NOT NULL,\n" //
|
|
||||||
+ " manual integer NULL\n" //
|
|
||||||
+ ") ENGINE=InnoDB;"; |
|
||||||
|
|
||||||
public static final String CREATE_TABLE_LEGOSET_WITH_MIXED_CASE_NAMES = "CREATE TABLE `LegoSet` (\n" //
|
|
||||||
+ " `Id` integer AUTO_INCREMENT PRIMARY KEY,\n" //
|
|
||||||
+ " `Name` varchar(255) NOT NULL,\n" //
|
|
||||||
+ " `Manual` integer NULL\n" //
|
|
||||||
+ ") ENGINE=InnoDB;"; |
|
||||||
|
|
||||||
public static final String DROP_TABLE_LEGOSET_WITH_MIXED_CASE_NAMES = "DROP TABLE `LegoSet`"; |
|
||||||
|
|
||||||
/** |
|
||||||
* Returns a database either hosted locally at {@code localhost:3306/mysql} or running inside Docker. |
|
||||||
* |
|
||||||
* @return information about the database. Guaranteed to be not {@literal null}. |
|
||||||
*/ |
|
||||||
public static ExternalDatabase database() { |
|
||||||
|
|
||||||
if (Boolean.getBoolean("spring.data.r2dbc.test.preferLocalDatabase")) { |
|
||||||
|
|
||||||
return getFirstWorkingDatabase( //
|
|
||||||
MariaDbTestSupport::local, //
|
|
||||||
MariaDbTestSupport::testContainer //
|
|
||||||
); |
|
||||||
} else { |
|
||||||
|
|
||||||
return getFirstWorkingDatabase( //
|
|
||||||
MariaDbTestSupport::testContainer, //
|
|
||||||
MariaDbTestSupport::local //
|
|
||||||
); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
@SafeVarargs |
|
||||||
private static ExternalDatabase getFirstWorkingDatabase(Supplier<ExternalDatabase>... suppliers) { |
|
||||||
|
|
||||||
return Stream.of(suppliers).map(Supplier::get) //
|
|
||||||
.filter(ExternalDatabase::checkValidity) //
|
|
||||||
.findFirst() //
|
|
||||||
.orElse(ExternalDatabase.unavailable()); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Returns a locally provided database . |
|
||||||
*/ |
|
||||||
private static ExternalDatabase local() { |
|
||||||
|
|
||||||
return ProvidedDatabase.builder() //
|
|
||||||
.hostname("localhost") //
|
|
||||||
.port(3306) //
|
|
||||||
.database("mysql") //
|
|
||||||
.username("root") //
|
|
||||||
.password("my-secret-pw") //
|
|
||||||
.jdbcUrl("jdbc:mariadb://localhost:3306/mysql") //
|
|
||||||
.build(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Returns a database provided via Testcontainers. |
|
||||||
*/ |
|
||||||
private static ExternalDatabase testContainer() { |
|
||||||
|
|
||||||
if (testContainerDatabase == null) { |
|
||||||
|
|
||||||
try { |
|
||||||
MariaDBContainer container = new MariaDBContainer("mariadb:10.8.3"); |
|
||||||
container.start(); |
|
||||||
|
|
||||||
testContainerDatabase = ProvidedDatabase.builder(container) //
|
|
||||||
.username("root") //
|
|
||||||
.database(container.getDatabaseName()) //
|
|
||||||
.build(); |
|
||||||
} catch (IllegalStateException ise) { |
|
||||||
// docker not available.
|
|
||||||
testContainerDatabase = ExternalDatabase.unavailable(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return testContainerDatabase; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Creates a new R2DBC MariaDB {@link ConnectionFactory} configured from the {@link ExternalDatabase}. |
|
||||||
*/ |
|
||||||
public static ConnectionFactory createConnectionFactory(ExternalDatabase database) { |
|
||||||
|
|
||||||
ConnectionFactoryOptions options = ConnectionUtils.createOptions("mariadb", database); |
|
||||||
return new MariadbConnectionFactoryProvider().create(options); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Creates a new {@link DataSource} configured from the {@link ExternalDatabase}. |
|
||||||
*/ |
|
||||||
@SneakyThrows |
|
||||||
public static DataSource createDataSource(ExternalDatabase database) { |
|
||||||
|
|
||||||
MariaDbDataSource dataSource = new MariaDbDataSource(); |
|
||||||
|
|
||||||
dataSource.setUser(database.getUsername()); |
|
||||||
dataSource.setPassword(database.getPassword()); |
|
||||||
dataSource.setDatabaseName(database.getDatabase()); |
|
||||||
dataSource.setServerName(database.getHostname()); |
|
||||||
dataSource.setPort(database.getPort()); |
|
||||||
|
|
||||||
return dataSource; |
|
||||||
} |
|
||||||
} |
|
||||||
Loading…
Reference in new issue