I’m experiencing strange issue .QueryAsync()
when running xUnit unit (integration) tests in Visual Studio, it gives unpredictable results. When I run all 10 tests, some of them randomly fail, because .QueryAsync comes back with empty results, despite the fact that documents are in the database.
More detailed information:
Enterprise Edition 6.0.1 build 2037 ‧ IPv4.
CouchbaseNetClient 2.7.16
Couchbase.Extensions.DependencyInjection 2.0.2
I have 10 xUnit tests that I run from Visual Studio for ASP.NET CORE Web API application. Each tests inserts the test documents into Couchbase (Each document inserted into database has unique ID. Documents have schema, but values are randomly generated.), followed by the call to the controller.
Controller is D. Injected with Singleton Service class
public RegistrationDataServices(CouchbaseConfig couchBaseConfig, IBucketProvider bucketProvider, EnrollmentStatus enrollmentStatus)
RegistrationDataServices
class has number of methods that each create is own bucket var bucket = bucketProvider.GetBucket("BucketName" );
(bucketProvider
is Dependency Injected into RegistrationDataServices
through .AddCouchbase(Configuration.GetSection("Couchbase"));
) followed by forming full text search:
secondFTSResult = await bucket.QueryAsync(new SearchQuery
{
Index = dbConfig.FTS_Index,
Query = new BooleanQuery().Must(ftsMustField.ToArray()).Should(ftsShouldFields.ToArray()).ShouldMin(0),
SearchParams = new SearchParams()
.Explain(dbConfig.ExplainResults)
.Highlighting(HighLightStyle.Ansi)
//.WithConsistency(Couchbase.N1QL.ScanConsistency.RequestPlus)
});
After that I retrieve document by their IDs and serialize them into class:
var ftsAdrResult =
(await bucket.GetDocumentsAsync(secondFTSResult.Select(x => x.Id)))
.Select(x => JsonConvert.DeserializeObject(x.Content)).ToList();
At the end of each unit test documents are removed from the database.
If I ran all 10 tests, sometimes they all pass, but often some of them will randomly fail - no data is returned from the database. However, if I reran failed tests individually, they work fine.
They only thing I could think of, is that dB doesn’t have enough time to index the data before querying, so I have placed await Task.Delay(TimeSpan.FromSeconds(25));
to make sure documents are index. That doesn’t fix the issue.
Or there is some kind of synchronization issues ?
RegistrationDataServices
methods don’t share any information with each other, apart from IBucketProvider bucketProvider
Thank you !