test_ModuleSQL.cpp 7.2 KB

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