Skip to content

Commit 0940226

Browse files
committed
Test Improvements
Changes ------- * Update metrics and tracing streaming mgmt tests to skip scope-level queries if server does not support collections * Update query index mgmt metrics and tracing tests to handle scenario where primary index might already exist (due to previous tests and/or previous test setup) * Update view tests to use a new bucket so query results are not potentially impacted by previous tests Change-Id: If9043ba29c7db2e30088c07eb40ca0e4be29a1d9 Reviewed-on: https://review.couchbase.org/c/couchbase-python-client/+/242481 Reviewed-by: Brett Lawson <brett19@gmail.com> Tested-by: Build Bot <build@couchbase.com>
1 parent 64a401a commit 0940226

13 files changed

Lines changed: 243 additions & 141 deletions

File tree

acouchbase/tests/metrics_tests/management_t.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ async def test_query_index_mgmt(self, acb_env: AsyncManagementMetricsEnvironment
326326
try:
327327
await acb_env.qixm.create_primary_index(acb_env.bucket.name, deferred=True)
328328
except Exception:
329-
pass
329+
validator.reset(op_name=OpName.QueryIndexCreate, validate_error=True, do_not_clear_meter=True)
330330
validator.validate_http_op()
331331

332332
validator.reset(op_name=OpName.QueryIndexGetAll)
@@ -507,7 +507,7 @@ async def test_user_mgmt(self, acb_env: AsyncManagementMetricsEnvironment) -> No
507507
@pytest.mark.asyncio
508508
async def test_view_index_mgmt(self, acb_env: AsyncManagementMetricsEnvironment) -> None:
509509
validator = acb_env.http_meter_validator
510-
validator.reset(op_name=OpName.ViewIndexGetAll)
510+
validator.reset(op_name=OpName.ViewIndexGetAll, bucket_name=acb_env.bucket.name)
511511
await acb_env.vixm.get_all_design_documents(DesignDocumentNamespace.PRODUCTION)
512512
validator.validate_http_op()
513513

acouchbase/tests/metrics_tests/streaming_t.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,10 @@ async def test_http_analytics_query_op(self, acb_env: AsyncMetricsEnvironment) -
8989
pass
9090
validator.validate_http_op()
9191

92-
if acb_env.server_version_short <= 6.6:
93-
return # scope-level query support added in server 7.0, so skip rest of test if not supported
92+
if not EnvironmentFeatures.is_feature_supported('collections',
93+
acb_env.server_version_short,
94+
acb_env.mock_server_type):
95+
return # skip rest of test if collections not supported
9496

9597
# dunno why we have this on analytics_query...buuuut we do...
9698
validator.reset(op_name=OpName.AnalyticsQuery,
@@ -128,8 +130,10 @@ async def test_http_query_op(self, acb_env: AsyncMetricsEnvironment) -> None:
128130
pass
129131
validator.validate_http_op()
130132

131-
if acb_env.server_version_short <= 6.6:
132-
return # scope-level query support added in server 7.0, so skip rest of test if not supported
133+
if not EnvironmentFeatures.is_feature_supported('collections',
134+
acb_env.server_version_short,
135+
acb_env.mock_server_type):
136+
return # skip rest of test if collections not supported
133137

134138
validator.reset(op_name=OpName.Query,
135139
bucket_name=acb_env.bucket.name,
@@ -173,8 +177,10 @@ async def test_http_search_query_op(self, acb_env: AsyncMetricsEnvironment) -> N
173177
pass
174178
validator.validate_http_op()
175179

176-
if acb_env.server_version_short <= 6.6:
177-
return # scope-level query support added in server 7.0, so skip rest of test if not supported
180+
if not EnvironmentFeatures.is_feature_supported('collections',
181+
acb_env.server_version_short,
182+
acb_env.mock_server_type):
183+
return # skip rest of test if collections not supported
178184

179185
# TODO(PYCBC-1753): The bucket and scope name are not passed when doing scope-level search queries.
180186
# This means we cannot validate the span attributes have db.namespace and couchbase.scope.name

acouchbase/tests/tracing_tests/management_t.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -602,7 +602,7 @@ async def test_query_index_mgmt(self, acb_env: AsyncManagementTracingEnvironment
602602
try:
603603
await acb_env.qixm.create_primary_index(acb_env.bucket.name, deferred=True)
604604
except Exception:
605-
pass
605+
validator.reset(op_name=OpName.QueryIndexCreate, do_not_clear_spans=True, validate_error=True)
606606
validator.validate_http_op()
607607

608608
validator.reset(op_name=OpName.QueryIndexGetAll)
@@ -712,7 +712,7 @@ async def test_query_index_mgmt_with_parent(self, acb_env: AsyncManagementTracin
712712
try:
713713
await acb_env.qixm.create_primary_index(acb_env.bucket.name, deferred=True, parent_span=parent_span)
714714
except Exception:
715-
pass
715+
validator.reset(op_name=op_name, do_not_clear_spans=True, parent_span=parent_span, validate_error=True)
716716
validator.validate_http_op(end_parent=True)
717717

718718
op_name = OpName.QueryIndexGetAll

acouchbase/tests/tracing_tests/streaming_t.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,9 @@ async def test_http_analytics_query_op(self, acb_env: AsyncBaseTracingEnvironmen
103103
pass
104104
validator.validate_http_op()
105105

106-
if EnvironmentFeatures.is_feature_supported('collections',
107-
acb_env.server_version_short,
108-
acb_env.mock_server_type):
106+
if not EnvironmentFeatures.is_feature_supported('collections',
107+
acb_env.server_version_short,
108+
acb_env.mock_server_type):
109109
return # skip rest of test if collections not supported
110110

111111
# dunno why we have this on analytics_query...buuuut we do...
@@ -169,9 +169,9 @@ async def test_http_query_op(self, acb_env: AsyncBaseTracingEnvironment) -> None
169169
pass
170170
validator.validate_http_op()
171171

172-
if EnvironmentFeatures.is_feature_supported('collections',
173-
acb_env.server_version_short,
174-
acb_env.mock_server_type):
172+
if not EnvironmentFeatures.is_feature_supported('collections',
173+
acb_env.server_version_short,
174+
acb_env.mock_server_type):
175175
return # skip rest of test if collections not supported
176176

177177
validator = acb_env.http_span_validator
@@ -247,9 +247,9 @@ async def test_http_search_query_op(self, acb_env: AsyncBaseTracingEnvironment)
247247
pass
248248
validator.validate_http_op(end_parent=True)
249249

250-
if EnvironmentFeatures.is_feature_supported('collections',
251-
acb_env.server_version_short,
252-
acb_env.mock_server_type):
250+
if not EnvironmentFeatures.is_feature_supported('collections',
251+
acb_env.server_version_short,
252+
acb_env.mock_server_type):
253253
return # skip rest of test if collections not supported
254254

255255
# TODO(PYCBC-1753): The bucket and scope name are not passed when doing scope-level search queries.

acouchbase/tests/views_t.py

Lines changed: 45 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -44,21 +44,21 @@ class ViewsTestSuite:
4444

4545
@pytest.mark.asyncio
4646
async def test_bad_view_query(self, cb_env):
47-
view_result = cb_env.bucket.view_query('fake-ddoc',
48-
'fake-view',
49-
limit=10,
50-
namespace=DesignDocumentNamespace.DEVELOPMENT)
47+
view_result = cb_env.view_bucket.view_query('fake-ddoc',
48+
'fake-view',
49+
limit=10,
50+
namespace=DesignDocumentNamespace.DEVELOPMENT)
5151

5252
with pytest.raises(DesignDocumentNotFoundException):
5353
[r async for r in view_result]
5454

5555
@pytest.mark.asyncio
5656
async def test_view_query(self, cb_env):
5757
expected_count = 10
58-
view_result = cb_env.bucket.view_query(cb_env.DOCNAME,
59-
cb_env.TEST_VIEW_NAME,
60-
full_set=True,
61-
namespace=DesignDocumentNamespace.DEVELOPMENT)
58+
view_result = cb_env.view_bucket.view_query(cb_env.DOCNAME,
59+
cb_env.TEST_VIEW_NAME,
60+
full_set=True,
61+
namespace=DesignDocumentNamespace.DEVELOPMENT)
6262

6363
await cb_env.assert_rows(view_result, expected_count)
6464

@@ -69,11 +69,11 @@ async def test_view_query(self, cb_env):
6969
@pytest.mark.asyncio
7070
async def test_view_query_ascending(self, cb_env):
7171
expected_count = 5
72-
view_result = cb_env.bucket.view_query(cb_env.DOCNAME,
73-
cb_env.TEST_VIEW_NAME,
74-
limit=expected_count,
75-
namespace=DesignDocumentNamespace.DEVELOPMENT,
76-
order=ViewOrdering.ASCENDING)
72+
view_result = cb_env.view_bucket.view_query(cb_env.DOCNAME,
73+
cb_env.TEST_VIEW_NAME,
74+
limit=expected_count,
75+
namespace=DesignDocumentNamespace.DEVELOPMENT,
76+
order=ViewOrdering.ASCENDING)
7777

7878
rows = await cb_env.assert_rows(view_result, expected_count, return_rows=True)
7979
row_ids = list(map(lambda r: r.id, rows))
@@ -87,11 +87,11 @@ async def test_view_query_ascending(self, cb_env):
8787
@pytest.mark.asyncio
8888
async def test_view_query_descending(self, cb_env):
8989
expected_count = 5
90-
view_result = cb_env.bucket.view_query(cb_env.DOCNAME,
91-
cb_env.TEST_VIEW_NAME,
92-
limit=expected_count,
93-
namespace=DesignDocumentNamespace.DEVELOPMENT,
94-
order=ViewOrdering.DESCENDING)
90+
view_result = cb_env.view_bucket.view_query(cb_env.DOCNAME,
91+
cb_env.TEST_VIEW_NAME,
92+
limit=expected_count,
93+
namespace=DesignDocumentNamespace.DEVELOPMENT,
94+
order=ViewOrdering.DESCENDING)
9595

9696
rows = await cb_env.assert_rows(view_result, expected_count, return_rows=True)
9797
row_ids = list(map(lambda r: r.id, rows))
@@ -116,9 +116,9 @@ async def test_view_query_endkey_docid(self, cb_env):
116116
opts = ViewOptions(namespace=DesignDocumentNamespace.DEVELOPMENT,
117117
endkey=key,
118118
endkey_docid=endkey_docid)
119-
view_result = cb_env.bucket.view_query(cb_env.DOCNAME,
120-
cb_env.TEST_VIEW_NAME,
121-
opts)
119+
view_result = cb_env.view_bucket.view_query(cb_env.DOCNAME,
120+
cb_env.TEST_VIEW_NAME,
121+
opts)
122122
# all docs w/in first key (10 docs) + half of docs w/in next key (5 docs)
123123
expected_count = 15
124124
rows = await cb_env.assert_rows(view_result, expected_count, True)
@@ -139,9 +139,9 @@ async def test_view_query_key(self, cb_env):
139139
docids = cb_env.get_docids_by_key(key)
140140
opts = ViewOptions(namespace=DesignDocumentNamespace.DEVELOPMENT,
141141
key=key)
142-
view_result = cb_env.bucket.view_query(cb_env.DOCNAME,
143-
cb_env.TEST_VIEW_NAME,
144-
opts)
142+
view_result = cb_env.view_bucket.view_query(cb_env.DOCNAME,
143+
cb_env.TEST_VIEW_NAME,
144+
opts)
145145

146146
rows = await cb_env.assert_rows(view_result, expected_count, True)
147147
for row in rows:
@@ -162,9 +162,9 @@ async def test_view_query_keys(self, cb_env):
162162
expected_count = 20
163163
opts = ViewOptions(namespace=DesignDocumentNamespace.DEVELOPMENT,
164164
keys=keys[:2])
165-
view_result = cb_env.bucket.view_query(cb_env.DOCNAME,
166-
cb_env.TEST_VIEW_NAME,
167-
opts)
165+
view_result = cb_env.view_bucket.view_query(cb_env.DOCNAME,
166+
cb_env.TEST_VIEW_NAME,
167+
opts)
168168

169169
rows = await cb_env.assert_rows(view_result, expected_count, True)
170170
assert all(map(lambda r: r.key in keys, rows)) is True
@@ -187,9 +187,9 @@ async def test_view_query_raw(self, cb_env):
187187
# execute a query so we can have pagination
188188
opts = ViewOptions(limit=5,
189189
namespace=DesignDocumentNamespace.DEVELOPMENT)
190-
view_result = cb_env.bucket.view_query(cb_env.DOCNAME,
191-
cb_env.TEST_VIEW_NAME,
192-
opts)
190+
view_result = cb_env.view_bucket.view_query(cb_env.DOCNAME,
191+
cb_env.TEST_VIEW_NAME,
192+
opts)
193193
# need to iterate over the result to execute the query
194194
[r async for r in view_result]
195195
raw = {
@@ -199,9 +199,9 @@ async def test_view_query_raw(self, cb_env):
199199
'full_set': 'true'
200200
}
201201
opts = ViewOptions(namespace=DesignDocumentNamespace.DEVELOPMENT, raw=raw)
202-
view_result = cb_env.bucket.view_query(cb_env.DOCNAME,
203-
cb_env.TEST_VIEW_NAME,
204-
opts)
202+
view_result = cb_env.view_bucket.view_query(cb_env.DOCNAME,
203+
cb_env.TEST_VIEW_NAME,
204+
opts)
205205
# expect only a single record to be returned
206206
expected_count = 1
207207
rows = await cb_env.assert_rows(view_result, expected_count, True)
@@ -221,9 +221,9 @@ async def test_view_query_raw_fail(self, cb_env):
221221
'startkey_docid': 'fake-doc-id'
222222
}
223223
opts = ViewOptions(namespace=DesignDocumentNamespace.DEVELOPMENT, raw=raw)
224-
view_result = cb_env.bucket.view_query(cb_env.DOCNAME,
225-
cb_env.TEST_VIEW_NAME,
226-
opts)
224+
view_result = cb_env.view_bucket.view_query(cb_env.DOCNAME,
225+
cb_env.TEST_VIEW_NAME,
226+
opts)
227227
with pytest.raises(InvalidArgumentException):
228228
[r async for r in view_result]
229229

@@ -241,18 +241,18 @@ async def test_view_query_startkey_docid(self, cb_env):
241241
# execute a query so we can have pagination
242242
opts = ViewOptions(limit=5,
243243
namespace=DesignDocumentNamespace.DEVELOPMENT)
244-
view_result = cb_env.bucket.view_query(cb_env.DOCNAME,
245-
cb_env.TEST_VIEW_NAME,
246-
opts)
244+
view_result = cb_env.view_bucket.view_query(cb_env.DOCNAME,
245+
cb_env.TEST_VIEW_NAME,
246+
opts)
247247
# need to iterate over the result to execute the query
248248
[r async for r in view_result]
249249
opts = ViewOptions(limit=5,
250250
namespace=DesignDocumentNamespace.DEVELOPMENT,
251251
startkey=key,
252252
startkey_docid=startkey_docid)
253-
view_result = cb_env.bucket.view_query(cb_env.DOCNAME,
254-
cb_env.TEST_VIEW_NAME,
255-
opts)
253+
view_result = cb_env.view_bucket.view_query(cb_env.DOCNAME,
254+
cb_env.TEST_VIEW_NAME,
255+
opts)
256256
# expect only a single record to be returned
257257
expected_count = 1
258258
rows = await cb_env.assert_rows(view_result, expected_count, True)
@@ -280,7 +280,9 @@ async def couchbase_test_environment(self, acb_base_env, test_manifest_validated
280280
pytest.fail(f'Test manifest not validated. Missing tests: {test_manifest_validated}.')
281281

282282
acb_env = AsyncViewsTestEnvironment.from_environment(acb_base_env)
283-
acb_env.enable_views_mgmt()
283+
acb_env.enable_bucket_mgmt()
284+
await acb_env.setup_view_bucket()
285+
acb_env.enable_views_mgmt(acb_env.view_bucket)
284286
await acb_env.setup(request.param)
285287
yield acb_env
286288
await acb_env.teardown(request.param)

couchbase/tests/metrics_tests/management_t.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ def test_query_index_mgmt(self, cb_env: ManagementMetricsEnvironment) -> None:
320320
try:
321321
cb_env.qixm.create_primary_index(cb_env.bucket.name, deferred=True)
322322
except Exception:
323-
pass
323+
validator.reset(op_name=OpName.QueryIndexCreate, validate_error=True, do_not_clear_meter=True)
324324
validator.validate_http_op()
325325

326326
validator.reset(op_name=OpName.QueryIndexGetAll)
@@ -492,7 +492,7 @@ def test_user_mgmt(self, cb_env: ManagementMetricsEnvironment) -> None:
492492
@pytest.mark.usefixtures('enable_views_mgmt')
493493
def test_view_index_mgmt(self, cb_env: ManagementMetricsEnvironment) -> None:
494494
validator = cb_env.http_meter_validator
495-
validator.reset(op_name=OpName.ViewIndexGetAll)
495+
validator.reset(op_name=OpName.ViewIndexGetAll, bucket_name=cb_env.bucket.name)
496496
cb_env.vixm.get_all_design_documents(DesignDocumentNamespace.PRODUCTION)
497497
validator.validate_http_op()
498498

couchbase/tests/metrics_tests/streaming_t.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,10 @@ def test_http_analytics_query_op(self, cb_env: MetricsEnvironment) -> None:
8787
pass
8888
validator.validate_http_op()
8989

90-
if cb_env.server_version_short <= 6.6:
91-
return # scope-level query support added in server 7.0, so skip rest of test if not supported
90+
if not EnvironmentFeatures.is_feature_supported('collections',
91+
cb_env.server_version_short,
92+
cb_env.mock_server_type):
93+
return # skip rest of test if collections not supported
9294

9395
# dunno why we have this on analytics_query...buuuut we do...
9496
validator.reset(op_name=OpName.AnalyticsQuery,
@@ -125,8 +127,10 @@ def test_http_query_op(self, cb_env: MetricsEnvironment) -> None:
125127
pass
126128
validator.validate_http_op()
127129

128-
if cb_env.server_version_short <= 6.6:
129-
return # scope-level query support added in server 7.0, so skip rest of test if not supported
130+
if not EnvironmentFeatures.is_feature_supported('collections',
131+
cb_env.server_version_short,
132+
cb_env.mock_server_type):
133+
return # skip rest of test if collections not supported
130134

131135
validator.reset(op_name=OpName.Query,
132136
bucket_name=cb_env.bucket.name,
@@ -169,8 +173,10 @@ def test_http_search_query_op(self, cb_env: MetricsEnvironment) -> None:
169173
pass
170174
validator.validate_http_op()
171175

172-
if cb_env.server_version_short <= 6.6:
173-
return # scope-level query support added in server 7.0, so skip rest of test if not supported
176+
if not EnvironmentFeatures.is_feature_supported('collections',
177+
cb_env.server_version_short,
178+
cb_env.mock_server_type):
179+
return # skip rest of test if collections not supported
174180

175181
# TODO(PYCBC-1753): The bucket and scope name are not passed when doing scope-level search queries.
176182
# This means we cannot validate the span attributes have db.namespace and couchbase.scope.name

0 commit comments

Comments
 (0)