hawq-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From h...@apache.org
Subject incubator-hawq git commit: HAWQ-822. Add string replacement utility in feature test framework to support convert from source to sql and ans files
Date Thu, 16 Jun 2016 04:15:01 GMT
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 <rhuo@pivotal.io>
Authored: Wed Jun 15 23:26:57 2016 +0800
Committer: Ruilong Huo <rhuo@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");
+}


Mime
View raw message