Skip to content

Commit b2fe6c2

Browse files
TestKit backend: except txMeta as Cypher types (#1349)
* TestKit backend: except txMeta as Cypher types Depends on: * neo4j-drivers/testkit#538 * Remove unused imports * Refactoring Co-authored-by: Dmitriy Tverdiakov <[email protected]>
1 parent 19a6eaf commit b2fe6c2

File tree

5 files changed

+113
-134
lines changed

5 files changed

+113
-134
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/*
2+
* Copyright (c) "Neo4j"
3+
* Neo4j Sweden AB [http://neo4j.com]
4+
*
5+
* This file is part of Neo4j.
6+
*
7+
* Licensed under the Apache License, Version 2.0 (the "License");
8+
* you may not use this file except in compliance with the License.
9+
* You may obtain a copy of the License at
10+
*
11+
* http://www.apache.org/licenses/LICENSE-2.0
12+
*
13+
* Unless required by applicable law or agreed to in writing, software
14+
* distributed under the License is distributed on an "AS IS" BASIS,
15+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16+
* See the License for the specific language governing permissions and
17+
* limitations under the License.
18+
*/
19+
package neo4j.org.testkit.backend.messages.requests;
20+
21+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
22+
import java.time.Duration;
23+
import java.util.Map;
24+
import java.util.Optional;
25+
import lombok.Getter;
26+
import lombok.Setter;
27+
import neo4j.org.testkit.backend.CustomDriverError;
28+
import neo4j.org.testkit.backend.messages.requests.deserializer.TestkitCypherParamDeserializer;
29+
import org.neo4j.driver.TransactionConfig;
30+
31+
@Setter
32+
@Getter
33+
abstract class AbstractTestkitRequestWithTransactionConfig<
34+
T extends AbstractTestkitRequestWithTransactionConfig.TransactionConfigBody>
35+
implements TestkitRequest {
36+
protected T data;
37+
38+
protected TransactionConfig buildTxConfig() {
39+
return configureTx(TransactionConfig.builder()).build();
40+
}
41+
42+
private TransactionConfig.Builder configureTx(TransactionConfig.Builder builder) {
43+
return configureTxMetadata(configureTxTimeout(builder));
44+
}
45+
46+
private TransactionConfig.Builder configureTxMetadata(TransactionConfig.Builder builder) {
47+
data.getTxMeta().ifPresent(builder::withMetadata);
48+
return builder;
49+
}
50+
51+
private TransactionConfig.Builder configureTxTimeout(TransactionConfig.Builder builder) {
52+
try {
53+
data.getTimeout().ifPresent((timeout) -> builder.withTimeout(Duration.ofMillis(timeout)));
54+
} catch (IllegalArgumentException e) {
55+
throw new CustomDriverError(e);
56+
}
57+
return builder;
58+
}
59+
60+
@Setter
61+
abstract static class TransactionConfigBody {
62+
protected Integer timeout;
63+
64+
@JsonDeserialize(using = TestkitCypherParamDeserializer.class)
65+
protected Map<String, Object> txMeta;
66+
67+
Optional<Integer> getTimeout() {
68+
return Optional.ofNullable(timeout);
69+
}
70+
71+
Optional<Map<String, Object>> getTxMeta() {
72+
return Optional.ofNullable(txMeta);
73+
}
74+
}
75+
}

testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/SessionBeginTransaction.java

Lines changed: 9 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,9 @@
2020

2121
import static reactor.adapter.JdkFlowAdapter.flowPublisherToFlux;
2222

23-
import java.time.Duration;
24-
import java.util.Map;
25-
import java.util.Optional;
2623
import java.util.concurrent.CompletionStage;
2724
import lombok.Getter;
2825
import lombok.Setter;
29-
import neo4j.org.testkit.backend.CustomDriverError;
3026
import neo4j.org.testkit.backend.TestkitState;
3127
import neo4j.org.testkit.backend.holder.AsyncTransactionHolder;
3228
import neo4j.org.testkit.backend.holder.ReactiveTransactionHolder;
@@ -43,35 +39,14 @@
4339
import org.neo4j.driver.reactive.RxSession;
4440
import reactor.core.publisher.Mono;
4541

46-
@Setter
47-
@Getter
48-
public class SessionBeginTransaction implements TestkitRequest {
49-
private SessionBeginTransactionBody data;
50-
51-
private void configureTimeout(TransactionConfig.Builder builder) {
52-
if (data.getTimeoutPresent()) {
53-
try {
54-
if (data.getTimeout() != null) {
55-
builder.withTimeout(Duration.ofMillis(data.getTimeout()));
56-
} else {
57-
builder.withDefaultTimeout();
58-
}
59-
} catch (IllegalArgumentException e) {
60-
throw new CustomDriverError(e);
61-
}
62-
}
63-
}
64-
42+
public class SessionBeginTransaction
43+
extends AbstractTestkitRequestWithTransactionConfig<SessionBeginTransaction.SessionBeginTransactionBody> {
6544
@Override
6645
public TestkitResponse process(TestkitState testkitState) {
6746
SessionHolder sessionHolder = testkitState.getSessionHolder(data.getSessionId());
6847
Session session = sessionHolder.getSession();
69-
TransactionConfig.Builder builder = TransactionConfig.builder();
70-
Optional.ofNullable(data.txMeta).ifPresent(builder::withMetadata);
7148

72-
configureTimeout(builder);
73-
74-
org.neo4j.driver.Transaction transaction = session.beginTransaction(builder.build());
49+
org.neo4j.driver.Transaction transaction = session.beginTransaction(buildTxConfig());
7550
return transaction(testkitState.addTransactionHolder(new TransactionHolder(sessionHolder, transaction)));
7651
}
7752

@@ -80,11 +55,8 @@ public CompletionStage<TestkitResponse> processAsync(TestkitState testkitState)
8055
return testkitState.getAsyncSessionHolder(data.getSessionId()).thenCompose(sessionHolder -> {
8156
AsyncSession session = sessionHolder.getSession();
8257
TransactionConfig.Builder builder = TransactionConfig.builder();
83-
Optional.ofNullable(data.txMeta).ifPresent(builder::withMetadata);
84-
85-
configureTimeout(builder);
8658

87-
return session.beginTransactionAsync(builder.build())
59+
return session.beginTransactionAsync(buildTxConfig())
8860
.thenApply(tx -> transaction(
8961
testkitState.addAsyncTransactionHolder(new AsyncTransactionHolder(sessionHolder, tx))));
9062
});
@@ -96,11 +68,8 @@ public Mono<TestkitResponse> processRx(TestkitState testkitState) {
9668
return testkitState.getRxSessionHolder(data.getSessionId()).flatMap(sessionHolder -> {
9769
RxSession session = sessionHolder.getSession();
9870
TransactionConfig.Builder builder = TransactionConfig.builder();
99-
Optional.ofNullable(data.txMeta).ifPresent(builder::withMetadata);
10071

101-
configureTimeout(builder);
102-
103-
return Mono.fromDirect(session.beginTransaction(builder.build()))
72+
return Mono.fromDirect(session.beginTransaction(buildTxConfig()))
10473
.map(tx -> transaction(
10574
testkitState.addRxTransactionHolder(new RxTransactionHolder(sessionHolder, tx))));
10675
});
@@ -111,11 +80,8 @@ public Mono<TestkitResponse> processReactive(TestkitState testkitState) {
11180
return testkitState.getReactiveSessionHolder(data.getSessionId()).flatMap(sessionHolder -> {
11281
ReactiveSession session = sessionHolder.getSession();
11382
TransactionConfig.Builder builder = TransactionConfig.builder();
114-
Optional.ofNullable(data.txMeta).ifPresent(builder::withMetadata);
115-
116-
configureTimeout(builder);
11783

118-
return Mono.fromDirect(flowPublisherToFlux(session.beginTransaction(builder.build())))
84+
return Mono.fromDirect(flowPublisherToFlux(session.beginTransaction(buildTxConfig())))
11985
.map(tx -> transaction(testkitState.addReactiveTransactionHolder(
12086
new ReactiveTransactionHolder(sessionHolder, tx))));
12187
});
@@ -126,11 +92,8 @@ public Mono<TestkitResponse> processReactiveStreams(TestkitState testkitState) {
12692
return testkitState.getReactiveSessionStreamsHolder(data.getSessionId()).flatMap(sessionHolder -> {
12793
var session = sessionHolder.getSession();
12894
TransactionConfig.Builder builder = TransactionConfig.builder();
129-
Optional.ofNullable(data.txMeta).ifPresent(builder::withMetadata);
13095

131-
configureTimeout(builder);
132-
133-
return Mono.fromDirect(session.beginTransaction(builder.build()))
96+
return Mono.fromDirect(session.beginTransaction(buildTxConfig()))
13497
.map(tx -> transaction(testkitState.addReactiveTransactionStreamsHolder(
13598
new ReactiveTransactionStreamsHolder(sessionHolder, tx))));
13699
});
@@ -144,15 +107,8 @@ private Transaction transaction(String txId) {
144107

145108
@Getter
146109
@Setter
147-
public static class SessionBeginTransactionBody {
110+
public static class SessionBeginTransactionBody
111+
extends AbstractTestkitRequestWithTransactionConfig.TransactionConfigBody {
148112
private String sessionId;
149-
private Map<String, Object> txMeta;
150-
private Integer timeout;
151-
private Boolean timeoutPresent = false;
152-
153-
public void setTimeout(Integer timeout) {
154-
this.timeout = timeout;
155-
timeoutPresent = true;
156-
}
157113
}
158114
}

testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/SessionReadTransaction.java

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,17 +47,14 @@
4747
import org.reactivestreams.Publisher;
4848
import reactor.core.publisher.Mono;
4949

50-
@Setter
51-
@Getter
52-
public class SessionReadTransaction implements TestkitRequest {
53-
private SessionReadTransactionBody data;
54-
50+
public class SessionReadTransaction
51+
extends AbstractTestkitRequestWithTransactionConfig<SessionReadTransaction.SessionReadTransactionBody> {
5552
@Override
5653
@SuppressWarnings("deprecation")
5754
public TestkitResponse process(TestkitState testkitState) {
5855
SessionHolder sessionHolder = testkitState.getSessionHolder(data.getSessionId());
5956
Session session = sessionHolder.getSession();
60-
session.readTransaction(handle(testkitState, sessionHolder));
57+
session.readTransaction(handle(testkitState, sessionHolder), buildTxConfig());
6158
return retryableDone();
6259
}
6360

@@ -78,7 +75,7 @@ public CompletionStage<TestkitResponse> processAsync(TestkitState testkitState)
7875
return txWorkFuture;
7976
};
8077

81-
return session.readTransactionAsync(workWrapper);
78+
return session.readTransactionAsync(workWrapper, buildTxConfig());
8279
})
8380
.thenApply(nothing -> retryableDone());
8481
}
@@ -97,7 +94,7 @@ public Mono<TestkitResponse> processRx(TestkitState testkitState) {
9794
return Mono.fromCompletionStage(tryResult);
9895
};
9996

100-
return Mono.fromDirect(sessionHolder.getSession().readTransaction(workWrapper));
97+
return Mono.fromDirect(sessionHolder.getSession().readTransaction(workWrapper, buildTxConfig()));
10198
})
10299
.then(Mono.just(retryableDone()));
103100
}
@@ -117,7 +114,7 @@ public Mono<TestkitResponse> processReactive(TestkitState testkitState) {
117114
};
118115

119116
return Mono.fromDirect(
120-
flowPublisherToFlux(sessionHolder.getSession().executeRead(workWrapper)));
117+
flowPublisherToFlux(sessionHolder.getSession().executeRead(workWrapper, buildTxConfig())));
121118
})
122119
.then(Mono.just(retryableDone()));
123120
}
@@ -137,7 +134,7 @@ public Mono<TestkitResponse> processReactiveStreams(TestkitState testkitState) {
137134
return Mono.fromCompletionStage(tryResult);
138135
};
139136

140-
return Mono.fromDirect(sessionHolder.getSession().executeRead(workWrapper));
137+
return Mono.fromDirect(sessionHolder.getSession().executeRead(workWrapper, buildTxConfig()));
141138
})
142139
.then(Mono.just(retryableDone()));
143140
}
@@ -177,7 +174,8 @@ private RetryableDone retryableDone() {
177174

178175
@Setter
179176
@Getter
180-
public static class SessionReadTransactionBody {
177+
public static class SessionReadTransactionBody
178+
extends AbstractTestkitRequestWithTransactionConfig.TransactionConfigBody {
181179
private String sessionId;
182180
}
183181
}

0 commit comments

Comments
 (0)