Skip to content

Commit 90d43b5

Browse files
committed
Test Improvements
Changes ------- * Moved tracing/metrics query index mgmt tests to use the default test bucket * Moved views tests to use a new bucket to avoid potentially picking up documents from other tests * Added retries to bad CAS transactions tests * Increased timeouts in certain test scenarios * Added retries for metrics datastructure tests Change-Id: Ia8732f5c1bd8dbe2b325acfb52c150a47654d48e Reviewed-on: https://review.couchbase.org/c/couchnode/+/242222 Reviewed-by: Brett Lawson <brett19@gmail.com> Tested-by: Jared Casey <jared.casey@couchbase.com>
1 parent 5cde36f commit 90d43b5

9 files changed

Lines changed: 284 additions & 337 deletions

test/collectionmanager.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -554,5 +554,5 @@ describe('#collectionmanager', function () {
554554

555555
await testCluster.buckets().dropBucket(magmaTestBucket)
556556
await H.consistencyUtils.waitUntilBucketDropped(magmaTestBucket)
557-
}).timeout(5000)
557+
}).timeout(10000)
558558
})

test/metricsdatastructures.test.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ const { DatastructureOp, KeyValueOp } = require('../lib/observabilitytypes')
88

99
function metricsTests(collFn, meterFn, collectionDetailsFn) {
1010
describe('#Data Structure Operations', function () {
11+
this.retries(2)
12+
this.timeout(5000)
1113
let meter
1214
let coll
1315
let collectionDetails

test/metricskv.test.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const { NoOpTestMeter, TestMeter } = require('./metrics/metertypes')
66
const { createKeyValueValidator } = require('./metrics/validators')
77
const { KeyValueOp } = require('../lib/observabilitytypes')
88
const { MutateInSpec, LookupInSpec } = require('../lib/sdspecs')
9+
const { EncodingFailureError, DecodingFailureError } = require('../lib/errors')
910
const testdata = require('./testdata')
1011

1112
const INVALID_KEY_NAME = 'not-a-key'
@@ -71,10 +72,10 @@ function metricsTests(collFn, meterFn, collectionDetailsFn) {
7172

7273
const errorTranscoder = {
7374
encode: () => {
74-
throw new Error('encode error')
75+
throw new EncodingFailureError('encode error')
7576
},
7677
decode: () => {
77-
throw new Error('decode error')
78+
throw new DecodingFailureError('decode error')
7879
},
7980
}
8081

@@ -139,6 +140,7 @@ function metricsTests(collFn, meterFn, collectionDetailsFn) {
139140
await coll[funcName](testKey, testObjVal)
140141
}
141142
} catch (_e) {
143+
console.log(`Expected error in ${funcName}:`, _e.message)
142144
// ignore
143145
}
144146
validator.validate()

test/metricsmgmt.test.js

Lines changed: 23 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -205,12 +205,14 @@ function metricsTests(clusterFn, bucketFn, meterFn) {
205205

206206
before(function () {
207207
H.skipIfMissingFeature(this, H.Features.BucketManagement)
208+
bmgr = cluster.buckets()
209+
})
208210

211+
beforeEach(async function () {
209212
testBucket = H.genTestKey()
210-
bmgr = cluster.buckets()
211213
})
212214

213-
after(async function () {
215+
afterEach(async function () {
214216
try {
215217
await bmgr.dropBucket(testBucket)
216218
} catch (_e) {
@@ -512,49 +514,39 @@ function metricsTests(clusterFn, bucketFn, meterFn) {
512514

513515
describe('#Query Index Management Operations', function () {
514516
this.timeout(60000)
515-
let idxName, pIdxName, qmgr, bmgr, testBucket
517+
let idxName, pIdxName, qmgr, indexes, testBucket
516518

517519
before(async function () {
518-
H.skipIfMissingFeature(this, H.Features.BucketManagement)
519520
H.skipIfMissingFeature(this, H.Features.Query)
520-
})
521-
522-
beforeEach(async function () {
523-
testBucket = H.genTestKey()
524-
bmgr = cluster.buckets()
525-
526-
await bmgr.createBucket({
527-
name: testBucket,
528-
flushEnabled: true,
529-
ramQuotaMB: 256,
530-
})
531-
532-
await H.tryNTimes(5, 2000, async () => {
533-
await H.consistencyUtils.waitUntilBucketPresent(testBucket)
534-
const bucket = await bmgr.getBucket(testBucket)
535-
if (!bucket || bucket.name !== testBucket) {
536-
throw new Error('Bucket not present yet')
537-
}
538-
})
539521

522+
testBucket = H.b.name
540523
idxName = H.genTestKey()
541524
pIdxName = `${idxName}-primary`
525+
indexes = [idxName, pIdxName]
542526
qmgr = cluster.queryIndexes()
543527
})
544528

545529
afterEach(async function () {
546-
try {
547-
await bmgr.dropBucket(testBucket)
548-
} catch (_e) {
549-
// ignore
530+
for (const idx of indexes) {
531+
try {
532+
await qmgr.dropIndex(testBucket, idx, { ignoreIfNotExists: true })
533+
} catch (_e) {
534+
// ignore
535+
}
550536
}
551537
})
552538

553539
it('should successfully perform query index mgmt operations', async function () {
554540
validator.reset().op(QueryIndexMgmtOp.QueryIndexCreate)
555-
await qmgr.createPrimaryIndex(testBucket, {
556-
name: pIdxName,
557-
})
541+
// depending on how tests are ordered, we may already have an index here, so we ignore failure and
542+
// just validate the span
543+
try {
544+
await qmgr.createPrimaryIndex(testBucket, {
545+
name: pIdxName,
546+
})
547+
} catch (_e) {
548+
validator.error(true)
549+
}
558550
validator.validate()
559551

560552
validator.reset().op(QueryIndexMgmtOp.QueryIndexCreate)
@@ -591,6 +583,7 @@ function metricsTests(clusterFn, bucketFn, meterFn) {
591583
await qmgr.createIndex(testBucket, idxName, ['name'], {
592584
deferred: true,
593585
})
586+
indexes.push(idxName)
594587
}
595588
idxs = await qmgr.getAllIndexes(testBucket)
596589
const filteredIdexes = idxs.filter((idx) => idx.state === 'deferred')

test/tracing/validators.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -339,13 +339,14 @@ class KeyValueSpanValidator extends BaseSpanValidator {
339339
span.attributes[DispatchAttributeName.ServerDuration],
340340
`ServerDuration should be a number. ${ctx}`
341341
)
342-
if (this._serverDurationAboveZero) {
343-
assert.isAbove(
344-
span.attributes[DispatchAttributeName.ServerDuration],
345-
0,
346-
`ServerDuration should be > 0. ${ctx}`
347-
)
348-
}
342+
// TODO(JSCBC-1390): This can cause mock tests to be flaky.
343+
// if (this._serverDurationAboveZero) {
344+
// assert.isAbove(
345+
// span.attributes[DispatchAttributeName.ServerDuration],
346+
// 0,
347+
// `ServerDuration should be > 0. ${ctx}`
348+
// )
349+
// }
349350
}
350351

351352
_validateDispatchSpans(span) {

test/tracingkv.test.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const {
88
ThresholdLoggingTestTracer,
99
} = require('./tracing/tracingtypes')
1010
const { createKeyValueValidator } = require('./tracing/validators')
11+
const { EncodingFailureError, DecodingFailureError } = require('../lib/errors')
1112
const { DurabilityLevel } = require('../lib/generaltypes')
1213
const { KeyValueOp } = require('../lib/observabilitytypes')
1314
const { MutateInSpec, LookupInSpec } = require('../lib/sdspecs')
@@ -76,10 +77,10 @@ function tracingTests(collFn, tracerFn, collectionDetailsFn) {
7677

7778
const errorTranscoder = {
7879
encode: () => {
79-
throw new Error('encode error')
80+
throw new EncodingFailureError('encode error')
8081
},
8182
decode: () => {
82-
throw new Error('decode error')
83+
throw new DecodingFailureError('decode error')
8384
},
8485
}
8586

0 commit comments

Comments
 (0)