initial code repo
[stor4nfv.git] / src / ceph / src / test / admin_socket_output.h
diff --git a/src/ceph/src/test/admin_socket_output.h b/src/ceph/src/test/admin_socket_output.h
new file mode 100644 (file)
index 0000000..28f6576
--- /dev/null
@@ -0,0 +1,78 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+/*
+ * Ceph - scalable distributed file system
+ *
+ * Copyright (C) 2017 Red Hat
+ *
+ * This is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software
+ * Foundation.  See file COPYING.
+ *
+ */
+
+#ifndef CEPH_ADMIN_SOCKET_OUTPUT_H
+#define CEPH_ADMIN_SOCKET_OUTPUT_H
+
+#include <string>
+#include <map>
+#include <set>
+#include <vector>
+
+#include <boost/filesystem/path.hpp>       // For path
+#include <boost/filesystem/operations.hpp> // For exists, is_directory
+
+namespace bfs = boost::filesystem;
+
+using socket_results = std::map<std::string, std::string>;
+using test_functions =
+    std::vector<std::pair<std::string, bool (*)(std::string &)>>;
+
+class AdminSocketClient;
+
+class AdminSocketOutput {
+public:
+  AdminSocketOutput() {}
+
+  void add_target(const std::string &target);
+  void add_command(const std::string &target, const std::string &command);
+  void add_test(const std::string &target, const std::string &command,
+                bool (*test)(std::string &));
+  void postpone(const std::string &target, const std::string &command);
+
+  void exec();
+
+  void mod_for_vstart() {
+    socketdir = "./out";
+    prefix = "";
+  }
+
+private:
+  bool init_directories() const {
+    std::cout << "Checking " << socketdir << std::endl;
+    return exists(socketdir) && is_directory(socketdir);
+  }
+
+  bool init_sockets();
+  bool gather_socket_output();
+  std::string get_result(const std::string target, const std::string command) const;
+
+  std::pair<std::string, std::string>
+  run_command(AdminSocketClient &client, const std::string raw_command,
+              bool send_untouched = false);
+
+  bool run_tests() const;
+
+  std::set<std::string> targets;
+  std::map<std::string, std::string> sockets;
+  std::map<std::string, socket_results> results;
+  std::map<std::string, std::vector<std::string>> custom_commands;
+  std::map<std::string, std::vector<std::string>> postponed_commands;
+  std::map<std::string, test_functions> tests;
+
+  std::string prefix = "ceph-";
+  bfs::path socketdir = "/var/run/ceph";
+};
+
+#endif // CEPH_ADMIN_SOCKET_OUTPUT_H