/* * Copyright (c) 2014, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * */ #pragma once #include #include #include #include #include #include #include #include #include namespace pt = boost::property_tree; namespace osquery { /// Init function for tests and benchmarks. void initTesting(); /// Cleanup/stop function for tests and benchmarks. void cleanupTesting(); /// Any SQL-dependent tests should use kTestQuery for a pre-populated example. const std::string kTestQuery = "SELECT * FROM test_table"; /// Tests can be run from within the source or build directory. /// The test initializer will attempt to discovery the current working path. extern std::string kTestDataPath; /// Tests should limit intermediate input/output to a working directory. /// Config data, logging results, and intermediate database/caching usage. extern std::string kTestWorkingDirectory; /// A fake directory tree should be used for filesystem iterator testing. const std::string kFakeDirectoryName = "fstree"; extern std::string kFakeDirectory; ScheduledQuery getOsqueryScheduledQuery(); // getTestDBExpectedResults returns the results of kTestQuery of the table that // initially gets returned from createTestDB() QueryData getTestDBExpectedResults(); // Starting with the dataset returned by createTestDB(), getTestDBResultStream // returns a vector of std::pair's where pair.first is the query that would // need to be performed on the dataset to make the results be pair.second std::vector > getTestDBResultStream(); // getSerializedRow() return an std::pair where pair->first is a string which // should serialize to pair->second. pair->second should deserialize // to pair->first std::pair getSerializedRow(); // getSerializedQueryData() return an std::pair where pair->first is a string // which should serialize to pair->second. pair->second should // deserialize to pair->first std::pair getSerializedQueryData(); std::pair getSerializedQueryDataJSON(); // getSerializedDiffResults() return an std::pair where pair->first is a string // which should serialize to pair->second. pair->second should // deserialize to pair->first std::pair getSerializedDiffResults(); std::pair getSerializedDiffResultsJSON(); // getSerializedQueryLogItem() return an std::pair where pair->first // is a string which should serialize to pair->second. pair->second // should deserialize to pair->first std::pair getSerializedQueryLogItem(); std::pair getSerializedQueryLogItemJSON(); // generate content for a PEM-encoded certificate std::string getCACertificateContent(); // generate the content that would be found in an /etc/hosts file std::string getEtcHostsContent(); // generate the content that would be found in an /etc/protocols file std::string getEtcProtocolsContent(); // generate the expected data that getEtcHostsContent() should parse into QueryData getEtcHostsExpectedResults(); // generate the expected data that getEtcProtocolsContent() should parse into QueryData getEtcProtocolsExpectedResults(); // the three items that you need to test osquery::splitString struct SplitStringTestData { std::string test_string; std::string delim; std::vector test_vector; }; // generate a set of test data to test osquery::splitString std::vector generateSplitStringTestData(); // generate a small directory structure for testing void createMockFileStructure(); // remove the small directory structure used for testing void tearDownMockFileStructure(); class TLSServerRunner : private boost::noncopyable { public: /// Create a singleton TLS server runner. static TLSServerRunner& instance() { static TLSServerRunner instance; return instance; } /// TCP port accessor. static const std::string& port() { return instance().port_; } /// Start the server if it hasn't started already. static void start(); /// Stop the service when the process exits. static void stop(); private: TLSServerRunner() : server_(0), port_(std::to_string(rand() % 10000 + 20000)){}; TLSServerRunner(TLSServerRunner const&); void operator=(TLSServerRunner const&); virtual ~TLSServerRunner() { stop(); } private: pid_t server_; std::string port_; }; }