You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hawq.apache.org by hu...@apache.org on 2016/06/16 04:15:01 UTC
incubator-hawq git commit: HAWQ-822. Add string replacement utility
in feature test framework to support convert from source to sql and ans files
Repository: incubator-hawq
Updated Branches:
refs/heads/master 76260cdf4 -> dbf32f1b7
HAWQ-822. Add string replacement utility in feature test framework to support convert from source to sql and ans files
Project: http://git-wip-us.apache.org/repos/asf/incubator-hawq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-hawq/commit/dbf32f1b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/dbf32f1b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/dbf32f1b
Branch: refs/heads/master
Commit: dbf32f1b756f78e3fb6fb416bae8e104cd5d6792
Parents: 76260cd
Author: Ruilong Huo <rh...@pivotal.io>
Authored: Wed Jun 15 23:26:57 2016 +0800
Committer: Ruilong Huo <rh...@pivotal.io>
Committed: Thu Jun 16 12:16:06 2016 +0800
----------------------------------------------------------------------
src/test/feature/lib/file_replace.cpp | 55 ++++++++++++++++++++
src/test/feature/lib/file_replace.h | 29 +++++++++++
.../feature/testlib/ans/template.ans.source | 22 ++++++++
src/test/feature/testlib/sql/template.csv | 2 +
.../feature/testlib/sql/template.sql.source | 11 ++++
src/test/feature/testlib/test_lib.cpp | 23 ++++++++
6 files changed, 142 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/dbf32f1b/src/test/feature/lib/file_replace.cpp
----------------------------------------------------------------------
diff --git a/src/test/feature/lib/file_replace.cpp b/src/test/feature/lib/file_replace.cpp
new file mode 100644
index 0000000..f8685ac
--- /dev/null
+++ b/src/test/feature/lib/file_replace.cpp
@@ -0,0 +1,55 @@
+#include <iostream>
+#include <fstream>
+
+#include "file_replace.h"
+
+using std::string;
+using std::unordered_map;
+using std::getline;
+using std::endl;
+using std::ifstream;
+using std::ofstream;
+
+namespace hawq {
+namespace test {
+
+string FileReplace::replaceAllOccurrences(
+ string str,
+ const string& src,
+ const string& dst)
+{
+ size_t start_pos = 0;
+ while ((start_pos = str.find(src, start_pos)) != string::npos)
+ {
+ str.replace(start_pos, src.length(), dst);
+ start_pos += dst.length();
+ }
+
+ return str;
+}
+
+void FileReplace::replace(
+ const string& file_src,
+ const string& file_dst,
+ const unordered_map<string, string>& strs_src_dst)
+{
+ ifstream fin(file_src);
+ ofstream fout(file_dst);
+ string line;
+
+ while ( getline(fin, line) )
+ {
+ for(auto & mit : strs_src_dst)
+ {
+ line = replaceAllOccurrences(line, mit.first, mit.second);
+ }
+
+ fout << line << endl;
+ }
+
+ fin.close();
+ fout.close();
+}
+
+} // namespace test
+} // namespace hawq
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/dbf32f1b/src/test/feature/lib/file_replace.h
----------------------------------------------------------------------
diff --git a/src/test/feature/lib/file_replace.h b/src/test/feature/lib/file_replace.h
new file mode 100644
index 0000000..47d4f92
--- /dev/null
+++ b/src/test/feature/lib/file_replace.h
@@ -0,0 +1,29 @@
+#ifndef SRC_TEST_FEATURE_LIB_FILE_REPLACE_H_
+#define SRC_TEST_FEATURE_LIB_FILE_REPLACE_H_
+
+#include <string>
+#include <unordered_map>
+
+namespace hawq {
+namespace test {
+
+class FileReplace
+{
+public:
+ FileReplace() = default;
+ ~FileReplace() = default;
+ FileReplace(const FileReplace&) = delete;
+ FileReplace& operator=(const FileReplace&) = delete;
+
+ void replace(const std::string& file_src,
+ const std::string& file_dst,
+ const std::unordered_map<std::string, std::string>& strs_src_dst);
+
+private:
+ std::string replaceAllOccurrences(std::string str, const std::string& src, const std::string& dst);
+};
+
+} // namespace test
+} // namespace hawq
+
+#endif // SRC_TEST_FEATURE_LIB_FILE_REPLACE_H_
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/dbf32f1b/src/test/feature/testlib/ans/template.ans.source
----------------------------------------------------------------------
diff --git a/src/test/feature/testlib/ans/template.ans.source b/src/test/feature/testlib/ans/template.ans.source
new file mode 100644
index 0000000..36aa533
--- /dev/null
+++ b/src/test/feature/testlib/ans/template.ans.source
@@ -0,0 +1,22 @@
+-- start_ignore
+SET SEARCH_PATH=TestCommonLib_TestFileReplace;
+SET
+-- end_ignore
+-- start_ignore
+DROP TABLE IF EXISTS persons;
+psql:/tmp/TestCommonLib_TestFileReplace.sql:5: NOTICE: table "persons" does not exist, skipping
+DROP TABLE
+-- end_ignore
+CREATE TABLE persons(id INT, name VARCHAR);
+CREATE TABLE
+COPY persons (id, name) FROM '@ABS_FEATURE_TEST_ROOT@/testlib/sql/template.csv' DELIMITER ',' CSV;
+COPY 2
+SELECT * FROM persons ORDER BY id;
+ id | name
+----+-------
+ 1 | Aiken
+ 2 | Zack
+(2 rows)
+
+DROP TABLE IF EXISTS persons;
+DROP TABLE
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/dbf32f1b/src/test/feature/testlib/sql/template.csv
----------------------------------------------------------------------
diff --git a/src/test/feature/testlib/sql/template.csv b/src/test/feature/testlib/sql/template.csv
new file mode 100644
index 0000000..e5f5820
--- /dev/null
+++ b/src/test/feature/testlib/sql/template.csv
@@ -0,0 +1,2 @@
+1,Aiken
+2,Zack
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/dbf32f1b/src/test/feature/testlib/sql/template.sql.source
----------------------------------------------------------------------
diff --git a/src/test/feature/testlib/sql/template.sql.source b/src/test/feature/testlib/sql/template.sql.source
new file mode 100644
index 0000000..bb767d8
--- /dev/null
+++ b/src/test/feature/testlib/sql/template.sql.source
@@ -0,0 +1,11 @@
+-- start_ignore
+DROP TABLE IF EXISTS persons;
+-- end_ignore
+
+CREATE TABLE persons(id INT, name VARCHAR);
+
+COPY persons (id, name) FROM '@ABS_FEATURE_TEST_ROOT@/testlib/sql/template.csv' DELIMITER ',' CSV;
+
+SELECT * FROM persons ORDER BY id;
+
+DROP TABLE IF EXISTS persons;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/dbf32f1b/src/test/feature/testlib/test_lib.cpp
----------------------------------------------------------------------
diff --git a/src/test/feature/testlib/test_lib.cpp b/src/test/feature/testlib/test_lib.cpp
index 3b18b11..98b90d2 100644
--- a/src/test/feature/testlib/test_lib.cpp
+++ b/src/test/feature/testlib/test_lib.cpp
@@ -11,6 +11,7 @@
#include "lib/hawq_config.h"
#include "lib/sql_util.h"
#include "lib/string_util.h"
+#include "lib/file_replace.h"
#include "gtest/gtest.h"
@@ -99,3 +100,25 @@ TEST_F(TestCommonLib, TestDataGenerator) {
dGen.genTableWithNull("tNull");
}
+
+TEST_F(TestCommonLib, TestFileReplace) {
+ // prepare file names
+ hawq::test::SQLUtility util;
+ std::string d_feature_test_root(util.getTestRootPath());
+ std::string f_sql_tpl(d_feature_test_root + "/testlib/sql/template.sql.source");
+ std::string f_ans_tpl(d_feature_test_root + "/testlib/ans/template.ans.source");
+ std::string f_sql(d_feature_test_root + "/testlib/sql/template.sql");
+ std::string f_ans(d_feature_test_root + "/testlib/ans/template.ans");
+
+ // preprocess source files to get sql/ans files
+ hawq::test::FileReplace frep;
+ std::unordered_map<std::string, std::string> strs_src_dst;
+ strs_src_dst.insert(std::make_pair("@ABS_FEATURE_TEST_ROOT@", d_feature_test_root));
+
+ frep.replace(f_sql_tpl, f_sql, strs_src_dst);
+ frep.replace(f_ans_tpl, f_ans, strs_src_dst);
+
+ // run sql file to get ans file and then diff it with out file
+ util.execSQLFile("testlib/sql/template.sql",
+ "testlib/ans/template.ans");
+}