3 #include "lock-tracking.h"
5 #define fcntl fcntl_with_lockcheck
6 #include "ntdb-source.h"
8 #include "tap-interface.h"
12 #include "external-agent.h"
15 #define TEST_DBNAME "run-lockall.ntdb"
20 int main(int argc
, char *argv
[])
23 int flags
[] = { NTDB_DEFAULT
, NTDB_NOMMAP
,
24 NTDB_CONVERT
, NTDB_NOMMAP
|NTDB_CONVERT
};
27 plan_tests(13 * sizeof(flags
)/sizeof(flags
[0]) + 1);
28 agent
= prepare_external_agent();
30 err(1, "preparing agent");
32 for (i
= 0; i
< sizeof(flags
)/sizeof(flags
[0]); i
++) {
33 enum agent_return ret
;
34 struct ntdb_context
*ntdb
;
36 ntdb
= ntdb_open(TEST_DBNAME
, flags
[i
]|MAYBE_NOSYNC
,
37 O_RDWR
|O_CREAT
|O_TRUNC
, 0600, &tap_log_attr
);
40 ret
= external_agent_operation(agent
, OPEN
, TEST_DBNAME
);
43 ok1(ntdb_lockall(ntdb
) == NTDB_SUCCESS
);
44 ok1(external_agent_operation(agent
, STORE
, KEY_STR
"=" KEY_STR
)
45 == WOULD_HAVE_BLOCKED
);
46 ok1(external_agent_operation(agent
, FETCH
, KEY_STR
"=" KEY_STR
)
47 == WOULD_HAVE_BLOCKED
);
49 ok1(ntdb_lockall(ntdb
) == NTDB_SUCCESS
);
53 ok1(external_agent_operation(agent
, STORE
, KEY_STR
"=" KEY_STR
)
56 ok1(ntdb_lockall_read(ntdb
) == NTDB_SUCCESS
);
57 ok1(external_agent_operation(agent
, STORE
, KEY_STR
"=" KEY_STR
)
58 == WOULD_HAVE_BLOCKED
);
59 ok1(external_agent_operation(agent
, FETCH
, KEY_STR
"=" KEY_STR
)
61 ok1(ntdb_lockall_read(ntdb
) == NTDB_SUCCESS
);
62 ntdb_unlockall_read(ntdb
);
63 ntdb_unlockall_read(ntdb
);
65 ok1(external_agent_operation(agent
, STORE
, KEY_STR
"=" KEY_STR
)
67 ok1(external_agent_operation(agent
, CLOSE
, NULL
) == SUCCESS
);
71 free_external_agent(agent
);
72 ok1(tap_log_messages
== 0);