summaryrefslogtreecommitdiff
path: root/src/mongo/db/ftdc/controller_test.cpp
diff options
context:
space:
mode:
authorMark Benvenuto <mark.benvenuto@mongodb.com>2015-11-02 16:59:24 -0500
committerMark Benvenuto <mark.benvenuto@mongodb.com>2015-11-06 11:10:31 -0500
commit7ed2f9786e541d7df22660a09f8a86668e667d60 (patch)
tree3bf1e1fa473dfd30b581c5c442a7420be261f074 /src/mongo/db/ftdc/controller_test.cpp
parent02eb7fa6d33d23244d41a876867d0b64f75f096f (diff)
downloadmongo-7ed2f9786e541d7df22660a09f8a86668e667d60.tar.gz
SERVER-21231: Improve logging messages, and prevent FTDC from writting to disk when not enabled.
Diffstat (limited to 'src/mongo/db/ftdc/controller_test.cpp')
-rw-r--r--src/mongo/db/ftdc/controller_test.cpp80
1 files changed, 76 insertions, 4 deletions
diff --git a/src/mongo/db/ftdc/controller_test.cpp b/src/mongo/db/ftdc/controller_test.cpp
index 065db24e198..37f406a2f39 100644
--- a/src/mongo/db/ftdc/controller_test.cpp
+++ b/src/mongo/db/ftdc/controller_test.cpp
@@ -44,6 +44,7 @@
#include "mongo/db/ftdc/ftdc_test.h"
#include "mongo/db/jsobj.h"
#include "mongo/db/service_context.h"
+#include "mongo/stdx/memory.h"
#include "mongo/unittest/temp_dir.h"
#include "mongo/unittest/unittest.h"
@@ -166,8 +167,8 @@ TEST(FTDCControllerTest, TestFull) {
FTDCController c(dir, config);
- auto c1 = std::unique_ptr<FTDCMetricsCollectorMock2>(new FTDCMetricsCollectorMock2());
- auto c2 = std::unique_ptr<FTDCMetricsCollectorMockRotate>(new FTDCMetricsCollectorMockRotate());
+ auto c1 = stdx::make_unique<FTDCMetricsCollectorMock2>();
+ auto c2 = stdx::make_unique<FTDCMetricsCollectorMockRotate>();
auto c1Ptr = c1.get();
auto c2Ptr = c2.get();
@@ -191,8 +192,7 @@ TEST(FTDCControllerTest, TestFull) {
auto docsRotate = c2Ptr->getDocs();
ASSERT_EQUALS(docsRotate.size(), 1UL);
- std::vector<BSONObj> allDocs;
- allDocs.insert(allDocs.end(), docsRotate.begin(), docsRotate.end());
+ std::vector<BSONObj> allDocs(docsRotate.begin(), docsRotate.end());
allDocs.insert(allDocs.end(), docsPeriodic.begin(), docsPeriodic.end());
auto files = scanDirectory(dir);
@@ -204,4 +204,76 @@ TEST(FTDCControllerTest, TestFull) {
ValidateDocumentList(alog, allDocs);
}
+// Test we can start and stop the controller in quick succession, make sure it succeeds without
+// assert or fault
+TEST(FTDCControllerTest, TestStartStop) {
+ unittest::TempDir tempdir("metrics_testpath");
+ boost::filesystem::path dir(tempdir.path());
+
+ createDirectoryClean(dir);
+
+ FTDCConfig config;
+ config.enabled = false;
+ config.period = Milliseconds(1);
+ config.maxFileSizeBytes = FTDCConfig::kMaxFileSizeBytesDefault;
+ config.maxDirectorySizeBytes = FTDCConfig::kMaxDirectorySizeBytesDefault;
+
+ FTDCController c(dir, config);
+
+ c.start();
+
+ c.stop();
+}
+
+// Test we can start the controller as disabled, the directory is empty, and then we can succesfully
+// enable it
+TEST(FTDCControllerTest, TestStartAsDisabled) {
+ unittest::TempDir tempdir("metrics_testpath");
+ boost::filesystem::path dir(tempdir.path());
+
+ createDirectoryClean(dir);
+
+ FTDCConfig config;
+ config.enabled = false;
+ config.period = Milliseconds(1);
+ config.maxFileSizeBytes = FTDCConfig::kMaxFileSizeBytesDefault;
+ config.maxDirectorySizeBytes = FTDCConfig::kMaxDirectorySizeBytesDefault;
+
+ auto c1 = stdx::make_unique<FTDCMetricsCollectorMock2>();
+
+ auto c1Ptr = c1.get();
+
+ FTDCController c(dir, config);
+
+ c.addPeriodicCollector(std::move(c1));
+
+ c.start();
+
+ auto files0 = scanDirectory(dir);
+
+ ASSERT_EQUALS(files0.size(), 0UL);
+
+ c.setEnabled(true);
+
+ c1Ptr->setSignalOnCount(50);
+
+ // Wait for 50 samples to have occured
+ c1Ptr->wait();
+
+ c.stop();
+
+ auto docsPeriodic = c1Ptr->getDocs();
+ ASSERT_GREATER_THAN_OR_EQUALS(docsPeriodic.size(), 50UL);
+
+ std::vector<BSONObj> allDocs(docsPeriodic.begin(), docsPeriodic.end());
+
+ auto files = scanDirectory(dir);
+
+ ASSERT_EQUALS(files.size(), 1UL);
+
+ auto alog = files[0];
+
+ ValidateDocumentList(alog, allDocs);
+}
+
} // namespace mongo