test_ModuleSQL.cpp 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. #include <gtest/gtest.h>
  2. #include <json.hpp>
  3. #include <filesystem>
  4. //#define private public
  5. #include <ModuleSQL.h>
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <sqlite3.h>
  9. using namespace mdd;
  10. /*
  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. TEST(ModuleSQL, TestSQL) {
  80. if (!std::filesystem::exists("../../../lib/test/db/materials.db")) {
  81. create_test_db();
  82. }
  83. sqlite3* db;
  84. char* zErrMsg = 0;
  85. int rc;
  86. char* sql;
  87. const char* data = "Callback function called";
  88. // Open database
  89. rc = sqlite3_open("../../../lib/test/db/materials.db", &db);
  90. if (rc) {
  91. fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
  92. return;
  93. }
  94. else {
  95. fprintf(stderr, "Opened database successfully\n");
  96. }
  97. // Create SQL statement
  98. sql = "SELECT * from MATERIAL";
  99. // Execute SQL statement
  100. rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
  101. if (rc != SQLITE_OK) {
  102. fprintf(stderr, "SQL error: %s\n", zErrMsg);
  103. sqlite3_free(zErrMsg);
  104. }
  105. else {
  106. fprintf(stdout, "Operation done successfully\n");
  107. }
  108. sqlite3_close(db);
  109. EXPECT_TRUE(std::filesystem::exists("../../../lib/test/db/materials.db"));
  110. }
  111. TEST(ModuleSQL, TestGetSQLTableStructure) {
  112. if (!std::filesystem::exists("../../../lib/test/db/materials.db")) {
  113. create_test_db();
  114. }
  115. sqlite3* db;
  116. char* zErrMsg = 0;
  117. int rc;
  118. char* sql;
  119. const char* data = "Callback function called";
  120. // Open database
  121. rc = sqlite3_open("../../../lib/test/db/materials.db", &db);
  122. if (rc) {
  123. fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
  124. return;
  125. }
  126. else {
  127. fprintf(stderr, "Opened database successfully\n");
  128. }
  129. // Create SQL statement
  130. sql = "SELECT * "\
  131. "FROM sqlite_master "\
  132. "WHERE type = 'table' ";
  133. // Execute SQL statement
  134. rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
  135. if (rc != SQLITE_OK) {
  136. fprintf(stderr, "SQL error: %s\n", zErrMsg);
  137. sqlite3_free(zErrMsg);
  138. }
  139. else {
  140. fprintf(stdout, "Operation done successfully\n");
  141. }
  142. sqlite3_close(db);
  143. EXPECT_TRUE(std::filesystem::exists("../../../lib/test/db/materials.db"));
  144. }
  145. TEST(ModuleSQL, OpenDB) {
  146. if (!std::filesystem::exists("../../../lib/test/db/materials.db")) {
  147. create_test_db();
  148. }
  149. ModuleSQL module = ModuleSQL("../../../lib/test/db/materials.db");
  150. module.update();
  151. EXPECT_TRUE(std::filesystem::exists("../../../lib/test/db/materials.db"));
  152. }
  153. TEST(ModuleSQL, TestDataExists) {
  154. if (!std::filesystem::exists("../../../lib/test/db/materials.db")) {
  155. create_test_db();
  156. }
  157. sqlite3* db;
  158. char* zErrMsg = 0;
  159. int rc;
  160. char* sql;
  161. const char* data = "Callback function called";
  162. // Open database
  163. rc = sqlite3_open("../../../lib/test/db/materials.db", &db);
  164. if (rc) {
  165. fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
  166. return;
  167. }
  168. else {
  169. fprintf(stderr, "Opened database successfully\n");
  170. }
  171. // Create SQL statement
  172. sql = "SELECT * from MATERIAL";
  173. // Execute SQL statement
  174. rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
  175. if (rc != SQLITE_OK) {
  176. fprintf(stderr, "SQL error: %s\n", zErrMsg);
  177. sqlite3_free(zErrMsg);
  178. }
  179. else {
  180. fprintf(stdout, "Operation done successfully\n");
  181. }
  182. sqlite3_close(db);
  183. EXPECT_TRUE(std::filesystem::exists("../../../lib/test/db/materials.db"));
  184. }
  185. //*/