Browse Source

#2 - Refactor R2dbc test support code into R2dbcIntegrationTestSupport.

pull/1188/head
Mark Paluch 8 years ago
parent
commit
ee5e3a72e8
  1. 27
      src/test/java/org/springframework/data/jdbc/core/function/DatabaseClientIntegrationTests.java
  2. 4
      src/test/java/org/springframework/data/jdbc/testing/ExternalDatabase.java
  3. 70
      src/test/java/org/springframework/data/jdbc/testing/R2dbcIntegrationTestSupport.java

27
src/test/java/org/springframework/data/jdbc/core/function/DatabaseClientIntegrationTests.java

@ -18,21 +18,17 @@ package org.springframework.data.jdbc.core.function;
import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.*;
import static org.springframework.data.domain.Sort.Order.*; import static org.springframework.data.domain.Sort.Order.*;
import io.r2dbc.postgresql.PostgresqlConnectionConfiguration;
import io.r2dbc.postgresql.PostgresqlConnectionFactory;
import io.r2dbc.spi.ConnectionFactory; import io.r2dbc.spi.ConnectionFactory;
import lombok.Data; import lombok.Data;
import reactor.core.publisher.Hooks; import reactor.core.publisher.Hooks;
import reactor.test.StepVerifier; import reactor.test.StepVerifier;
import org.junit.Before; import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test; import org.junit.Test;
import org.postgresql.ds.PGSimpleDataSource;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
import org.springframework.data.jdbc.core.function.ExternalDatabase.ProvidedDatabase;
import org.springframework.data.jdbc.core.mapping.Table; import org.springframework.data.jdbc.core.mapping.Table;
import org.springframework.data.jdbc.testing.R2dbcIntegrationTestSupport;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
/** /**
@ -40,13 +36,7 @@ import org.springframework.jdbc.core.JdbcTemplate;
* *
* @author Mark Paluch * @author Mark Paluch
*/ */
public class DatabaseClientIntegrationTests { public class DatabaseClientIntegrationTests extends R2dbcIntegrationTestSupport {
/**
* Local test database at {@code postgres:@localhost:5432/postgres}.
*/
@ClassRule public static final ExternalDatabase database = ProvidedDatabase.builder().hostname("localhost").port(5432)
.database("postgres").username("postgres").password("").build();
private ConnectionFactory connectionFactory; private ConnectionFactory connectionFactory;
@ -57,22 +47,13 @@ public class DatabaseClientIntegrationTests {
Hooks.onOperatorDebug(); Hooks.onOperatorDebug();
connectionFactory = new PostgresqlConnectionFactory( connectionFactory = createConnectionFactory();
PostgresqlConnectionConfiguration.builder().host(database.getHostname()).database(database.getDatabase())
.username(database.getUsername()).password(database.getPassword()).build());
PGSimpleDataSource dataSource = new PGSimpleDataSource();
dataSource.setUser(database.getUsername());
dataSource.setPassword(database.getPassword());
dataSource.setDatabaseName(database.getDatabase());
dataSource.setServerName(database.getHostname());
dataSource.setPortNumber(database.getPort());
String tableToCreate = "CREATE TABLE IF NOT EXISTS legoset (\n" String tableToCreate = "CREATE TABLE IF NOT EXISTS legoset (\n"
+ " id integer CONSTRAINT id PRIMARY KEY,\n" + " name varchar(255) NOT NULL,\n" + " id integer CONSTRAINT id PRIMARY KEY,\n" + " name varchar(255) NOT NULL,\n"
+ " manual integer NULL\n" + ");"; + " manual integer NULL\n" + ");";
jdbc = new JdbcTemplate(dataSource); jdbc = createJdbcTemplate(createDataSource());
jdbc.execute(tableToCreate); jdbc.execute(tableToCreate);
jdbc.execute("DELETE FROM legoset"); jdbc.execute("DELETE FROM legoset");
} }

4
src/test/java/org/springframework/data/jdbc/core/function/ExternalDatabase.java → src/test/java/org/springframework/data/jdbc/testing/ExternalDatabase.java

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.springframework.data.jdbc.core.function; package org.springframework.data.jdbc.testing;
import lombok.Builder; import lombok.Builder;
@ -75,7 +75,7 @@ public abstract class ExternalDatabase extends ExternalResource {
* Provided (unmanaged resource) database connection coordinates. * Provided (unmanaged resource) database connection coordinates.
*/ */
@Builder @Builder
static class ProvidedDatabase extends ExternalDatabase { public static class ProvidedDatabase extends ExternalDatabase {
private final int port; private final int port;
private final String hostname; private final String hostname;

70
src/test/java/org/springframework/data/jdbc/testing/R2dbcIntegrationTestSupport.java

@ -0,0 +1,70 @@
/*
* Copyright 2018 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
*
* http://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.jdbc.testing;
import io.r2dbc.postgresql.PostgresqlConnectionConfiguration;
import io.r2dbc.postgresql.PostgresqlConnectionFactory;
import io.r2dbc.spi.ConnectionFactory;
import javax.sql.DataSource;
import org.junit.ClassRule;
import org.postgresql.ds.PGSimpleDataSource;
import org.springframework.data.jdbc.testing.ExternalDatabase.ProvidedDatabase;
import org.springframework.jdbc.core.JdbcTemplate;
/**
* Base class for R2DBC integration tests.
*
* @author Mark Paluch
*/
public abstract class R2dbcIntegrationTestSupport {
/**
* Local test database at {@code postgres:@localhost:5432/postgres}.
*/
@ClassRule public static final ExternalDatabase database = ProvidedDatabase.builder().hostname("localhost").port(5432)
.database("postgres").username("postgres").password("").build();
/**
* Creates a new {@link ConnectionFactory} configured from the {@link ExternalDatabase}..
*/
protected static ConnectionFactory createConnectionFactory() {
return new PostgresqlConnectionFactory(PostgresqlConnectionConfiguration.builder().host(database.getHostname())
.database(database.getDatabase()).username(database.getUsername()).password(database.getPassword()).build());
}
/**
* Creates a new {@link DataSource} configured from the {@link ExternalDatabase}.
*/
protected static DataSource createDataSource() {
PGSimpleDataSource dataSource = new PGSimpleDataSource();
dataSource.setUser(database.getUsername());
dataSource.setPassword(database.getPassword());
dataSource.setDatabaseName(database.getDatabase());
dataSource.setServerName(database.getHostname());
dataSource.setPortNumber(database.getPort());
return dataSource;
}
/**
* Creates a new {@link JdbcTemplate} for a {@link DataSource}.
*/
protected JdbcTemplate createJdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
Loading…
Cancel
Save