api-add-remove-flags.c 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include "../private.h" // for ntdb_context
  2. #include "../ntdb.h"
  3. #include "tap-interface.h"
  4. #include "logging.h"
  5. #include "helpapi-external-agent.h"
  6. int main(int argc, char *argv[])
  7. {
  8. unsigned int i;
  9. struct ntdb_context *ntdb;
  10. int flags[] = { NTDB_INTERNAL, NTDB_DEFAULT, NTDB_NOMMAP,
  11. NTDB_INTERNAL|NTDB_CONVERT, NTDB_CONVERT,
  12. NTDB_NOMMAP|NTDB_CONVERT };
  13. plan_tests(87);
  14. for (i = 0; i < sizeof(flags) / sizeof(flags[0]); i++) {
  15. ntdb = ntdb_open("run-add-remove-flags.ntdb",
  16. flags[i]|MAYBE_NOSYNC,
  17. O_RDWR|O_CREAT|O_TRUNC, 0600, &tap_log_attr);
  18. ok1(ntdb);
  19. if (!ntdb)
  20. continue;
  21. ok1(ntdb_get_flags(ntdb) == ntdb->flags);
  22. tap_log_messages = 0;
  23. ntdb_add_flag(ntdb, NTDB_NOLOCK);
  24. if (flags[i] & NTDB_INTERNAL)
  25. ok1(tap_log_messages == 1);
  26. else {
  27. ok1(tap_log_messages == 0);
  28. ok1(ntdb_get_flags(ntdb) & NTDB_NOLOCK);
  29. }
  30. tap_log_messages = 0;
  31. ntdb_add_flag(ntdb, NTDB_NOMMAP);
  32. if (flags[i] & NTDB_INTERNAL)
  33. ok1(tap_log_messages == 1);
  34. else {
  35. ok1(tap_log_messages == 0);
  36. ok1(ntdb_get_flags(ntdb) & NTDB_NOMMAP);
  37. ok1(ntdb->file->map_ptr == NULL);
  38. }
  39. tap_log_messages = 0;
  40. ntdb_add_flag(ntdb, NTDB_NOSYNC);
  41. if (flags[i] & NTDB_INTERNAL)
  42. ok1(tap_log_messages == 1);
  43. else {
  44. ok1(tap_log_messages == 0);
  45. ok1(ntdb_get_flags(ntdb) & NTDB_NOSYNC);
  46. }
  47. ok1(ntdb_get_flags(ntdb) == ntdb->flags);
  48. tap_log_messages = 0;
  49. ntdb_remove_flag(ntdb, NTDB_NOLOCK);
  50. if (flags[i] & NTDB_INTERNAL)
  51. ok1(tap_log_messages == 1);
  52. else {
  53. ok1(tap_log_messages == 0);
  54. ok1(!(ntdb_get_flags(ntdb) & NTDB_NOLOCK));
  55. }
  56. tap_log_messages = 0;
  57. ntdb_remove_flag(ntdb, NTDB_NOMMAP);
  58. if (flags[i] & NTDB_INTERNAL)
  59. ok1(tap_log_messages == 1);
  60. else {
  61. ok1(tap_log_messages == 0);
  62. ok1(!(ntdb_get_flags(ntdb) & NTDB_NOMMAP));
  63. ok1(ntdb->file->map_ptr != NULL);
  64. }
  65. tap_log_messages = 0;
  66. ntdb_remove_flag(ntdb, NTDB_NOSYNC);
  67. if (flags[i] & NTDB_INTERNAL)
  68. ok1(tap_log_messages == 1);
  69. else {
  70. ok1(tap_log_messages == 0);
  71. ok1(!(ntdb_get_flags(ntdb) & NTDB_NOSYNC));
  72. }
  73. ntdb_close(ntdb);
  74. }
  75. ok1(tap_log_messages == 0);
  76. return exit_status();
  77. }