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