[BAEL-16658] Split rxjava (& rxjava-2) by subject
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
package com.baeldung.rxjava;
|
||||
|
||||
import com.jakewharton.rxrelay2.Relay;
|
||||
import io.reactivex.Observer;
|
||||
import io.reactivex.disposables.Disposables;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
public class RandomRelay extends Relay<Integer> {
|
||||
Random random = new Random();
|
||||
|
||||
List<Observer<? super Integer>> observers = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
public void accept(Integer integer) {
|
||||
int observerIndex = random.nextInt(observers.size()) & Integer.MAX_VALUE;
|
||||
observers.get(observerIndex).onNext(integer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasObservers() {
|
||||
return observers.isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void subscribeActual(Observer<? super Integer> observer) {
|
||||
observers.add(observer);
|
||||
observer.onSubscribe(Disposables.fromRunnable(() -> System.out.println("Disposed")));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.baeldung.rxjava.jdbc;
|
||||
|
||||
import com.github.davidmoten.rx.jdbc.ConnectionProvider;
|
||||
import com.github.davidmoten.rx.jdbc.ConnectionProviderFromUrl;
|
||||
|
||||
class Connector {
|
||||
|
||||
private static final String DB_CONNECTION = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1";
|
||||
private static final String DB_USER = "";
|
||||
private static final String DB_PASSWORD = "";
|
||||
|
||||
static final ConnectionProvider connectionProvider = new ConnectionProviderFromUrl(DB_CONNECTION, DB_USER, DB_PASSWORD);
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.baeldung.rxjava.jdbc;
|
||||
|
||||
import com.github.davidmoten.rx.jdbc.annotations.Column;
|
||||
|
||||
public interface Employee {
|
||||
|
||||
@Column("id")
|
||||
int id();
|
||||
|
||||
@Column("name")
|
||||
String name();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.baeldung.rxjava.jdbc;
|
||||
|
||||
public class Manager {
|
||||
|
||||
private int id;
|
||||
private String name;
|
||||
|
||||
public Manager(int id, String name) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.baeldung.rxjava.jdbc;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.StringWriter;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
|
||||
class Utils {
|
||||
|
||||
static String getStringFromInputStream(InputStream input) throws IOException {
|
||||
StringWriter writer = new StringWriter();
|
||||
IOUtils.copy(input, writer, "UTF-8");
|
||||
return writer.toString();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
package com.baeldung.rxjava;
|
||||
|
||||
import io.reactivex.BackpressureStrategy;
|
||||
import io.reactivex.Flowable;
|
||||
import io.reactivex.FlowableOnSubscribe;
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.exceptions.MissingBackpressureException;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
import io.reactivex.subscribers.TestSubscriber;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
public class FlowableIntegrationTest {
|
||||
|
||||
@Test public void whenFlowableIsCreated_thenItIsProperlyInitialized() {
|
||||
Flowable<Integer> integerFlowable = Flowable.just(1, 2, 3, 4);
|
||||
assertNotNull(integerFlowable);
|
||||
}
|
||||
|
||||
@Test public void whenFlowableIsCreatedFromObservable_thenItIsProperlyInitialized() throws InterruptedException {
|
||||
Observable<Integer> integerObservable = Observable.just(1, 2, 3);
|
||||
Flowable<Integer> integerFlowable = integerObservable.toFlowable(BackpressureStrategy.BUFFER);
|
||||
assertNotNull(integerFlowable);
|
||||
|
||||
}
|
||||
|
||||
@Test public void whenFlowableIsCreatedFromFlowableOnSubscribe_thenItIsProperlyInitialized() throws InterruptedException {
|
||||
FlowableOnSubscribe<Integer> flowableOnSubscribe = flowableEmitter -> flowableEmitter.onNext(1);
|
||||
Flowable<Integer> integerFlowable = Flowable.create(flowableOnSubscribe, BackpressureStrategy.BUFFER);
|
||||
assertNotNull(integerFlowable);
|
||||
}
|
||||
|
||||
@Test public void thenAllValuesAreBufferedAndReceived() {
|
||||
List testList = IntStream.range(0, 100000).boxed().collect(Collectors.toList());
|
||||
Observable observable = Observable.fromIterable(testList);
|
||||
TestSubscriber<Integer> testSubscriber = observable.toFlowable(BackpressureStrategy.BUFFER).observeOn(Schedulers.computation()).test();
|
||||
|
||||
testSubscriber.awaitTerminalEvent();
|
||||
|
||||
List<Integer> receivedInts = testSubscriber.getEvents().get(0).stream().mapToInt(object -> (int) object).boxed().collect(Collectors.toList());
|
||||
|
||||
assertEquals(testList, receivedInts);
|
||||
}
|
||||
|
||||
@Test public void whenDropStrategyUsed_thenOnBackpressureDropped() {
|
||||
List testList = IntStream.range(0, 100000).boxed().collect(Collectors.toList());
|
||||
|
||||
Observable observable = Observable.fromIterable(testList);
|
||||
TestSubscriber<Integer> testSubscriber = observable.toFlowable(BackpressureStrategy.DROP).observeOn(Schedulers.computation()).test();
|
||||
testSubscriber.awaitTerminalEvent();
|
||||
List<Integer> receivedInts = testSubscriber.getEvents().get(0).stream().mapToInt(object -> (int) object).boxed().collect(Collectors.toList());
|
||||
|
||||
assertThat(receivedInts.size() < testList.size());
|
||||
assertThat(!receivedInts.contains(100000));
|
||||
}
|
||||
|
||||
@Test public void whenMissingStrategyUsed_thenException() {
|
||||
Observable observable = Observable.range(1, 100000);
|
||||
TestSubscriber subscriber = observable.toFlowable(BackpressureStrategy.MISSING).observeOn(Schedulers.computation()).test();
|
||||
|
||||
subscriber.awaitTerminalEvent();
|
||||
subscriber.assertError(MissingBackpressureException.class);
|
||||
}
|
||||
|
||||
@Test public void whenErrorStrategyUsed_thenExceptionIsThrown() {
|
||||
Observable observable = Observable.range(1, 100000);
|
||||
TestSubscriber subscriber = observable.toFlowable(BackpressureStrategy.ERROR).observeOn(Schedulers.computation()).test();
|
||||
|
||||
subscriber.awaitTerminalEvent();
|
||||
subscriber.assertError(MissingBackpressureException.class);
|
||||
}
|
||||
|
||||
@Test public void whenLatestStrategyUsed_thenTheLastElementReceived() {
|
||||
List testList = IntStream.range(0, 100000).boxed().collect(Collectors.toList());
|
||||
Observable observable = Observable.fromIterable(testList);
|
||||
TestSubscriber<Integer> testSubscriber = observable.toFlowable(BackpressureStrategy.LATEST).observeOn(Schedulers.computation()).test();
|
||||
|
||||
testSubscriber.awaitTerminalEvent();
|
||||
List<Integer> receivedInts = testSubscriber.getEvents().get(0).stream().mapToInt(object -> (int) object).boxed().collect(Collectors.toList());
|
||||
|
||||
assertThat(receivedInts.size() < testList.size());
|
||||
assertThat(receivedInts.contains(100000));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
package com.baeldung.rxjava;
|
||||
|
||||
import com.jakewharton.rxrelay2.BehaviorRelay;
|
||||
import com.jakewharton.rxrelay2.PublishRelay;
|
||||
import com.jakewharton.rxrelay2.ReplayRelay;
|
||||
import io.reactivex.internal.schedulers.SingleScheduler;
|
||||
import io.reactivex.observers.TestObserver;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class RxRelayIntegrationTest {
|
||||
|
||||
@Test
|
||||
public void whenObserverSubscribedToPublishRelay_thenItReceivesEmittedEvents () {
|
||||
PublishRelay<Integer> publishRelay = PublishRelay.create();
|
||||
TestObserver<Integer> firstObserver = TestObserver.create();
|
||||
TestObserver<Integer> secondObserver = TestObserver.create();
|
||||
publishRelay.subscribe(firstObserver);
|
||||
firstObserver.assertSubscribed();
|
||||
publishRelay.accept(5);
|
||||
publishRelay.accept(10);
|
||||
publishRelay.subscribe(secondObserver);
|
||||
secondObserver.assertSubscribed();
|
||||
publishRelay.accept(15);
|
||||
//First Observer will receive all events
|
||||
firstObserver.assertValues(5, 10, 15);
|
||||
//Second Observer will receive only last event
|
||||
secondObserver.assertValue(15);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenObserverSubscribedToBehaviorRelayWithoutDefaultValue_thenItIsEmpty() {
|
||||
BehaviorRelay<Integer> behaviorRelay = BehaviorRelay.create();
|
||||
TestObserver<Integer> firstObserver = new TestObserver<>();
|
||||
behaviorRelay.subscribe(firstObserver);
|
||||
firstObserver.assertEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenObserverSubscribedToBehaviorRelay_thenItReceivesDefaultValue() {
|
||||
BehaviorRelay<Integer> behaviorRelay = BehaviorRelay.createDefault(1);
|
||||
TestObserver<Integer> firstObserver = new TestObserver<>();
|
||||
behaviorRelay.subscribe(firstObserver);
|
||||
firstObserver.assertValue(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenObserverSubscribedToBehaviorRelay_thenItReceivesEmittedEvents () {
|
||||
BehaviorRelay<Integer> behaviorRelay = BehaviorRelay.create();
|
||||
TestObserver<Integer> firstObserver = TestObserver.create();
|
||||
TestObserver<Integer> secondObserver = TestObserver.create();
|
||||
behaviorRelay.accept(5);
|
||||
behaviorRelay.subscribe(firstObserver);
|
||||
behaviorRelay.accept(10);
|
||||
behaviorRelay.subscribe(secondObserver);
|
||||
behaviorRelay.accept(15);
|
||||
firstObserver.assertValues(5, 10, 15);
|
||||
secondObserver.assertValues(10, 15);
|
||||
}
|
||||
@Test
|
||||
public void whenObserverSubscribedToReplayRelay_thenItReceivesEmittedEvents () {
|
||||
ReplayRelay<Integer> replayRelay = ReplayRelay.create();
|
||||
TestObserver<Integer> firstObserver = TestObserver.create();
|
||||
TestObserver<Integer> secondObserver = TestObserver.create();
|
||||
replayRelay.subscribe(firstObserver);
|
||||
replayRelay.accept(5);
|
||||
replayRelay.accept(10);
|
||||
replayRelay.accept(15);
|
||||
replayRelay.subscribe(secondObserver);
|
||||
firstObserver.assertValues(5, 10, 15);
|
||||
secondObserver.assertValues(5, 10, 15);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenObserverSubscribedToReplayRelayWithLimitedSize_thenItReceivesEmittedEvents () {
|
||||
ReplayRelay<Integer> replayRelay = ReplayRelay.createWithSize(2);
|
||||
TestObserver<Integer> firstObserver = TestObserver.create();
|
||||
replayRelay.accept(5);
|
||||
replayRelay.accept(10);
|
||||
replayRelay.accept(15);
|
||||
replayRelay.accept(20);
|
||||
replayRelay.subscribe(firstObserver);
|
||||
|
||||
firstObserver.assertValues(15, 20);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void whenObserverSubscribedToReplayRelayWithMaxAge_thenItReceivesEmittedEvents () throws InterruptedException {
|
||||
ReplayRelay<Integer> replayRelay = ReplayRelay.createWithTime(2000, TimeUnit.MILLISECONDS, new SingleScheduler());
|
||||
TestObserver<Integer> firstObserver = TestObserver.create();
|
||||
replayRelay.accept(5);
|
||||
replayRelay.accept(10);
|
||||
replayRelay.accept(15);
|
||||
replayRelay.accept(20);
|
||||
Thread.sleep(3000);
|
||||
replayRelay.subscribe(firstObserver);
|
||||
firstObserver.assertEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenTwoObserversSubscribedToRandomRelay_thenOnlyOneReceivesEvent () {
|
||||
RandomRelay randomRelay = new RandomRelay();
|
||||
TestObserver<Integer> firstObserver = TestObserver.create();
|
||||
TestObserver<Integer> secondObserver = TestObserver.create();
|
||||
randomRelay.subscribe(firstObserver);
|
||||
randomRelay.subscribe(secondObserver);
|
||||
randomRelay.accept(5);
|
||||
if(firstObserver.values().isEmpty()) {
|
||||
secondObserver.assertValue(5);
|
||||
} else {
|
||||
firstObserver.assertValue(5);
|
||||
secondObserver.assertEmpty();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
package com.baeldung.rxjava.jdbc;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.github.davidmoten.rx.jdbc.ConnectionProvider;
|
||||
import com.github.davidmoten.rx.jdbc.Database;
|
||||
|
||||
import rx.Observable;
|
||||
|
||||
public class AutomapClassIntegrationTest {
|
||||
|
||||
private ConnectionProvider connectionProvider = Connector.connectionProvider;
|
||||
private Database db = Database.from(connectionProvider);
|
||||
|
||||
private Observable<Integer> create = null;
|
||||
private Observable<Integer> insert1, insert2 = null;
|
||||
|
||||
@Before
|
||||
public void setup() {
|
||||
create = db.update("CREATE TABLE IF NOT EXISTS MANAGER(id int primary key, name varchar(255))")
|
||||
.count();
|
||||
insert1 = db.update("INSERT INTO MANAGER(id, name) VALUES(1, 'Alan')")
|
||||
.dependsOn(create)
|
||||
.count();
|
||||
insert2 = db.update("INSERT INTO MANAGER(id, name) VALUES(2, 'Sarah')")
|
||||
.dependsOn(create)
|
||||
.count();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenSelectManagersAndAutomap_thenCorrect() {
|
||||
List<Manager> managers = db.select("select id, name from MANAGER")
|
||||
.dependsOn(create)
|
||||
.dependsOn(insert1)
|
||||
.dependsOn(insert2)
|
||||
.autoMap(Manager.class)
|
||||
.toList()
|
||||
.toBlocking()
|
||||
.single();
|
||||
|
||||
assertThat(managers.get(0)
|
||||
.getId()).isEqualTo(1);
|
||||
assertThat(managers.get(0)
|
||||
.getName()).isEqualTo("Alan");
|
||||
assertThat(managers.get(1)
|
||||
.getId()).isEqualTo(2);
|
||||
assertThat(managers.get(1)
|
||||
.getName()).isEqualTo("Sarah");
|
||||
}
|
||||
|
||||
@After
|
||||
public void close() {
|
||||
db.update("DROP TABLE MANAGER")
|
||||
.dependsOn(create);
|
||||
connectionProvider.close();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
package com.baeldung.rxjava.jdbc;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.github.davidmoten.rx.jdbc.ConnectionProvider;
|
||||
import com.github.davidmoten.rx.jdbc.Database;
|
||||
|
||||
import rx.Observable;
|
||||
|
||||
public class AutomapInterfaceIntegrationTest {
|
||||
|
||||
private ConnectionProvider connectionProvider = Connector.connectionProvider;
|
||||
private Database db = Database.from(connectionProvider);
|
||||
|
||||
private Observable<Integer> truncate = null;
|
||||
private Observable<Integer> insert1, insert2 = null;
|
||||
|
||||
@Before
|
||||
public void setup() {
|
||||
Observable<Integer> create = db.update("CREATE TABLE IF NOT EXISTS EMPLOYEE(id int primary key, name varchar(255))")
|
||||
.count();
|
||||
truncate = db.update("TRUNCATE TABLE EMPLOYEE")
|
||||
.dependsOn(create)
|
||||
.count();
|
||||
insert1 = db.update("INSERT INTO EMPLOYEE(id, name) VALUES(1, 'Alan')")
|
||||
.dependsOn(truncate)
|
||||
.count();
|
||||
insert2 = db.update("INSERT INTO EMPLOYEE(id, name) VALUES(2, 'Sarah')")
|
||||
.dependsOn(insert1)
|
||||
.count();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenSelectFromTableAndAutomap_thenCorrect() {
|
||||
List<Employee> employees = db.select("select id, name from EMPLOYEE")
|
||||
.dependsOn(insert2)
|
||||
.autoMap(Employee.class)
|
||||
.toList()
|
||||
.toBlocking()
|
||||
.single();
|
||||
|
||||
assertThat(employees.get(0)
|
||||
.id()).isEqualTo(1);
|
||||
assertThat(employees.get(0)
|
||||
.name()).isEqualTo("Alan");
|
||||
assertThat(employees.get(1)
|
||||
.id()).isEqualTo(2);
|
||||
assertThat(employees.get(1)
|
||||
.name()).isEqualTo("Sarah");
|
||||
}
|
||||
|
||||
@After
|
||||
public void close() {
|
||||
db.update("DROP TABLE EMPLOYEE")
|
||||
.dependsOn(truncate);
|
||||
connectionProvider.close();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
package com.baeldung.rxjava.jdbc;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.github.davidmoten.rx.jdbc.ConnectionProvider;
|
||||
import com.github.davidmoten.rx.jdbc.Database;
|
||||
|
||||
import rx.Observable;
|
||||
|
||||
public class BasicQueryTypesIntegrationTest {
|
||||
|
||||
private ConnectionProvider connectionProvider = Connector.connectionProvider;
|
||||
private Database db = Database.from(connectionProvider);
|
||||
|
||||
private Observable<Integer> create;
|
||||
|
||||
@Test
|
||||
public void whenCreateTableAndInsertRecords_thenCorrect() {
|
||||
create = db.update("CREATE TABLE IF NOT EXISTS EMPLOYEE_TABLE(id int primary key, name varchar(255))")
|
||||
.count();
|
||||
Observable<Integer> insert1 = db.update("INSERT INTO EMPLOYEE_TABLE(id, name) VALUES(1, 'John')")
|
||||
.dependsOn(create)
|
||||
.count();
|
||||
Observable<Integer> update = db.update("UPDATE EMPLOYEE_TABLE SET name = 'Alan' WHERE id = 1")
|
||||
.dependsOn(create)
|
||||
.count();
|
||||
Observable<Integer> insert2 = db.update("INSERT INTO EMPLOYEE_TABLE(id, name) VALUES(2, 'Sarah')")
|
||||
.dependsOn(create)
|
||||
.count();
|
||||
Observable<Integer> insert3 = db.update("INSERT INTO EMPLOYEE_TABLE(id, name) VALUES(3, 'Mike')")
|
||||
.dependsOn(create)
|
||||
.count();
|
||||
Observable<Integer> delete = db.update("DELETE FROM EMPLOYEE_TABLE WHERE id = 2")
|
||||
.dependsOn(create)
|
||||
.count();
|
||||
List<String> names = db.select("select name from EMPLOYEE_TABLE where id < ?")
|
||||
.parameter(3)
|
||||
.dependsOn(create)
|
||||
.dependsOn(insert1)
|
||||
.dependsOn(insert2)
|
||||
.dependsOn(insert3)
|
||||
.dependsOn(update)
|
||||
.dependsOn(delete)
|
||||
.getAs(String.class)
|
||||
.toList()
|
||||
.toBlocking()
|
||||
.single();
|
||||
|
||||
assertEquals(Arrays.asList("Alan"), names);
|
||||
}
|
||||
|
||||
@After
|
||||
public void close() {
|
||||
db.update("DROP TABLE EMPLOYEE_TABLE")
|
||||
.dependsOn(create);
|
||||
connectionProvider.close();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
package com.baeldung.rxjava.jdbc;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.github.davidmoten.rx.jdbc.ConnectionProvider;
|
||||
import com.github.davidmoten.rx.jdbc.Database;
|
||||
|
||||
import rx.Observable;
|
||||
|
||||
public class InsertBlobIntegrationTest {
|
||||
|
||||
private ConnectionProvider connectionProvider = Connector.connectionProvider;
|
||||
private Database db = Database.from(connectionProvider);
|
||||
|
||||
private String expectedDocument = null;
|
||||
private String actualDocument = null;
|
||||
|
||||
private Observable<Integer> create, insert = null;
|
||||
|
||||
@Before
|
||||
public void setup() throws IOException {
|
||||
create = db.update("CREATE TABLE IF NOT EXISTS SERVERLOG (id int primary key, document BLOB)")
|
||||
.count();
|
||||
|
||||
InputStream actualInputStream = new FileInputStream("src/test/resources/actual_clob");
|
||||
this.actualDocument = Utils.getStringFromInputStream(actualInputStream);
|
||||
byte[] bytes = this.actualDocument.getBytes(StandardCharsets.UTF_8);
|
||||
|
||||
InputStream expectedInputStream = new FileInputStream("src/test/resources/expected_clob");
|
||||
this.expectedDocument = Utils.getStringFromInputStream(expectedInputStream);
|
||||
this.insert = db.update("insert into SERVERLOG(id,document) values(?,?)")
|
||||
.parameter(1)
|
||||
.parameter(Database.toSentinelIfNull(bytes))
|
||||
.dependsOn(create)
|
||||
.count();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenInsertBLOB_thenCorrect() throws IOException {
|
||||
db.select("select document from SERVERLOG where id = 1")
|
||||
.dependsOn(create)
|
||||
.dependsOn(insert)
|
||||
.getAs(String.class)
|
||||
.toList()
|
||||
.toBlocking()
|
||||
.single();
|
||||
assertEquals(expectedDocument, actualDocument);
|
||||
}
|
||||
|
||||
@After
|
||||
public void close() {
|
||||
db.update("DROP TABLE SERVERLOG")
|
||||
.dependsOn(create);
|
||||
connectionProvider.close();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
package com.baeldung.rxjava.jdbc;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.github.davidmoten.rx.jdbc.ConnectionProvider;
|
||||
import com.github.davidmoten.rx.jdbc.Database;
|
||||
|
||||
import rx.Observable;
|
||||
|
||||
public class InsertClobIntegrationTest {
|
||||
|
||||
private ConnectionProvider connectionProvider = Connector.connectionProvider;
|
||||
private Database db = Database.from(connectionProvider);
|
||||
|
||||
private String expectedDocument = null;
|
||||
private String actualDocument = null;
|
||||
|
||||
private Observable<Integer> create, insert = null;
|
||||
|
||||
@Before
|
||||
public void setup() throws IOException {
|
||||
create = db.update("CREATE TABLE IF NOT EXISTS SERVERLOG_TABLE (id int primary key, document CLOB)")
|
||||
.count();
|
||||
|
||||
InputStream actualInputStream = new FileInputStream("src/test/resources/actual_clob");
|
||||
this.actualDocument = Utils.getStringFromInputStream(actualInputStream);
|
||||
|
||||
InputStream expectedInputStream = new FileInputStream("src/test/resources/expected_clob");
|
||||
this.expectedDocument = Utils.getStringFromInputStream(expectedInputStream);
|
||||
this.insert = db.update("insert into SERVERLOG_TABLE(id,document) values(?,?)")
|
||||
.parameter(1)
|
||||
.parameter(Database.toSentinelIfNull(actualDocument))
|
||||
.dependsOn(create)
|
||||
.count();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenSelectCLOB_thenCorrect() throws IOException {
|
||||
db.select("select document from SERVERLOG_TABLE where id = 1")
|
||||
.dependsOn(create)
|
||||
.dependsOn(insert)
|
||||
.getAs(String.class)
|
||||
.toList()
|
||||
.toBlocking()
|
||||
.single();
|
||||
assertEquals(expectedDocument, actualDocument);
|
||||
}
|
||||
|
||||
@After
|
||||
public void close() {
|
||||
db.update("DROP TABLE SERVERLOG_TABLE")
|
||||
.dependsOn(create);
|
||||
connectionProvider.close();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.baeldung.rxjava.jdbc;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.github.davidmoten.rx.jdbc.ConnectionProvider;
|
||||
import com.github.davidmoten.rx.jdbc.Database;
|
||||
|
||||
import rx.Observable;
|
||||
|
||||
public class ReturnKeysIntegrationTest {
|
||||
|
||||
private Observable<Boolean> begin = null;
|
||||
private Observable<Integer> createStatement = null;
|
||||
|
||||
private ConnectionProvider connectionProvider = Connector.connectionProvider;
|
||||
private Database db = Database.from(connectionProvider);
|
||||
|
||||
@Before
|
||||
public void setup() {
|
||||
begin = db.beginTransaction();
|
||||
createStatement = db.update("CREATE TABLE IF NOT EXISTS EMPLOYEE_SAMPLE(id int auto_increment primary key, name varchar(255))")
|
||||
.dependsOn(begin)
|
||||
.count();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenInsertAndReturnGeneratedKey_thenCorrect() {
|
||||
Integer key = db.update("INSERT INTO EMPLOYEE_SAMPLE(name) VALUES('John')")
|
||||
.dependsOn(createStatement)
|
||||
.returnGeneratedKeys()
|
||||
.getAs(Integer.class)
|
||||
.count()
|
||||
.toBlocking()
|
||||
.single();
|
||||
assertThat(key).isEqualTo(1);
|
||||
}
|
||||
|
||||
@After
|
||||
public void close() {
|
||||
db.update("DROP TABLE EMPLOYEE_SAMPLE")
|
||||
.dependsOn(createStatement);
|
||||
connectionProvider.close();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package com.baeldung.rxjava.jdbc;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.github.davidmoten.rx.jdbc.ConnectionProvider;
|
||||
import com.github.davidmoten.rx.jdbc.Database;
|
||||
|
||||
import rx.Observable;
|
||||
|
||||
public class TransactionIntegrationTest {
|
||||
|
||||
private Observable<Integer> createStatement = null;
|
||||
|
||||
private ConnectionProvider connectionProvider = Connector.connectionProvider;
|
||||
private Database db = Database.from(connectionProvider);
|
||||
|
||||
@Test
|
||||
public void whenCommitTransaction_thenRecordUpdated() {
|
||||
Observable<Boolean> begin = db.beginTransaction();
|
||||
Observable<Integer> createStatement = db
|
||||
.update("CREATE TABLE IF NOT EXISTS EMPLOYEE(id int primary key, name varchar(255))")
|
||||
.dependsOn(begin)
|
||||
.count();
|
||||
Observable<Integer> truncateStatement = db.update("TRUNCATE TABLE EMPLOYEE")
|
||||
.dependsOn(createStatement)
|
||||
.count();
|
||||
Observable<Integer> insertStatement = db.update("INSERT INTO EMPLOYEE(id, name) VALUES(1, 'John')")
|
||||
.dependsOn(truncateStatement)
|
||||
.count();
|
||||
Observable<Integer> updateStatement = db.update("UPDATE EMPLOYEE SET name = 'Tom' WHERE id = 1")
|
||||
.dependsOn(insertStatement)
|
||||
.count();
|
||||
Observable<Boolean> commit = db.commit(updateStatement);
|
||||
String name = db.select("select name from EMPLOYEE WHERE id = 1")
|
||||
.dependsOn(commit)
|
||||
.getAs(String.class)
|
||||
.toBlocking()
|
||||
.single();
|
||||
|
||||
assertEquals("Tom", name);
|
||||
}
|
||||
|
||||
@After
|
||||
public void close() {
|
||||
db.update("DROP TABLE EMPLOYEE")
|
||||
.dependsOn(createStatement);
|
||||
connectionProvider.close();
|
||||
}
|
||||
}
|
||||
1546
rxjava-libraries/src/test/resources/actual_clob
Normal file
1546
rxjava-libraries/src/test/resources/actual_clob
Normal file
File diff suppressed because it is too large
Load Diff
1546
rxjava-libraries/src/test/resources/expected_clob
Normal file
1546
rxjava-libraries/src/test/resources/expected_clob
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user