Skip to content

Commit 9ad0ff3

Browse files
authored
UT[bmqt::Uri]: fix default allocations (#802)
1 parent e5a454c commit 9ad0ff3

File tree

1 file changed

+47
-64
lines changed

1 file changed

+47
-64
lines changed

src/groups/bmq/bmqt/bmqt_uri.t.cpp

Lines changed: 47 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -37,40 +37,6 @@
3737
using namespace BloombergLP;
3838
using namespace bsl;
3939

40-
// ============================================================================
41-
// TEST HELPERS UTILITY
42-
// ----------------------------------------------------------------------------
43-
namespace {
44-
45-
/// Thread function: wait on the specified `barrier` and then generate the
46-
/// specified `numGUIDs` (in a tight loop) and store them in the specified
47-
/// `out`.
48-
static void threadFunction(int threadId,
49-
bsl::vector<bsl::pair<bmqt::Uri, int> >* out,
50-
bslmt::Barrier* barrier,
51-
int numIterations)
52-
{
53-
out->reserve(numIterations);
54-
barrier->wait();
55-
56-
for (int i = 0; i < numIterations; ++i) {
57-
bmqu::MemOutStream osstrDomain(bmqtst::TestHelperUtil::allocator());
58-
bmqu::MemOutStream osstrQueue(bmqtst::TestHelperUtil::allocator());
59-
osstrDomain << "my.domain." << threadId << "." << i;
60-
osstrQueue << "queue-foo-bar-" << threadId << "-" << i;
61-
62-
bmqt::Uri qualifiedUri(bmqtst::TestHelperUtil::allocator());
63-
bmqt::UriBuilder builder(bmqtst::TestHelperUtil::allocator());
64-
builder.setDomain(osstrDomain.str());
65-
builder.setQueue(osstrQueue.str());
66-
67-
int rc = builder.uri(&qualifiedUri);
68-
out->push_back(bsl::make_pair(qualifiedUri, rc));
69-
}
70-
}
71-
72-
} // close unnamed namespace
73-
7440
// ============================================================================
7541
// TESTS
7642
// ----------------------------------------------------------------------------
@@ -452,36 +418,60 @@ static void test2_URIBuilder()
452418
/// from multiple threads.
453419
static void test3_URIBuilderMultiThreaded()
454420
{
455-
bmqtst::TestHelperUtil::ignoreCheckGblAlloc() = true;
456-
bmqtst::TestHelperUtil::ignoreCheckDefAlloc() = true;
457-
// Can't ensure no global memory is allocated because
458-
// 'bslmt::ThreadUtil::create()' uses the global allocator to allocate
459-
// memory.
460-
461421
bmqtst::TestHelper::printTestName("MULTI-THREADED URI BUILDER TEST");
462422

463423
bmqt::UriParser::initialize(bmqtst::TestHelperUtil::allocator());
464424

465-
const int k_NUM_THREADS = 6;
466-
const int k_NUM_ITERATIONS = 10000;
467-
bslmt::ThreadGroup threadGroup(bmqtst::TestHelperUtil::allocator());
425+
const size_t k_NUM_THREADS = 6;
426+
const size_t k_NUM_ITERATIONS = 10000;
427+
428+
struct Local {
429+
static void threadFunction(size_t threadId,
430+
bsl::vector<bmqt::Uri>* out,
431+
bslmt::Barrier* barrier)
432+
{
433+
out->reserve(k_NUM_ITERATIONS);
434+
barrier->wait();
435+
436+
for (size_t i = 0; i < k_NUM_ITERATIONS; ++i) {
437+
bmqu::MemOutStream osstrDomain(
438+
bmqtst::TestHelperUtil::allocator());
439+
bmqu::MemOutStream osstrQueue(
440+
bmqtst::TestHelperUtil::allocator());
441+
osstrDomain << "my.domain." << threadId << "." << i;
442+
osstrQueue << "queue-foo-bar-" << threadId << "-" << i;
443+
444+
bmqt::Uri qualifiedUri(bmqtst::TestHelperUtil::allocator());
445+
bmqt::UriBuilder builder(bmqtst::TestHelperUtil::allocator());
446+
builder.setDomain(osstrDomain.str());
447+
builder.setQueue(osstrQueue.str());
448+
449+
const int rc = builder.uri(&qualifiedUri);
450+
BMQTST_ASSERT_EQ_D("Failed to build bmqt::Uri, i="
451+
<< i << ", rc=" << rc,
452+
rc,
453+
0);
454+
out->emplace_back(bslmf::MovableRefUtil::move(qualifiedUri));
455+
}
456+
}
457+
};
468458

469459
// Barrier to get each thread to start at the same time; `+1` for this
470460
// (main) thread.
471461
bslmt::Barrier barrier(k_NUM_THREADS + 1);
472462

473-
typedef bsl::pair<bmqt::Uri, int> Result;
474-
475-
bsl::vector<bsl::vector<Result> > threadsData(
463+
bsl::vector<bsl::vector<bmqt::Uri> > threadsData(
476464
bmqtst::TestHelperUtil::allocator());
477465
threadsData.resize(k_NUM_THREADS);
478466

479-
for (int i = 0; i < k_NUM_THREADS; ++i) {
480-
int rc = threadGroup.addThread(bdlf::BindUtil::bind(&threadFunction,
481-
i,
482-
&threadsData[i],
483-
&barrier,
484-
k_NUM_ITERATIONS));
467+
bslmt::ThreadGroup threadGroup(bmqtst::TestHelperUtil::allocator());
468+
for (size_t i = 0; i < k_NUM_THREADS; ++i) {
469+
const int rc = threadGroup.addThread(
470+
bdlf::BindUtil::bindS(bmqtst::TestHelperUtil::allocator(),
471+
&Local::threadFunction,
472+
i,
473+
&threadsData[i],
474+
&barrier));
485475
BMQTST_ASSERT_EQ_D(i, rc, 0);
486476
}
487477

@@ -490,27 +480,20 @@ static void test3_URIBuilderMultiThreaded()
490480

491481
// Validate for each thread.
492482

493-
for (int i = 0; i < k_NUM_THREADS; ++i) {
494-
const bsl::vector<Result>& threadResults = threadsData[i];
495-
496-
BSLS_ASSERT_OPT(threadResults.size() ==
497-
static_cast<size_t>(k_NUM_ITERATIONS));
483+
for (size_t i = 0; i < k_NUM_THREADS; ++i) {
484+
const bsl::vector<bmqt::Uri>& uris = threadsData[i];
498485

499-
for (int j = 0; j < k_NUM_ITERATIONS; ++j) {
500-
BMQTST_ASSERT_EQ_D(i << ", " << j,
501-
threadResults[j].second,
502-
0); // builder rc
486+
BMQTST_ASSERT_EQ(uris.size(), k_NUM_ITERATIONS);
503487

488+
for (size_t j = 0; j < k_NUM_ITERATIONS; ++j) {
504489
bmqu::MemOutStream expectedUriStr(
505490
bmqtst::TestHelperUtil::allocator());
506491
expectedUriStr << "bmq://my.domain." << i << "." << j
507492
<< "/queue-foo-bar-" << i << "-" << j;
508493
bmqt::Uri expectedUri(expectedUriStr.str(),
509494
bmqtst::TestHelperUtil::allocator());
510495

511-
BMQTST_ASSERT_EQ_D(i << ", " << j,
512-
threadResults[j].first,
513-
expectedUri);
496+
BMQTST_ASSERT_EQ_D(i << ", " << j, uris[j], expectedUri);
514497
}
515498
}
516499

0 commit comments

Comments
 (0)