public void RunWithRetryableTransactionWithTransactionTag() { var transactionTag = "retryable-tx-tag"; Mock <SpannerClient> spannerClientMock = SpannerClientHelpers .CreateMockClient(Logger.DefaultLogger, MockBehavior.Strict); spannerClientMock .SetupBatchCreateSessionsAsync() .SetupBeginTransactionAsync() .SetupExecuteStreamingSql() .SetupCommitAsync_Fails(1, StatusCode.Aborted, exceptionRetryDelay: TimeSpan.FromMilliseconds(0)) .SetupRollbackAsync(); SpannerConnection connection = BuildSpannerConnection(spannerClientMock); connection.Builder.SessionPoolManager.SpannerSettings.Scheduler = new NoOpScheduler(); connection.RunWithRetriableTransaction(tx => { tx.Tag = transactionTag; var command = connection.CreateSelectCommand("SELECT * FROM FOO"); command.Transaction = tx; command.Tag = null; using (var reader = command.ExecuteReader()) { Assert.True(reader.HasRows); } }); spannerClientMock.Verify(client => client.ExecuteStreamingSql( It.Is <ExecuteSqlRequest>(request => request.RequestOptions.TransactionTag == transactionTag), It.IsAny <CallSettings>()), Times.Exactly(2)); spannerClientMock.Verify(client => client.CommitAsync( It.Is <CommitRequest>(request => request.RequestOptions.TransactionTag == transactionTag), It.IsAny <CallSettings>()), Times.Exactly(2)); }