@@ -27,12 +27,14 @@ using ::testing::IsEmpty;
2727TEST (TransactionOptions, Construction) {
2828 Timestamp read_timestamp{};
2929 std::chrono::nanoseconds staleness{};
30+ auto read_lock_mode = Transaction::ReadLockMode::kOptimistic ;
3031
3132 Transaction::ReadOnlyOptions strong;
3233 Transaction::ReadOnlyOptions exact_ts (read_timestamp);
3334 Transaction::ReadOnlyOptions exact_dur (staleness);
3435
3536 Transaction::ReadWriteOptions none;
37+ Transaction::ReadWriteOptions rw_with_read_lock (read_lock_mode);
3638
3739 Transaction::SingleUseOptions su_strong (strong);
3840 Transaction::SingleUseOptions su_exact_ts (exact_ts);
@@ -130,6 +132,47 @@ TEST(Transaction, SessionAffinity) {
130132 });
131133}
132134
135+ TEST (Transaction, ReadWriteOptions_WithTag) {
136+ auto opts = Transaction::ReadWriteOptions ().WithTag (" test-tag" );
137+ Transaction txn = MakeReadWriteTransaction (opts);
138+ spanner_internal::Visit (
139+ txn, [&](spanner_internal::SessionHolder& /* session*/ ,
140+ StatusOr<google::spanner::v1::TransactionSelector>& s,
141+ spanner_internal::TransactionContext const & ctx) {
142+ EXPECT_TRUE (s->has_begin ());
143+ EXPECT_TRUE (s->begin ().has_read_write ());
144+ EXPECT_EQ (ctx.tag , " test-tag" );
145+ return 0 ;
146+ });
147+ }
148+
149+ TEST (Transaction, ReadWriteOptions_WithReadLockMode) {
150+ auto check_lock_mode =
151+ [](Transaction::ReadLockMode mode,
152+ google::spanner::v1::TransactionOptions_ReadWrite_ReadLockMode
153+ expected_proto_mode) {
154+ auto opts = Transaction::ReadWriteOptions (mode);
155+ Transaction txn = MakeReadWriteTransaction (opts);
156+ spanner_internal::Visit (
157+ txn, [&](spanner_internal::SessionHolder& /* session*/ ,
158+ StatusOr<google::spanner::v1::TransactionSelector>& s,
159+ spanner_internal::TransactionContext const & /* ctx*/ ) {
160+ EXPECT_TRUE (s->has_begin ());
161+ EXPECT_TRUE (s->begin ().has_read_write ());
162+ EXPECT_EQ (s->begin ().read_write ().read_lock_mode (),
163+ expected_proto_mode);
164+ return 0 ;
165+ });
166+ };
167+
168+ check_lock_mode (
169+ Transaction::ReadLockMode::kPessimistic ,
170+ google::spanner::v1::TransactionOptions_ReadWrite::PESSIMISTIC);
171+ check_lock_mode (
172+ Transaction::ReadLockMode::kOptimistic ,
173+ google::spanner::v1::TransactionOptions_ReadWrite::OPTIMISTIC);
174+ }
175+
133176} // namespace
134177GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END
135178} // namespace spanner
0 commit comments