Skip to content

Commit d6dd961

Browse files
committed
PR feedback
1 parent a953a35 commit d6dd961

3 files changed

Lines changed: 50 additions & 55 deletions

File tree

.github/workflows/functional-tests.yml

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -202,12 +202,19 @@ jobs:
202202
203203
- name: Create test dataverse for scope-level queries
204204
run: |
205-
echo "Creating test dataverse 'testscope' (under Default database) for scope-level functional tests"
206-
curl -sS -k -u "${CBDINO_USER}:${CBDINO_PASS}" \
205+
echo "Creating test dataverse 'testscope' for scope-level functional tests"
206+
HTTP_CODE=$(curl -sS -o /tmp/dataverse-response.json -w "%{http_code}" -k \
207+
-u "${CBDINO_USER}:${CBDINO_PASS}" \
207208
-H "Content-Type: application/json" \
208209
-d '{"statement": "CREATE DATAVERSE testscope IF NOT EXISTS;"}' \
209-
"${CBDINO_CONNSTR}/api/v1/request"
210+
"${CBDINO_CONNSTR}/api/v1/request")
211+
echo "HTTP status: $HTTP_CODE"
212+
cat /tmp/dataverse-response.json
210213
echo ""
214+
if [ "$HTTP_CODE" != "200" ]; then
215+
echo "ERROR: Dataverse creation failed with HTTP $HTTP_CODE"
216+
exit 1
217+
fi
211218
echo "Dataverse created successfully"
212219
213220
- name: Build and Run Functional Tests

tests/Couchbase.Analytics.FunctionalTests/AsyncAnalyticsTests.cs

Lines changed: 35 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Diagnostics;
12
using Couchbase.AnalyticsClient.Async;
23
using Couchbase.AnalyticsClient.Exceptions;
34
using Couchbase.AnalyticsClient.FunctionalTests.Fixtures;
@@ -33,17 +34,7 @@ public async Task Test_AsyncAnalytics_EndToEnd_Cluster()
3334
Assert.NotNull(handle);
3435

3536
// 2. Poll for the query status
36-
QueryStatus? queryStatus = null;
37-
for (var i = 0; i < 20; i++)
38-
{
39-
queryStatus = await handle.FetchStatusAsync(new FetchStatusOptions());
40-
_outputHelper.WriteLine($"Status: {queryStatus}");
41-
if (queryStatus.ResultsReady)
42-
{
43-
break;
44-
}
45-
await Task.Delay(500);
46-
}
37+
var queryStatus = await PollUntilReadyAsync(handle, queryOptions.QueryTimeout ?? TimeSpan.FromSeconds(30));
4738

4839
Assert.NotNull(queryStatus);
4940
Assert.True(queryStatus!.ResultsReady);
@@ -53,7 +44,7 @@ public async Task Test_AsyncAnalytics_EndToEnd_Cluster()
5344
Assert.NotNull(resultHandle);
5445

5546
// 4. Fetch the results
56-
var results = await resultHandle.FetchResultsAsync(new FetchResultsOptions());
47+
await using var results = await resultHandle.FetchResultsAsync(new FetchResultsOptions());
5748
Assert.NotNull(results);
5849

