}
static void ctdb_req_control_data_push(struct ctdb_req_control_data *cd,
- uint8_t *buf)
+ uint8_t *buf, size_t *npush)
{
- size_t np, offset;
+ size_t np = 0, offset;
uint32_t u32;
switch (cd->opcode) {
ctdb_string_push(&cd->data.db_name, buf, &np);
break;
}
+
+ *npush = np;
}
static int ctdb_req_control_data_pull(uint8_t *buf, size_t buflen,
uint32_t opcode,
TALLOC_CTX *mem_ctx,
- struct ctdb_req_control_data *cd)
+ struct ctdb_req_control_data *cd,
+ size_t *npull)
{
- size_t np, offset;
+ size_t np = 0, offset;
uint32_t u32;
int ret = 0;
break;
}
- return ret;
+ if (ret != 0) {
+ return ret;
+ }
+
+ *npull = np;
+ return 0;
}
static size_t ctdb_reply_control_data_len(struct ctdb_reply_control_data *cd)
wire->flags = request->flags;
wire->datalen = ctdb_req_control_data_len(&request->rdata);
- ctdb_req_control_data_push(&request->rdata, wire->data);
+ ctdb_req_control_data_push(&request->rdata, wire->data, &np);
return 0;
}
c->flags = wire->flags;
ret = ctdb_req_control_data_pull(wire->data, wire->datalen,
- c->opcode, mem_ctx, &c->rdata);
+ c->opcode, mem_ctx, &c->rdata, &np);
if (ret != 0) {
return ret;
}
echo
)
+generate_control_output ()
+{
+ for i in $(seq 0 $last_control) ; do
+ echo "$1 $i"
+ done
+}
+
output=$(
echo "ctdb_req_header"
echo "ctdb_req_call"
echo "ctdb_reply_error"
echo "ctdb_req_dmaster"
echo "ctdb_reply_dmaster"
- echo "ctdb_req_control_data"
- echo "$control_output"
+ generate_control_output "ctdb_req_control_data"
echo "ctdb_reply_control_data"
echo "$control_output"
echo "ctdb_req_control"
#define NUM_CONTROLS 151
-static void test_ctdb_req_control_data(void)
-{
- TALLOC_CTX *mem_ctx;
- size_t buflen;
- int ret;
- struct ctdb_req_control_data cd, cd2;
- uint32_t opcode;
-
- printf("ctdb_req_control_data\n");
- fflush(stdout);
-
- for (opcode=0; opcode<NUM_CONTROLS; opcode++) {
- mem_ctx = talloc_new(NULL);
- assert(mem_ctx != NULL);
-
- printf("%u.. ", opcode);
- fflush(stdout);
- fill_ctdb_req_control_data(mem_ctx, &cd, opcode);
- buflen = ctdb_req_control_data_len(&cd);
- ctdb_req_control_data_push(&cd, BUFFER);
- ret = ctdb_req_control_data_pull(BUFFER, buflen, opcode, mem_ctx, &cd2);
- assert(ret == 0);
- verify_ctdb_req_control_data(&cd, &cd2);
- talloc_free(mem_ctx);
- }
-
- printf("\n");
- fflush(stdout);
-}
+PROTOCOL_CTDB2_TEST(struct ctdb_req_control_data, ctdb_req_control_data);
static void test_ctdb_reply_control_data(void)
{
int main(int argc, char *argv[])
{
+ uint32_t opcode;
+
if (argc == 2) {
int seed = atoi(argv[1]);
srandom(seed);
TEST_FUNC(ctdb_req_dmaster)();
TEST_FUNC(ctdb_reply_dmaster)();
- test_ctdb_req_control_data();
+ for (opcode=0; opcode<NUM_CONTROLS; opcode++) {
+ TEST_FUNC(ctdb_req_control_data)(opcode);
+ }
test_ctdb_reply_control_data();
test_ctdb_req_control();