test_ModuleSQL.cpp 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. #include <gtest/gtest.h>
  2. #include <json.hpp>
  3. #include <filesystem>
  4. //#define private public
  5. #include <Registration.h>
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <sqlite3.h>
  9. #include <windows.h>
  10. #include <string>
  11. #include <iostream>
  12. using namespace mdd;
  13. namespace TEST_MODULE_SQL {
  14. const char* db_path = "../../../../../lib/test/db/materials.db";
  15. std::string ExePath() {
  16. TCHAR buffer[MAX_PATH] = { 0 };
  17. GetModuleFileName(NULL, buffer, MAX_PATH);
  18. std::string::size_type pos = std::string(buffer).find_last_of("\\/");
  19. return std::string(buffer).substr(0, pos);
  20. }
  21. static int callback(void* data, int argc, char** argv, char** azColName) {
  22. int i;
  23. fprintf(stderr, "%s: ", (const char*)data);
  24. for (i = 0; i < argc; i++) {
  25. printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
  26. }
  27. printf("\n");
  28. return 0;
  29. }
  30. void sqlite3_exec_debug(sqlite3* db, char* sql) {
  31. char* zErrMsg = 0;
  32. int rc;
  33. // Execute SQL statement
  34. rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
  35. if (rc != SQLITE_OK) {
  36. fprintf(stderr, "SQL error: %s\n", zErrMsg);
  37. sqlite3_free(zErrMsg);
  38. }
  39. else {
  40. fprintf(stdout, "Table created successfully\n");
  41. }
  42. }
  43. void create_test_db(std::string path) {
  44. sqlite3* db;
  45. int rc;
  46. char* sql;
  47. // Open database
  48. rc = sqlite3_open(path.c_str(), &db);
  49. if (rc) {
  50. fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
  51. return;
  52. }
  53. else {
  54. fprintf(stdout, "Opened database successfully\n");
  55. }
  56. // Create SQL statement
  57. sql = "CREATE TABLE MATERIAL(" \
  58. "ID INTEGER PRIMARY KEY AUTOINCREMENT," \
  59. "NAME TEXT NOT NULL," \
  60. "E11 FLOAT NOT NULL," \
  61. "E22 FLOAT NOT NULL," \
  62. "E33 FLOAT NOT NULL," \
  63. "PR12 FLOAT NOT NULL," \
  64. "PR13 FLOAT NOT NULL," \
  65. "PR23 FLOAT NOT NULL," \
  66. "G12 FLOAT NOT NULL," \
  67. "G13 FLOAT NOT NULL," \
  68. "G23 FLOAT NOT NULL," \
  69. "DENS FLOAT ," \
  70. "ALP11 FLOAT ," \
  71. "ALP22 FLOAT ," \
  72. "ALP33 FLOAT ," \
  73. "K11 FLOAT ," \
  74. "K22 FLOAT ," \
  75. "K33 FLOAT ," \
  76. "BET11 FLOAT ," \
  77. "BET22 FLOAT ," \
  78. "BET33 FLOAT ," \
  79. "D11 FLOAT ," \
  80. "D22 FLOAT ," \
  81. "D33 FLOAT );";
  82. sqlite3_exec_debug(db, sql);
  83. // Create SQL statement
  84. sql = "INSERT INTO MATERIAL ( NAME, E11, E22, E33, PR12, PR13, PR23, G12, G13, G23, DENS, ALP11, ALP22, ALP33, K11, K22, K33, BET11, BET22, BET33, D11, D22, D33) " \
  85. "VALUES ( 'EP-E Glas', 42.5E9, 11E9, 11E9, 0.28, 0.28, 0.28, 4.2E9, 4.2E9, 2.56E9, 1950, 5.7E-6, 45E-6, 45E-6, 0.72E3, 0.5E3, 0.5E3, 0E-3, 4E-3, 4E-3, 4.4E-3, 3.1E-3, 3.1E-3); ";
  86. sqlite3_exec_debug(db, sql);
  87. sqlite3_close(db);
  88. }
  89. auto regi = Registration();
  90. TEST(ModuleSQL, TestSQL) {
  91. if (!std::filesystem::exists(db_path)) {
  92. create_test_db(db_path);
  93. }
  94. sqlite3* db;
  95. char* zErrMsg = 0;
  96. int rc;
  97. char* sql;
  98. const char* data = "Callback function called";
  99. // Open database
  100. rc = sqlite3_open(db_path, &db);
  101. if (rc) {
  102. fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
  103. return;
  104. }
  105. else {
  106. fprintf(stderr, "Opened database successfully\n");
  107. }
  108. // Create SQL statement
  109. sql = "SELECT * from MATERIAL";
  110. // Execute SQL statement
  111. rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
  112. if (rc != SQLITE_OK) {
  113. fprintf(stderr, "SQL error: %s\n", zErrMsg);
  114. sqlite3_free(zErrMsg);
  115. }
  116. else {
  117. fprintf(stdout, "Operation done successfully\n");
  118. }
  119. sqlite3_close(db);
  120. EXPECT_TRUE(std::filesystem::exists(db_path));
  121. }
  122. TEST(ModuleSQL, TestGetSQLTableStructure) {
  123. if (!std::filesystem::exists(db_path)) {
  124. create_test_db(db_path);
  125. }
  126. sqlite3* db;
  127. char* zErrMsg = 0;
  128. int rc;
  129. char* sql;
  130. const char* data = "Callback function called";
  131. // Open database
  132. rc = sqlite3_open(db_path, &db);
  133. if (rc) {
  134. fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
  135. return;
  136. }
  137. else {
  138. fprintf(stderr, "Opened database successfully\n");
  139. }
  140. // Create SQL statement
  141. sql = "SELECT * "\
  142. "FROM sqlite_master "\
  143. "WHERE type = 'table' ";
  144. // Execute SQL statement
  145. rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
  146. if (rc != SQLITE_OK) {
  147. fprintf(stderr, "SQL error: %s\n", zErrMsg);
  148. sqlite3_free(zErrMsg);
  149. }
  150. else {
  151. fprintf(stdout, "Operation done successfully\n");
  152. }
  153. sqlite3_close(db);
  154. EXPECT_TRUE(std::filesystem::exists(db_path));
  155. }
  156. TEST(ModuleSQL, OpenDB) {
  157. if (!std::filesystem::exists(db_path)) {
  158. create_test_db(db_path);
  159. }
  160. std::cout << ExePath() << std::endl;
  161. IModule::Ptr mod = regi.generateModule("ModuleSQL");
  162. json config = mod->getConfiguration();
  163. config["configure"]["database"]["value"] = db_path;
  164. mod->configure(config);
  165. EXPECT_TRUE(std::filesystem::exists(db_path));
  166. }
  167. TEST(ModuleSQL, TestDataExists) {
  168. if (!std::filesystem::exists(db_path)) {
  169. create_test_db(db_path);
  170. }
  171. sqlite3* db;
  172. char* zErrMsg = 0;
  173. int rc;
  174. char* sql;
  175. const char* data = "Callback function called";
  176. // Open database
  177. rc = sqlite3_open(db_path, &db);
  178. if (rc) {
  179. fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
  180. return;
  181. }
  182. else {
  183. fprintf(stderr, "Opened database successfully\n");
  184. }
  185. // Create SQL statement
  186. sql = "SELECT * from MATERIAL";
  187. // Execute SQL statement
  188. rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
  189. if (rc != SQLITE_OK) {
  190. fprintf(stderr, "SQL error: %s\n", zErrMsg);
  191. sqlite3_free(zErrMsg);
  192. }
  193. else {
  194. fprintf(stdout, "Operation done successfully\n");
  195. }
  196. sqlite3_close(db);
  197. EXPECT_TRUE(std::filesystem::exists(db_path));
  198. }
  199. //*/
  200. }