5950
var count = 0;
@@ -86,7 +77,8 @@ public async Task Test_AsyncAnalytics_Cancellation_Cluster()
8677
// It's possible the cancel takes a brief moment to process gracefully on the server.
8778
var ex = await Record.ExceptionAsync(async () =>
8879
{
89-
for (var i = 0; i < 20; i++)
80+
var deadline = Stopwatch.StartNew();
81+
while (deadline.Elapsed < queryOptions.QueryTimeout)
9082
{
9183
var queryStatus = await handle.FetchStatusAsync(new FetchStatusOptions());
9284
if (queryStatus.ResultsReady)
@@ -112,19 +104,11 @@ public async Task Test_AsyncAnalytics_Cancellation_Cluster()
112104
public async Task Test_AsyncAnalytics_DiscardResults_Cluster()
113105
{
114106
var statement = "select i from array_range(1, 5) as i;";
115-
var handle = await _simpleFixture.Cluster.StartQueryAsync(statement, new StartQueryOptions());
107+
var queryOptions = new StartQueryOptions();
108+
var handle = await _simpleFixture.Cluster.StartQueryAsync(statement, queryOptions);
116109

117110
// Poll for the query status
118-
QueryStatus? queryStatus = null;
119-
for (var i = 0; i < 20; i++)
120-
{
121-
queryStatus = await handle.FetchStatusAsync(new FetchStatusOptions());
122-
if (queryStatus.ResultsReady)
123-
{
124-
break;
125-
}
126-
await Task.Delay(500);
127-
}
111+
var queryStatus = await PollUntilReadyAsync(handle, TimeSpan.FromSeconds(30));
128112

129113
Assert.NotNull(queryStatus);
130114
Assert.True(queryStatus!.ResultsReady);
@@ -159,16 +143,7 @@ public async Task Test_AsyncAnalytics_EndToEnd_Scope()
159143
Assert.NotNull(handle);
160144

161145
// 2. Poll for the query status
162-
QueryStatus? queryStatus = null;
163-
for (var i = 0; i < 20; i++)
164-
{
165-
queryStatus = await handle.FetchStatusAsync(new FetchStatusOptions());
166-
if (queryStatus.ResultsReady)
167-
{
168-
break;
169-
}
170-
await Task.Delay(500);
171-
}
146+
var queryStatus = await PollUntilReadyAsync(handle, queryOptions.QueryTimeout ?? TimeSpan.FromSeconds(30));
172147

173148
Assert.NotNull(queryStatus);
174149
Assert.True(queryStatus!.ResultsReady);
@@ -177,7 +152,7 @@ public async Task Test_AsyncAnalytics_EndToEnd_Scope()
177152
var resultHandle = queryStatus.ResultHandle();
178153
Assert.NotNull(resultHandle);
179154

180-
var results = await resultHandle.FetchResultsAsync(new FetchResultsOptions());
155+
await using var results = await resultHandle.FetchResultsAsync(new FetchResultsOptions());
181156
Assert.NotNull(results);
182157

183158
var count = 0;
@@ -202,23 +177,13 @@ public async Task Test_AsyncAnalytics_Metadata_Cluster()
202177
var handle = await _simpleFixture.Cluster.StartQueryAsync(statement, queryOptions);
203178
Assert.NotNull(handle);
204179

205-
QueryStatus? queryStatus = null;
206-
for (var i = 0; i < 20; i++)
207-
{
208-
queryStatus = await handle.FetchStatusAsync(new FetchStatusOptions());
209-
_outputHelper.WriteLine($"Status: {queryStatus}");
210-
if (queryStatus.ResultsReady)
211-
{
212-
break;
213-
}
214-
await Task.Delay(500);
215-
}
180+
var queryStatus = await PollUntilReadyAsync(handle, queryOptions.QueryTimeout ?? TimeSpan.FromSeconds(30));
216181

217182
Assert.NotNull(queryStatus);
218183
Assert.True(queryStatus!.ResultsReady);
219184

220185
var resultHandle = queryStatus.ResultHandle();
221-
var results = await resultHandle.FetchResultsAsync(new FetchResultsOptions());
186+
await using var results = await resultHandle.FetchResultsAsync(new FetchResultsOptions());
222187

223188
// Consume all rows
224189
var count = 0;
@@ -227,11 +192,34 @@ public async Task Test_AsyncAnalytics_Metadata_Cluster()
227192
count++;
228193
}
229194

195+
// Verify row count matches metrics
196+
Assert.Equal(99, count);
197+
230198
// Verify metrics
231199
Assert.NotNull(results.MetaData);
232200
Assert.NotNull(results.MetaData.Metrics);
233201
Assert.Equal(99, results.MetaData.Metrics!.ResultCount);
234202
Assert.NotNull(results.MetaData.Metrics.ElapsedTime);
235203
Assert.NotNull(results.MetaData.Metrics.ExecutionTime);
236204
}
205+
206+
/// <summary>
207+
/// Polls the query handle until results are ready or the deadline is reached.
208+
/// </summary>
209+
private async Task<QueryStatus?> PollUntilReadyAsync(QueryHandle handle, TimeSpan timeout)
210+
{
211+
var deadline = Stopwatch.StartNew();
212+
QueryStatus? queryStatus = null;
213+
while (deadline.Elapsed < timeout)
214+
{
215+
queryStatus = await handle.FetchStatusAsync(new FetchStatusOptions());
216+
_outputHelper.WriteLine($"Status: {queryStatus}");
217+
if (queryStatus.ResultsReady)
218+
{
219+
break;
220+
}
221+
await Task.Delay(500);
222+
}
223+
return queryStatus;
224+
}
237225
}

tests/Couchbase.Analytics.FunctionalTests/Internal/AnalyticsServiceTests.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public async Task Test_Streaming_Query()
4242
{
4343
var statement = "select i from array_range(1, 100) as i;";
4444

45-
var result = await _simpleFixture.Cluster.ExecuteQueryAsync(statement,
45+
await using var result = await _simpleFixture.Cluster.ExecuteQueryAsync(statement,
4646
new QueryOptions() { Timeout = TimeSpan.FromSeconds(10), AsStreaming = true });
4747

4848
await foreach (var row in result.Rows)
@@ -63,7 +63,7 @@ public async Task Test_Blocking_Query()
6363
{
6464
var statement = "select i from array_range(1, 100) as i;";
6565

66-
var result = await _simpleFixture.Cluster.ExecuteQueryAsync(statement,
66+
await using var result = await _simpleFixture.Cluster.ExecuteQueryAsync(statement,
6767
new QueryOptions() { Timeout = TimeSpan.FromSeconds(10), AsStreaming = false });
6868

6969
await foreach (var row in result.Rows)
@@ -96,7 +96,7 @@ public async Task Test_Query_Metadata_And_Metrics()
9696

9797
var statement = "select i from array_range(1, 100) as i;";
9898

99-
var result = await _simpleFixture.Cluster.ExecuteQueryAsync(statement,
99+
await using var result = await _simpleFixture.Cluster.ExecuteQueryAsync(statement,
100100
new QueryOptions() { Timeout = TimeSpan.FromSeconds(10), AsStreaming = false });
101101

102102
Assert.NotNull(result.MetaData);
@@ -159,7 +159,7 @@ public async Task Test_Streaming_Query_Scope()
159159
{
160160
var statement = "select i from array_range(1, 10) as i;";
161161

162-
var result = await _simpleFixture.TestScope.ExecuteQueryAsync(statement,
162+
await using var result = await _simpleFixture.TestScope.ExecuteQueryAsync(statement,
163163
new QueryOptions() { Timeout = TimeSpan.FromSeconds(10), AsStreaming = true });
164164

165165
var count = 0;
@@ -177,7 +177,7 @@ public async Task Test_Blocking_Query_Scope()
177177
{
178178
var statement = "select i from array_range(1, 10) as i;";
179179

180-
var result = await _simpleFixture.TestScope.ExecuteQueryAsync(statement,
180+
await using var result = await _simpleFixture.TestScope.ExecuteQueryAsync(statement,
181181
new QueryOptions() { Timeout = TimeSpan.FromSeconds(10), AsStreaming = false });
182182

183183
var count = 0;

0 commit comments

Comments
 (0)