123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- /**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #ifndef TESTS_CONFIGURATION_H_
- #define TESTS_CONFIGURATION_H_
- #include "hdfspp/config_parser.h"
- #include "common/configuration.h"
- #include "common/configuration_loader.h"
- #include <cstdio>
- #include <fstream>
- #include <istream>
- #include <ftw.h>
- #include <gmock/gmock.h>
- namespace hdfs {
- template <typename T, typename U>
- void simpleConfigStreamProperty(std::stringstream& out, T key, U value) {
- out << "<property>"
- << "<name>" << key << "</name>"
- << "<value>" << value << "</value>"
- << "</property>";
- }
- template <typename T, typename U, typename... Args>
- void simpleConfigStreamProperty(std::stringstream& out, T key, U value,
- Args... args) {
- simpleConfigStreamProperty(out, key, value);
- simpleConfigStreamProperty(out, args...);
- }
- template <typename... Args>
- void simpleConfigStream(std::stringstream& out, Args... args) {
- out << "<configuration>";
- simpleConfigStreamProperty(out, args...);
- out << "</configuration>";
- }
- template <typename T, typename U>
- void damagedConfigStreamProperty(std::stringstream& out, T key, U value) {
- out << "<propertyy>"
- << "<name>" << key << "</name>"
- << "<value>" << value << "</value>"
- << "</property>";
- }
- template <typename T, typename U, typename... Args>
- void damagedConfigStreamProperty(std::stringstream& out, T key, U value,
- Args... args) {
- damagedConfigStreamProperty(out, key, value);
- damagedConfigStreamProperty(out, args...);
- }
- template <typename... Args>
- void damagedConfigStream(std::stringstream& out, Args... args) {
- out << "<configuration>";
- damagedConfigStreamProperty(out, args...);
- out << "</configuration>";
- }
- template <typename... Args>
- optional<Configuration> simpleConfig(Args... args) {
- std::stringstream stream;
- simpleConfigStream(stream, args...);
- ConfigurationLoader config_loader;
- config_loader.ClearSearchPath();
- optional<Configuration> parse = config_loader.Load<Configuration>(stream.str());
- EXPECT_TRUE((bool)parse);
- return parse;
- }
- template <typename... Args>
- void writeSimpleConfig(const std::string& filename, Args... args) {
- std::stringstream stream;
- simpleConfigStream(stream, args...);
- std::ofstream out;
- out.open(filename);
- out << stream.rdbuf();
- }
- template <typename... Args>
- void writeDamagedConfig(const std::string& filename, Args... args) {
- std::stringstream stream;
- damagedConfigStream(stream, args...);
- std::ofstream out;
- out.open(filename);
- out << stream.rdbuf();
- }
- // TempDir: is deleted on destruction
- class TempFile {
- public:
- std::string filename;
- char fn_buffer[128];
- int tempFileHandle;
- TempFile() : tempFileHandle(-1) {
- strncpy(fn_buffer, "/tmp/test_XXXXXXXXXX", sizeof(fn_buffer));
- tempFileHandle = mkstemp(fn_buffer);
- EXPECT_NE(-1, tempFileHandle);
- filename = fn_buffer;
- }
- TempFile(const std::string & fn) : filename(fn), tempFileHandle(-1) {
- strncpy(fn_buffer, fn.c_str(), sizeof(fn_buffer));
- fn_buffer[sizeof(fn_buffer)-1] = 0;
- }
- ~TempFile() { if(-1 != tempFileHandle) close(tempFileHandle); unlink(fn_buffer); }
- };
- // Callback to remove a directory in the nftw visitor
- int nftw_remove(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf)
- {
- (void)sb; (void)typeflag; (void)ftwbuf;
- int rv = remove(fpath);
- EXPECT_EQ(0, rv);
- return rv;
- }
- // TempDir: is created in ctor and recursively deletes in dtor
- class TempDir {
- public:
- std::string path;
- TempDir() {
- char fn_buffer[128];
- strncpy(fn_buffer, "/tmp/test_dir_XXXXXXXXXX", sizeof(fn_buffer));
- const char * returned_path = mkdtemp(fn_buffer);
- EXPECT_NE(nullptr, returned_path);
- path = returned_path;
- }
- ~TempDir() {
- if(!path.empty())
- nftw(path.c_str(), nftw_remove, 64, FTW_DEPTH | FTW_PHYS);
- }
- };
- }
- #endif
|