summaryrefslogtreecommitdiff
path: root/src/mongo/db/storage/wiredtiger/wiredtiger_session_cache_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/storage/wiredtiger/wiredtiger_session_cache_test.cpp')
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_session_cache_test.cpp119
1 files changed, 119 insertions, 0 deletions
diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_session_cache_test.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_session_cache_test.cpp
new file mode 100644
index 00000000000..82209292da6
--- /dev/null
+++ b/src/mongo/db/storage/wiredtiger/wiredtiger_session_cache_test.cpp
@@ -0,0 +1,119 @@
+// wiredtiger_session_cache_test.cpp
+
+
+/**
+ * Copyright (C) 2019-present MongoDB, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the Server Side Public License, version 1,
+ * as published by MongoDB, Inc.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * Server Side Public License for more details.
+ *
+ * You should have received a copy of the Server Side Public License
+ * along with this program. If not, see
+ * <http://www.mongodb.com/licensing/server-side-public-license>.
+ *
+ * As a special exception, the copyright holders give permission to link the
+ * code of portions of this program with the OpenSSL library under certain
+ * conditions as described in each individual source file and distribute
+ * linked combinations including the program with the OpenSSL library. You
+ * must comply with the Server Side Public License in all respects for
+ * all of the code used other than as permitted herein. If you modify file(s)
+ * with this exception, you may extend this exception to your version of the
+ * file(s), but you are not obligated to do so. If you do not wish to do so,
+ * delete this exception statement from your version. If you delete this
+ * exception statement from all source files in the program, then also delete
+ * it in the license file.
+ */
+
+#include "mongo/platform/basic.h"
+
+#include <sstream>
+#include <string>
+
+#include "mongo/base/string_data.h"
+#include "mongo/db/storage/wiredtiger/wiredtiger_session_cache.h"
+#include "mongo/db/storage/wiredtiger/wiredtiger_util.h"
+#include "mongo/unittest/temp_dir.h"
+#include "mongo/unittest/unittest.h"
+#include "mongo/util/system_clock_source.h"
+
+namespace mongo {
+
+using std::string;
+using std::stringstream;
+
+class WiredTigerConnection {
+public:
+ WiredTigerConnection(StringData dbpath, StringData extraStrings) : _conn(NULL) {
+ std::stringstream ss;
+ ss << "create,";
+ ss << extraStrings;
+ string config = ss.str();
+ _fastClockSource = stdx::make_unique<SystemClockSource>();
+ int ret = wiredtiger_open(dbpath.toString().c_str(), NULL, config.c_str(), &_conn);
+ ASSERT_OK(wtRCToStatus(ret));
+ ASSERT(_conn);
+ }
+ ~WiredTigerConnection() {
+ _conn->close(_conn, NULL);
+ }
+ WT_CONNECTION* getConnection() const {
+ return _conn;
+ }
+ ClockSource* getClockSource() {
+ return _fastClockSource.get();
+ }
+
+private:
+ WT_CONNECTION* _conn;
+ std::unique_ptr<ClockSource> _fastClockSource;
+};
+
+class WiredTigerSessionCacheHarnessHelper {
+public:
+ WiredTigerSessionCacheHarnessHelper(StringData extraStrings)
+ : _dbpath("wt_test"),
+ _connection(_dbpath.path(), extraStrings),
+ _sessionCache(_connection.getConnection(), _connection.getClockSource()) {}
+
+
+ WiredTigerSessionCache* getSessionCache() {
+ return &_sessionCache;
+ }
+
+private:
+ unittest::TempDir _dbpath;
+ WiredTigerConnection _connection;
+ WiredTigerSessionCache _sessionCache;
+};
+
+TEST(WiredTigerSessionCacheTest, CheckSessionCacheCleanup) {
+ WiredTigerSessionCacheHarnessHelper harnessHelper("");
+ WiredTigerSessionCache* sessionCache = harnessHelper.getSessionCache();
+ ASSERT_EQUALS(sessionCache->getIdleSessionsCount(), 0U);
+ {
+ UniqueWiredTigerSession _session = sessionCache->getSession();
+ ASSERT_EQUALS(sessionCache->getIdleSessionsCount(), 0U);
+ }
+ // Destroying of a session puts it in the session cache
+ ASSERT_EQUALS(sessionCache->getIdleSessionsCount(), 1U);
+
+ // An idle timeout of 0 means never expire idle sessions
+ sessionCache->closeExpiredIdleSessions(0);
+ ASSERT_EQUALS(sessionCache->getIdleSessionsCount(), 1U);
+ sleepmillis(10);
+
+ // Expire sessions that have been idle for 10 secs
+ sessionCache->closeExpiredIdleSessions(10000);
+ ASSERT_EQUALS(sessionCache->getIdleSessionsCount(), 1U);
+ // Expire sessions that have been idle for 2 millisecs
+ sessionCache->closeExpiredIdleSessions(2);
+ ASSERT_EQUALS(sessionCache->getIdleSessionsCount(), 0U);
+}
+
+} // namespace mongo