diff options
author | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
commit | 72231250ed81e10d66bfe70701e64fa5fe50f712 (patch) | |
tree | 2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /searchcore/src/tests/proton/metrics |
Publish
Diffstat (limited to 'searchcore/src/tests/proton/metrics')
20 files changed, 428 insertions, 0 deletions
diff --git a/searchcore/src/tests/proton/metrics/documentdb_job_trackers/.gitignore b/searchcore/src/tests/proton/metrics/documentdb_job_trackers/.gitignore new file mode 100644 index 00000000000..84c97c63aca --- /dev/null +++ b/searchcore/src/tests/proton/metrics/documentdb_job_trackers/.gitignore @@ -0,0 +1 @@ +searchcore_documentdb_job_trackers_test_app diff --git a/searchcore/src/tests/proton/metrics/documentdb_job_trackers/CMakeLists.txt b/searchcore/src/tests/proton/metrics/documentdb_job_trackers/CMakeLists.txt new file mode 100644 index 00000000000..bf77c583468 --- /dev/null +++ b/searchcore/src/tests/proton/metrics/documentdb_job_trackers/CMakeLists.txt @@ -0,0 +1,8 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(searchcore_documentdb_job_trackers_test_app + SOURCES + documentdb_job_trackers_test.cpp + DEPENDS + searchcore_proton_metrics +) +vespa_add_test(NAME searchcore_documentdb_job_trackers_test_app COMMAND searchcore_documentdb_job_trackers_test_app) diff --git a/searchcore/src/tests/proton/metrics/documentdb_job_trackers/DESC b/searchcore/src/tests/proton/metrics/documentdb_job_trackers/DESC new file mode 100644 index 00000000000..ccd322886ea --- /dev/null +++ b/searchcore/src/tests/proton/metrics/documentdb_job_trackers/DESC @@ -0,0 +1 @@ +documentdb job trackers test. Take a look at documentdb_job_trackers_test.cpp for details. diff --git a/searchcore/src/tests/proton/metrics/documentdb_job_trackers/FILES b/searchcore/src/tests/proton/metrics/documentdb_job_trackers/FILES new file mode 100644 index 00000000000..a63504feca2 --- /dev/null +++ b/searchcore/src/tests/proton/metrics/documentdb_job_trackers/FILES @@ -0,0 +1 @@ +documentdb_job_trackers_test.cpp diff --git a/searchcore/src/tests/proton/metrics/documentdb_job_trackers/documentdb_job_trackers_test.cpp b/searchcore/src/tests/proton/metrics/documentdb_job_trackers/documentdb_job_trackers_test.cpp new file mode 100644 index 00000000000..3269fe84dcd --- /dev/null +++ b/searchcore/src/tests/proton/metrics/documentdb_job_trackers/documentdb_job_trackers_test.cpp @@ -0,0 +1,116 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#include <vespa/fastos/fastos.h> +#include <vespa/log/log.h> +LOG_SETUP("documentdb_job_trackers_test"); + +#include <vespa/searchcore/proton/metrics/documentdb_job_trackers.h> +#include <vespa/searchcore/proton/metrics/job_tracked_flush_target.h> +#include <vespa/searchcore/proton/test/dummy_flush_target.h> +#include <vespa/vespalib/testkit/testapp.h> + +using namespace proton; +using namespace searchcorespi; + +constexpr double EPS = 0.000001; + +typedef IFlushTarget::Type FTT; +typedef IFlushTarget::Component FTC; + +struct MFT : public test::DummyFlushTarget +{ + MFT(FTT type, FTC component) : test::DummyFlushTarget("", type, component) {} +}; + +struct AttributeFlush : public MFT { AttributeFlush() : MFT(FTT::SYNC, FTC::ATTRIBUTE) {} }; +struct MemoryIndexFlush : public MFT { MemoryIndexFlush() : MFT(FTT::FLUSH, FTC::INDEX) {} }; +struct DiskIndexFusion : public MFT { DiskIndexFusion() : MFT(FTT::GC, FTC::INDEX) {} }; +struct DocStoreFlush : public MFT { DocStoreFlush() : MFT(FTT::SYNC, FTC::DOCUMENT_STORE) {} }; +struct DocStoreCompaction : public MFT { DocStoreCompaction() : MFT(FTT::GC, FTC::DOCUMENT_STORE) {} }; +struct OtherFlush : public MFT { OtherFlush() : MFT(FTT::FLUSH, FTC::OTHER) {} }; + +struct Fixture +{ + DocumentDBJobTrackers _trackers; + DocumentDBTaggedMetrics::JobMetrics _metrics; + Fixture() + : _trackers(), + _metrics(nullptr) + { + } +}; + +void +startJobs(IJobTracker &tracker, uint32_t numJobs) +{ + for (uint32_t i = 0; i < numJobs; ++i) { + tracker.start(); + } +} + +TEST_F("require that job metrics are updated", Fixture) +{ + startJobs(f._trackers.getAttributeFlush(), 1); + startJobs(f._trackers.getMemoryIndexFlush(), 2); + startJobs(f._trackers.getDiskIndexFusion(), 3); + startJobs(f._trackers.getDocumentStoreFlush(), 4); + startJobs(f._trackers.getDocumentStoreCompact(), 5); + startJobs(*f._trackers.getBucketMove(), 6); + startJobs(*f._trackers.getLidSpaceCompact(), 7); + startJobs(*f._trackers.getRemovedDocumentsPrune(), 8); + + // Update metrics 2 times to ensure that all jobs are running + // in the last interval we actually care about. + f._trackers.updateMetrics(f._metrics); + FastOS_Thread::Sleep(100); + f._trackers.updateMetrics(f._metrics); + + EXPECT_APPROX(1.0, f._metrics.attributeFlush.getLast(), EPS); + EXPECT_APPROX(2.0, f._metrics.memoryIndexFlush.getLast(), EPS); + EXPECT_APPROX(3.0, f._metrics.diskIndexFusion.getLast(), EPS); + EXPECT_APPROX(4.0, f._metrics.documentStoreFlush.getLast(), EPS); + EXPECT_APPROX(5.0, f._metrics.documentStoreCompact.getLast(), EPS); + EXPECT_APPROX(6.0, f._metrics.bucketMove.getLast(), EPS); + EXPECT_APPROX(7.0, f._metrics.lidSpaceCompact.getLast(), EPS); + EXPECT_APPROX(8.0, f._metrics.removedDocumentsPrune.getLast(), EPS); + EXPECT_APPROX(36.0, f._metrics.total.getLast(), EPS); +} + +bool +assertFlushTarget(const IJobTracker &tracker, const IFlushTarget &target) +{ + const JobTrackedFlushTarget *tracked = + dynamic_cast<const JobTrackedFlushTarget *>(&target); + if (!EXPECT_TRUE(tracked != nullptr)) return false; + if (!EXPECT_EQUAL(&tracker, &tracked->getTracker())) return false; + return true; +} + +TEST_F("require that known flush targets are tracked", Fixture) +{ + IFlushTarget::List input; + input.push_back(IFlushTarget::SP(new AttributeFlush())); + input.push_back(IFlushTarget::SP(new MemoryIndexFlush())); + input.push_back(IFlushTarget::SP(new DiskIndexFusion())); + input.push_back(IFlushTarget::SP(new DocStoreFlush())); + input.push_back(IFlushTarget::SP(new DocStoreCompaction())); + + IFlushTarget::List output = f._trackers.trackFlushTargets(input); + EXPECT_EQUAL(5u, output.size()); + EXPECT_TRUE(assertFlushTarget(f._trackers.getAttributeFlush(), *output[0])); + EXPECT_TRUE(assertFlushTarget(f._trackers.getMemoryIndexFlush(), *output[1])); + EXPECT_TRUE(assertFlushTarget(f._trackers.getDiskIndexFusion(), *output[2])); + EXPECT_TRUE(assertFlushTarget(f._trackers.getDocumentStoreFlush(), *output[3])); + EXPECT_TRUE(assertFlushTarget(f._trackers.getDocumentStoreCompact(), *output[4])); +} + +TEST_F("require that un-known flush targets are not tracked", Fixture) +{ + IFlushTarget::List input; + input.push_back(IFlushTarget::SP(new OtherFlush())); + + IFlushTarget::List output = f._trackers.trackFlushTargets(input); + EXPECT_EQUAL(1u, output.size()); + EXPECT_EQUAL(&*output[0].get(), &*input[0]); +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/searchcore/src/tests/proton/metrics/job_load_sampler/.gitignore b/searchcore/src/tests/proton/metrics/job_load_sampler/.gitignore new file mode 100644 index 00000000000..2e02ec8191b --- /dev/null +++ b/searchcore/src/tests/proton/metrics/job_load_sampler/.gitignore @@ -0,0 +1 @@ +searchcore_job_load_sampler_test_app diff --git a/searchcore/src/tests/proton/metrics/job_load_sampler/CMakeLists.txt b/searchcore/src/tests/proton/metrics/job_load_sampler/CMakeLists.txt new file mode 100644 index 00000000000..478a7201228 --- /dev/null +++ b/searchcore/src/tests/proton/metrics/job_load_sampler/CMakeLists.txt @@ -0,0 +1,8 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(searchcore_job_load_sampler_test_app + SOURCES + job_load_sampler_test.cpp + DEPENDS + searchcore_proton_metrics +) +vespa_add_test(NAME searchcore_job_load_sampler_test_app COMMAND searchcore_job_load_sampler_test_app) diff --git a/searchcore/src/tests/proton/metrics/job_load_sampler/DESC b/searchcore/src/tests/proton/metrics/job_load_sampler/DESC new file mode 100644 index 00000000000..966bcdf83f6 --- /dev/null +++ b/searchcore/src/tests/proton/metrics/job_load_sampler/DESC @@ -0,0 +1 @@ +job load sampler test. Take a look at job_load_sampler_test.cpp for details. diff --git a/searchcore/src/tests/proton/metrics/job_load_sampler/FILES b/searchcore/src/tests/proton/metrics/job_load_sampler/FILES new file mode 100644 index 00000000000..1112ae6c5da --- /dev/null +++ b/searchcore/src/tests/proton/metrics/job_load_sampler/FILES @@ -0,0 +1 @@ +job_load_sampler_test.cpp diff --git a/searchcore/src/tests/proton/metrics/job_load_sampler/job_load_sampler_test.cpp b/searchcore/src/tests/proton/metrics/job_load_sampler/job_load_sampler_test.cpp new file mode 100644 index 00000000000..b8fa728927f --- /dev/null +++ b/searchcore/src/tests/proton/metrics/job_load_sampler/job_load_sampler_test.cpp @@ -0,0 +1,95 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#include <vespa/fastos/fastos.h> +#include <vespa/log/log.h> +LOG_SETUP("job_load_sampler_test"); + +#include <vespa/searchcore/proton/metrics/job_load_sampler.h> +#include <vespa/vespalib/testkit/testapp.h> + +using namespace proton; + +constexpr double EPS = 0.000001; + +struct Fixture +{ + JobLoadSampler _sampler; + Fixture() + : _sampler(10) + { + } + Fixture &start(double now) { + _sampler.startJob(now); + return *this; + } + Fixture &end(double now) { + _sampler.endJob(now); + return *this; + } + double sample(double now) { + return _sampler.sampleLoad(now); + } +}; + +TEST_F("require that empty sampler gives 0 load", Fixture) +{ + EXPECT_APPROX(0.0, f.sample(11), EPS); +} + +TEST_F("require that empty time interval gives 0 load", Fixture) +{ + EXPECT_APPROX(0.0, f.sample(10), EPS); +} + +TEST_F("require that job that starts and ends in interval gets correct load", Fixture) +{ + f.start(12).end(17); + EXPECT_APPROX(0.5, f.sample(20), EPS); + EXPECT_APPROX(0.0, f.sample(21), EPS); +} + +TEST_F("require that job that starts in interval gets correct load", Fixture) +{ + f.start(12); + EXPECT_APPROX(0.8, f.sample(20), EPS); + EXPECT_APPROX(1.0, f.sample(21), EPS); +} + +TEST_F("require that job that ends in interval gets correct load", Fixture) +{ + f.start(12).sample(20); + f.end(27); + EXPECT_APPROX(0.7, f.sample(30), EPS); + EXPECT_APPROX(0.0, f.sample(31), EPS); +} + +TEST_F("require that job that runs in complete interval gets correct load", Fixture) +{ + f.start(12).sample(20); + EXPECT_APPROX(1.0, f.sample(30), EPS); + EXPECT_APPROX(1.0, f.sample(31), EPS); +} + +TEST_F("require that multiple jobs that starts and ends in interval gets correct load", Fixture) +{ + // job1: 12->17: 0.5 + // job2: 14->16: 0.2 + f.start(12).start(14).end(16).end(17); + EXPECT_APPROX(0.7, f.sample(20), EPS); +} + +TEST_F("require that multiple jobs that starts and ends in several intervals gets correct load", Fixture) +{ + // job1: 12->22 + // job2: 14->34 + // job3: 25->45 + f.start(12).start(14); + EXPECT_APPROX(1.4, f.sample(20), EPS); + f.end(22).start(25); + EXPECT_APPROX(1.7, f.sample(30), EPS); + f.end(34); + EXPECT_APPROX(1.4, f.sample(40), EPS); + f.end(45); + EXPECT_APPROX(0.5, f.sample(50), EPS); +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/searchcore/src/tests/proton/metrics/job_tracked_flush/.gitignore b/searchcore/src/tests/proton/metrics/job_tracked_flush/.gitignore new file mode 100644 index 00000000000..85e6097878b --- /dev/null +++ b/searchcore/src/tests/proton/metrics/job_tracked_flush/.gitignore @@ -0,0 +1 @@ +searchcore_job_tracked_flush_test_app diff --git a/searchcore/src/tests/proton/metrics/job_tracked_flush/CMakeLists.txt b/searchcore/src/tests/proton/metrics/job_tracked_flush/CMakeLists.txt new file mode 100644 index 00000000000..f4544740f8e --- /dev/null +++ b/searchcore/src/tests/proton/metrics/job_tracked_flush/CMakeLists.txt @@ -0,0 +1,8 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(searchcore_job_tracked_flush_test_app + SOURCES + job_tracked_flush_test.cpp + DEPENDS + searchcore_proton_metrics +) +vespa_add_test(NAME searchcore_job_tracked_flush_test_app COMMAND searchcore_job_tracked_flush_test_app) diff --git a/searchcore/src/tests/proton/metrics/job_tracked_flush/DESC b/searchcore/src/tests/proton/metrics/job_tracked_flush/DESC new file mode 100644 index 00000000000..b62528ff8b4 --- /dev/null +++ b/searchcore/src/tests/proton/metrics/job_tracked_flush/DESC @@ -0,0 +1,2 @@ +job tracked flush target/task test. Take a look at job_tracked_flush_test.cpp for details. + diff --git a/searchcore/src/tests/proton/metrics/job_tracked_flush/FILES b/searchcore/src/tests/proton/metrics/job_tracked_flush/FILES new file mode 100644 index 00000000000..09f32789c94 --- /dev/null +++ b/searchcore/src/tests/proton/metrics/job_tracked_flush/FILES @@ -0,0 +1 @@ +job_tracked_flush_test.cpp diff --git a/searchcore/src/tests/proton/metrics/job_tracked_flush/job_tracked_flush_test.cpp b/searchcore/src/tests/proton/metrics/job_tracked_flush/job_tracked_flush_test.cpp new file mode 100644 index 00000000000..cf35ba0b505 --- /dev/null +++ b/searchcore/src/tests/proton/metrics/job_tracked_flush/job_tracked_flush_test.cpp @@ -0,0 +1,139 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#include <vespa/fastos/fastos.h> +#include <vespa/log/log.h> +LOG_SETUP("job_tracked_flush_test"); + +#include <vespa/searchcore/proton/metrics/job_tracked_flush_target.h> +#include <vespa/searchcore/proton/metrics/job_tracked_flush_task.h> +#include <vespa/searchcore/proton/test/dummy_flush_target.h> +#include <vespa/searchcore/proton/test/simple_job_tracker.h> +#include <vespa/vespalib/testkit/testapp.h> +#include <vespa/vespalib/util/closuretask.h> +#include <vespa/vespalib/util/threadstackexecutor.h> +#include <vespa/vespalib/util/sync.h> + +using namespace proton; +using namespace searchcorespi; +using search::SerialNum; +using test::SimpleJobTracker; +using vespalib::makeTask; +using vespalib::makeClosure; +using vespalib::CountDownLatch; +using vespalib::Gate; +using vespalib::ThreadStackExecutor; + +struct MyFlushTask : public searchcorespi::FlushTask +{ + Gate &_execGate; + MyFlushTask(Gate &execGate) : _execGate(execGate) {} + + // Implements searchcorespi::FlushTask + virtual void run() { + _execGate.await(5000); + } + virtual search::SerialNum getFlushSerial() const { return 5; } +}; + +struct MyFlushTarget : public test::DummyFlushTarget +{ + typedef std::shared_ptr<MyFlushTarget> SP; + SerialNum _initFlushSerial; + Gate _execGate; + Gate _initGate; + MyFlushTarget() + : test::DummyFlushTarget("mytarget", Type::FLUSH, Component::OTHER), + _initFlushSerial(0), + _execGate(), + _initGate() + {} + + // Implements searchcorespi::IFlushTarget + virtual FlushTask::UP initFlush(SerialNum currentSerial) { + if (currentSerial > 0) { + _initFlushSerial = currentSerial; + _initGate.await(5000); + return FlushTask::UP(new MyFlushTask(_execGate)); + } + return FlushTask::UP(); + } +}; + +struct Fixture +{ + SimpleJobTracker::SP _tracker; + MyFlushTarget::SP _target; + JobTrackedFlushTarget _trackedFlush; + FlushTask::UP _task; + Gate _taskGate; + ThreadStackExecutor _exec; + Fixture(uint32_t numJobTrackings = 1) + : _tracker(new SimpleJobTracker(numJobTrackings)), + _target(new MyFlushTarget()), + _trackedFlush(_tracker, _target), + _task(), + _taskGate(), + _exec(1, 64000) + { + } + void initFlush(SerialNum currentSerial) { + _task = _trackedFlush.initFlush(currentSerial); + _taskGate.countDown(); + } +}; + +constexpr SerialNum FLUSH_SERIAL = 10; + +TEST_F("require that flush target name, type and component is preserved", Fixture) +{ + EXPECT_EQUAL("mytarget", f._trackedFlush.getName()); + EXPECT_TRUE(IFlushTarget::Type::FLUSH == f._trackedFlush.getType()); + EXPECT_TRUE(IFlushTarget::Component::OTHER == f._trackedFlush.getComponent()); +} + +TEST_F("require that flush task init is tracked", Fixture) +{ + EXPECT_EQUAL(1u, f._tracker->_started.getCount()); + EXPECT_EQUAL(1u, f._tracker->_ended.getCount()); + + f._exec.execute(makeTask(makeClosure(&f, &Fixture::initFlush, FLUSH_SERIAL))); + f._tracker->_started.await(5000); + EXPECT_EQUAL(0u, f._tracker->_started.getCount()); + EXPECT_EQUAL(1u, f._tracker->_ended.getCount()); + + f._target->_initGate.countDown(); + f._taskGate.await(5000); + EXPECT_EQUAL(0u, f._tracker->_ended.getCount()); + { + JobTrackedFlushTask *trackedTask = dynamic_cast<JobTrackedFlushTask *>(f._task.get()); + EXPECT_TRUE(trackedTask != nullptr); + EXPECT_EQUAL(5u, trackedTask->getFlushSerial()); + } + EXPECT_EQUAL(FLUSH_SERIAL, f._target->_initFlushSerial); +} + +TEST_F("require that flush task execution is tracked", Fixture(2)) +{ + f._exec.execute(makeTask(makeClosure(&f, &Fixture::initFlush, FLUSH_SERIAL))); + f._target->_initGate.countDown(); + f._taskGate.await(5000); + + EXPECT_EQUAL(1u, f._tracker->_started.getCount()); + EXPECT_EQUAL(1u, f._tracker->_ended.getCount()); + + f._exec.execute(std::move(f._task)); + f._tracker->_started.await(5000); + EXPECT_EQUAL(0u, f._tracker->_started.getCount()); + EXPECT_EQUAL(1u, f._tracker->_ended.getCount()); + + f._target->_execGate.countDown(); + f._tracker->_ended.await(5000); + EXPECT_EQUAL(0u, f._tracker->_ended.getCount()); +} + +TEST_F("require that nullptr flush task is not tracked", Fixture) +{ + FlushTask::UP task = f._trackedFlush.initFlush(0); + EXPECT_TRUE(task.get() == nullptr); +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/searchcore/src/tests/proton/metrics/metrics_engine/.gitignore b/searchcore/src/tests/proton/metrics/metrics_engine/.gitignore new file mode 100644 index 00000000000..98ae77cb458 --- /dev/null +++ b/searchcore/src/tests/proton/metrics/metrics_engine/.gitignore @@ -0,0 +1 @@ +searchcore_metrics_engine_test_app diff --git a/searchcore/src/tests/proton/metrics/metrics_engine/CMakeLists.txt b/searchcore/src/tests/proton/metrics/metrics_engine/CMakeLists.txt new file mode 100644 index 00000000000..e50e584e578 --- /dev/null +++ b/searchcore/src/tests/proton/metrics/metrics_engine/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(searchcore_metrics_engine_test_app + SOURCES + metrics_engine_test.cpp + DEPENDS + searchcore_flushengine + searchcore_proton_metrics +) +vespa_add_test(NAME searchcore_metrics_engine_test_app COMMAND searchcore_metrics_engine_test_app) diff --git a/searchcore/src/tests/proton/metrics/metrics_engine/DESC b/searchcore/src/tests/proton/metrics/metrics_engine/DESC new file mode 100644 index 00000000000..2efe31d45d3 --- /dev/null +++ b/searchcore/src/tests/proton/metrics/metrics_engine/DESC @@ -0,0 +1 @@ +metrics engine test. Take a look at metrics_engine_test.cpp for details. diff --git a/searchcore/src/tests/proton/metrics/metrics_engine/FILES b/searchcore/src/tests/proton/metrics/metrics_engine/FILES new file mode 100644 index 00000000000..ac033a53070 --- /dev/null +++ b/searchcore/src/tests/proton/metrics/metrics_engine/FILES @@ -0,0 +1 @@ +metrics_engine_test.cpp diff --git a/searchcore/src/tests/proton/metrics/metrics_engine/metrics_engine_test.cpp b/searchcore/src/tests/proton/metrics/metrics_engine/metrics_engine_test.cpp new file mode 100644 index 00000000000..a70ce5a5333 --- /dev/null +++ b/searchcore/src/tests/proton/metrics/metrics_engine/metrics_engine_test.cpp @@ -0,0 +1,32 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Unit tests for metrics_engine. + +#include <vespa/fastos/fastos.h> +#include <vespa/log/log.h> +LOG_SETUP("metrics_engine_test"); + +#include <vespa/searchcore/proton/metrics/metrics_engine.h> +#include <vespa/vespalib/testkit/testapp.h> + +using namespace proton; + +namespace { + +TEST("require that the metric proton.diskusage is the sum of the documentDB " + "diskusage metrics.") { + MetricsEngine metrics_engine; + + DocumentDBMetricsCollection metrics1("type1", 1); + DocumentDBMetricsCollection metrics2("type2", 1); + metrics1.getMetrics().index.diskUsage.addValue(100); + metrics2.getMetrics().index.diskUsage.addValue(1000); + + metrics_engine.addDocumentDBMetrics(metrics1); + metrics_engine.addDocumentDBMetrics(metrics2); + + EXPECT_EQUAL(1100, metrics_engine.legacyRoot().diskUsage.getLongValue("value")); +} + +} // namespace + +TEST_MAIN() { TEST_RUN_ALL(); } |