Refactored Mesos tests `Environment` class on stout test changes. In order to support test filters on stout and libprocess, some of the logic in the Mesos test `Environment` class was moved into stout. This commit changes the Mesos test `Environment` to inherit the stout test `Environment`.
Review: https://reviews.apache.org/r/57972/ Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/a1400f79 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/a1400f79 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/a1400f79 Branch: refs/heads/master Commit: a1400f79ef1c7bebd33c81a4ad6ebb64af968d8b Parents: 9bf251b Author: John Kordich <[email protected]> Authored: Tue Apr 11 12:19:09 2017 -0700 Committer: Joseph Wu <[email protected]> Committed: Tue Apr 11 14:32:02 2017 -0700 ---------------------------------------------------------------------- src/tests/environment.cpp | 142 +++++++---------------------------------- src/tests/environment.hpp | 4 +- 2 files changed, 27 insertions(+), 119 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/a1400f79/src/tests/environment.cpp ---------------------------------------------------------------------- diff --git a/src/tests/environment.cpp b/src/tests/environment.cpp index e3cff18..3d2d8f1 100644 --- a/src/tests/environment.cpp +++ b/src/tests/environment.cpp @@ -78,6 +78,8 @@ using std::vector; using process::Owned; +using stout::internal::tests::TestFilter; + namespace mesos { namespace internal { namespace tests { @@ -86,32 +88,6 @@ namespace tests { Environment* environment; -class TestFilter -{ -public: - TestFilter() {} - virtual ~TestFilter() {} - - // Returns true iff the test should be disabled. - virtual bool disable(const ::testing::TestInfo* test) const = 0; - - // Returns whether the test name / parameterization matches the - // pattern. - static bool matches(const ::testing::TestInfo* test, const string& pattern) - { - if (strings::contains(test->test_case_name(), pattern) || - strings::contains(test->name(), pattern)) { - return true; - } else if (test->type_param() != nullptr && - strings::contains(test->type_param(), pattern)) { - return true; - } - - return false; - } -}; - - class BenchmarkFilter : public TestFilter { public: @@ -686,99 +662,29 @@ private: }; -// Return list of disabled tests based on test name based filters. -static vector<string> disabled( - const ::testing::UnitTest* unitTest, - const vector<Owned<TestFilter>>& filters) -{ - vector<string> disabled; - - for (int i = 0; i < unitTest->total_test_case_count(); i++) { - const ::testing::TestCase* testCase = unitTest->GetTestCase(i); - for (int j = 0; j < testCase->total_test_count(); j++) { - const ::testing::TestInfo* test = testCase->GetTestInfo(j); - - foreach (const Owned<TestFilter>& filter, filters) { - if (filter->disable(test)) { - disabled.push_back( - test->test_case_name() + string(".") + test->name()); - break; - } - } - } - } - - return disabled; -} - - -// We use the constructor to setup specific tests by updating the -// gtest filter. We do this so that we can selectively run tests that -// require root or specific OS support (e.g., cgroups). Note that this -// should not effect any other filters that have been put in place -// either on the command line or via an environment variable. -// N.B. This MUST be done _before_ invoking RUN_ALL_TESTS. -Environment::Environment(const Flags& _flags) : flags(_flags) +Environment::Environment(const Flags& _flags) + : stout::internal::tests::Environment( + std::vector<std::shared_ptr<TestFilter>>{ + std::make_shared<AufsFilter>(), + std::make_shared<BenchmarkFilter>(), + std::make_shared<CfsFilter>(), + std::make_shared<CgroupsFilter>(), + std::make_shared<CurlFilter>(), + std::make_shared<DockerFilter>(), + std::make_shared<InternetFilter>(), + std::make_shared<LogrotateFilter>(), + std::make_shared<NetcatFilter>(), + std::make_shared<NetClsCgroupsFilter>(), + std::make_shared<NetworkIsolatorTestFilter>(), + std::make_shared<NvidiaGpuFilter>(), + std::make_shared<OverlayFSFilter>(), + std::make_shared<PerfCPUCyclesFilter>(), + std::make_shared<PerfFilter>(), + std::make_shared<RootFilter>(), + std::make_shared<UnzipFilter>(), + std::make_shared<XfsFilter>()}), + flags(_flags) { - // First we split the current filter into enabled and disabled tests - // (which are separated by a '-'). - const string& filter = ::testing::GTEST_FLAG(filter); - - // An empty filter indicates no tests should be run. - if (filter.empty()) { - return; - } - - string enabled; - string disabled; - - size_t dash = filter.find('-'); - if (dash != string::npos) { - enabled = filter.substr(0, dash); - disabled = filter.substr(dash + 1); - } else { - enabled = filter; - } - - // Use universal filter if not specified. - if (enabled.empty()) { - enabled = "*"; - } - - // Ensure disabled tests end with ":" separator before we add more. - if (!disabled.empty() && !strings::endsWith(disabled, ":")) { - disabled += ":"; - } - - vector<Owned<TestFilter>> filters; - - filters.push_back(Owned<TestFilter>(new AufsFilter())); - filters.push_back(Owned<TestFilter>(new BenchmarkFilter())); - filters.push_back(Owned<TestFilter>(new CfsFilter())); - filters.push_back(Owned<TestFilter>(new CgroupsFilter())); - filters.push_back(Owned<TestFilter>(new CurlFilter())); - filters.push_back(Owned<TestFilter>(new DockerFilter())); - filters.push_back(Owned<TestFilter>(new InternetFilter())); - filters.push_back(Owned<TestFilter>(new LogrotateFilter())); - filters.push_back(Owned<TestFilter>(new NetcatFilter())); - filters.push_back(Owned<TestFilter>(new NetClsCgroupsFilter())); - filters.push_back(Owned<TestFilter>(new NetworkIsolatorTestFilter())); - filters.push_back(Owned<TestFilter>(new NvidiaGpuFilter())); - filters.push_back(Owned<TestFilter>(new OverlayFSFilter())); - filters.push_back(Owned<TestFilter>(new PerfCPUCyclesFilter())); - filters.push_back(Owned<TestFilter>(new PerfFilter())); - filters.push_back(Owned<TestFilter>(new RootFilter())); - filters.push_back(Owned<TestFilter>(new UnzipFilter())); - filters.push_back(Owned<TestFilter>(new XfsFilter())); - - // Construct the filter string to handle system or platform specific tests. - ::testing::UnitTest* unitTest = ::testing::UnitTest::GetInstance(); - - disabled += strings::join(":", tests::disabled(unitTest, filters)); - - // Now update the gtest flag. - ::testing::GTEST_FLAG(filter) = enabled + "-" + disabled; - // Add our test event listeners. ::testing::TestEventListeners& listeners = ::testing::UnitTest::GetInstance()->listeners(); http://git-wip-us.apache.org/repos/asf/mesos/blob/a1400f79/src/tests/environment.hpp ---------------------------------------------------------------------- diff --git a/src/tests/environment.hpp b/src/tests/environment.hpp index 06b6d54..6d9a2bd 100644 --- a/src/tests/environment.hpp +++ b/src/tests/environment.hpp @@ -24,6 +24,8 @@ #include <stout/try.hpp> +#include <stout/tests/environment.hpp> + #include "tests/flags.hpp" namespace mesos { @@ -31,7 +33,7 @@ namespace internal { namespace tests { // Used to set up and manage the test environment. -class Environment : public ::testing::Environment { +class Environment : public stout::internal::tests::Environment { public: Environment(const Flags& flags);
