d03047da9d7344d64941150f4fa6b0091c5030ea
[ep-engine.git] / tests / module_tests / ep_unit_tests_main.cc
1 /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2 /*
3  *     Copyright 2016 Couchbase, Inc
4  *
5  *   Licensed under the Apache License, Version 2.0 (the "License");
6  *   you may not use this file except in compliance with the License.
7  *   You may obtain a copy of the License at
8  *
9  *       http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *   Unless required by applicable law or agreed to in writing, software
12  *   distributed under the License is distributed on an "AS IS" BASIS,
13  *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *   See the License for the specific language governing permissions and
15  *   limitations under the License.
16  */
17
18 /*
19  * Main function & globals for the ep_unit_test target.
20  */
21
22 #include <memcached/extension_loggers.h>
23 #include "programs/engine_testapp/mock_server.h"
24
25 #include <getopt.h>
26 #include <gtest/gtest.h>
27
28 #include "configuration.h"
29 #include "logger.h"
30 #include "hash_table.h"
31
32 /* static storage for environment variable set by putenv(). */
33 static char allow_no_stats_env[] = "ALLOW_NO_STATS_UPDATE=yeah";
34
35
36 int main(int argc, char **argv) {
37     bool log_to_stderr = false;
38     // Parse command-line options.
39     int cmd;
40     bool invalid_argument = false;
41     while (!invalid_argument &&
42            (cmd = getopt(argc, argv, "v")) != EOF) {
43         switch (cmd) {
44         case 'v':
45             log_to_stderr = true;
46             break;
47         default:
48             std::cerr << "Usage: " << argv[0] << " [-v] [gtest_options...]" << std::endl
49                       << std::endl
50                       << "  -v Verbose - Print verbose output to stderr."
51                       << std::endl << std::endl;
52             invalid_argument = true;
53             break;
54         }
55     }
56
57     putenv(allow_no_stats_env);
58
59     mock_init_alloc_hooks();
60     init_mock_server(log_to_stderr);
61
62     get_mock_server_api()->log->set_level(EXTENSION_LOG_DEBUG);
63     if (memcached_initialize_stderr_logger(get_mock_server_api) != EXTENSION_SUCCESS) {
64         std::cerr << argv[0] << ": Failed to initialize log system" << std::endl;
65         return 1;
66     }
67     Logger::setLoggerAPI(get_mock_server_api()->log);
68
69     // Default number of hashtable locks is too large for TSan to
70     // track. Use the value in configuration.json (47 at time of
71     // writing).
72     HashTable::setDefaultNumLocks(Configuration().getHtLocks());
73
74     // Need to initialize ep_real_time and friends.
75     initialize_time_functions(get_mock_server_api()->core);
76
77     ::testing::InitGoogleTest(&argc, argv);
78     return RUN_ALL_TESTS();
79 }