/*
protocol tests - eventd protocol
Copyright (C) Amitay Isaacs 2017
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see .
*/
#include "replace.h"
#include "system/network.h"
#include
#include "tests/src/protocol_common.h"
#include "tests/src/protocol_common_event.h"
/*
* Functions to fill and verify eventd protocol structures
*/
void fill_ctdb_event_request_run(TALLOC_CTX *mem_ctx,
struct ctdb_event_request_run *p)
{
p->event = rand_int(CTDB_EVENT_MAX);
p->timeout = rand();
fill_ctdb_string(mem_ctx, &p->arg_str);
}
void verify_ctdb_event_request_run(struct ctdb_event_request_run *p1,
struct ctdb_event_request_run *p2)
{
assert(p1->event == p2->event);
assert(p1->timeout == p2->timeout);
verify_ctdb_string(&p1->arg_str, &p2->arg_str);
}
void fill_ctdb_event_request_status(TALLOC_CTX *mem_ctx,
struct ctdb_event_request_status *p)
{
p->event = rand_int(CTDB_EVENT_MAX);
p->state = rand_int(3) + 1;
}
void verify_ctdb_event_request_status(struct ctdb_event_request_status *p1,
struct ctdb_event_request_status *p2)
{
assert(p1->event == p2->event);
assert(p1->state == p2->state);
}
void fill_ctdb_event_request_script_enable(TALLOC_CTX *mem_ctx,
struct ctdb_event_request_script_enable *p)
{
fill_ctdb_string(mem_ctx, &p->script_name);
}
void verify_ctdb_event_request_script_enable(
struct ctdb_event_request_script_enable *p1,
struct ctdb_event_request_script_enable *p2)
{
verify_ctdb_string(&p1->script_name, &p2->script_name);
}
void fill_ctdb_event_request_script_disable(TALLOC_CTX *mem_ctx,
struct ctdb_event_request_script_disable *p)
{
fill_ctdb_string(mem_ctx, &p->script_name);
}
void verify_ctdb_event_request_script_disable(
struct ctdb_event_request_script_disable *p1,
struct ctdb_event_request_script_disable *p2)
{
verify_ctdb_string(&p1->script_name, &p2->script_name);
}
void fill_ctdb_event_reply_status(TALLOC_CTX *mem_ctx,
struct ctdb_event_reply_status *p)
{
if (rand_int(2) == 0) {
p->status = 0;
p->script_list = talloc(mem_ctx, struct ctdb_script_list);
assert(p->script_list != NULL);
fill_ctdb_script_list(mem_ctx, p->script_list);
} else {
p->status = rand32i();
p->script_list = NULL;
}
}
void verify_ctdb_event_reply_status(struct ctdb_event_reply_status *p1,
struct ctdb_event_reply_status *p2)
{
assert(p1->status == p2->status);
if (p1->script_list == NULL) {
assert(p1->script_list == p2->script_list);
} else {
verify_ctdb_script_list(p1->script_list, p2->script_list);
}
}
void fill_ctdb_event_reply_script_list(TALLOC_CTX *mem_ctx,
struct ctdb_event_reply_script_list *p)
{
p->script_list = talloc(mem_ctx, struct ctdb_script_list);
assert(p->script_list != NULL);
fill_ctdb_script_list(mem_ctx, p->script_list);
}
void verify_ctdb_event_reply_script_list(
struct ctdb_event_reply_script_list *p1,
struct ctdb_event_reply_script_list *p2)
{
verify_ctdb_script_list(p1->script_list, p2->script_list);
}
void fill_ctdb_event_request_data(TALLOC_CTX *mem_ctx,
struct ctdb_event_request_data *r,
uint32_t command)
{
r->command = command;
switch (command) {
case CTDB_EVENT_COMMAND_RUN:
r->data.run = talloc(mem_ctx, struct ctdb_event_request_run);
assert(r->data.run != NULL);
fill_ctdb_event_request_run(mem_ctx, r->data.run);
break;
case CTDB_EVENT_COMMAND_STATUS:
r->data.status = talloc(mem_ctx,
struct ctdb_event_request_status);
assert(r->data.status != NULL);
fill_ctdb_event_request_status(mem_ctx, r->data.status);
break;
case CTDB_EVENT_COMMAND_SCRIPT_LIST:
break;
case CTDB_EVENT_COMMAND_SCRIPT_ENABLE:
r->data.script_enable = talloc(mem_ctx,
struct ctdb_event_request_script_enable);
assert(r->data.script_enable != NULL);
fill_ctdb_event_request_script_enable(mem_ctx,
r->data.script_enable);
break;
case CTDB_EVENT_COMMAND_SCRIPT_DISABLE:
r->data.script_disable = talloc(mem_ctx,
struct ctdb_event_request_script_disable);
assert(r->data.script_disable != NULL);
fill_ctdb_event_request_script_disable(mem_ctx,
r->data.script_disable);
break;
}
}
void verify_ctdb_event_request_data(struct ctdb_event_request_data *r,
struct ctdb_event_request_data *r2)
{
assert(r->command == r2->command);
switch (r->command) {
case CTDB_EVENT_COMMAND_RUN:
verify_ctdb_event_request_run(r->data.run, r2->data.run);
break;
case CTDB_EVENT_COMMAND_STATUS:
verify_ctdb_event_request_status(r->data.status,
r2->data.status);
break;
case CTDB_EVENT_COMMAND_SCRIPT_LIST:
break;
case CTDB_EVENT_COMMAND_SCRIPT_ENABLE:
verify_ctdb_event_request_script_enable(r->data.script_enable,
r2->data.script_enable);
break;
case CTDB_EVENT_COMMAND_SCRIPT_DISABLE:
verify_ctdb_event_request_script_disable(r->data.script_disable,
r2->data.script_disable);
break;
}
}
void fill_ctdb_event_reply_data(TALLOC_CTX *mem_ctx,
struct ctdb_event_reply_data *r,
uint32_t command)
{
r->command = command;
r->result = rand32i();
switch (command) {
case CTDB_EVENT_COMMAND_STATUS:
r->data.status = talloc(mem_ctx,
struct ctdb_event_reply_status);
assert(r->data.status != NULL);
fill_ctdb_event_reply_status(mem_ctx, r->data.status);
break;
case CTDB_EVENT_COMMAND_SCRIPT_LIST:
r->data.script_list = talloc(mem_ctx,
struct ctdb_event_reply_script_list);
assert(r->data.script_list != NULL);
fill_ctdb_event_reply_script_list(mem_ctx,
r->data.script_list);
break;
}
}
void verify_ctdb_event_reply_data(struct ctdb_event_reply_data *r,
struct ctdb_event_reply_data *r2)
{
assert(r->command == r2->command);
assert(r->result == r2->result);
switch (r->command) {
case CTDB_EVENT_COMMAND_RUN:
break;
case CTDB_EVENT_COMMAND_STATUS:
verify_ctdb_event_reply_status(r->data.status,
r2->data.status);
break;
case CTDB_EVENT_COMMAND_SCRIPT_LIST:
verify_ctdb_event_reply_script_list(r->data.script_list,
r2->data.script_list);
break;
case CTDB_EVENT_COMMAND_SCRIPT_ENABLE:
break;
case CTDB_EVENT_COMMAND_SCRIPT_DISABLE:
break;
}
}
void fill_ctdb_event_request(TALLOC_CTX *mem_ctx,
struct ctdb_event_request *r, uint32_t command)
{
fill_sock_packet_header(&r->header);
fill_ctdb_event_request_data(mem_ctx, &r->rdata, command);
}
void verify_ctdb_event_request(struct ctdb_event_request *r,
struct ctdb_event_request *r2)
{
verify_sock_packet_header(&r->header, &r2->header);
verify_ctdb_event_request_data(&r->rdata, &r2->rdata);
}
void fill_ctdb_event_reply(TALLOC_CTX *mem_ctx, struct ctdb_event_reply *r,
uint32_t command)
{
fill_sock_packet_header(&r->header);
fill_ctdb_event_reply_data(mem_ctx, &r->rdata, command);
}
void verify_ctdb_event_reply(struct ctdb_event_reply *r,
struct ctdb_event_reply *r2)
{
verify_sock_packet_header(&r->header, &r2->header);
verify_ctdb_event_reply_data(&r->rdata, &r2->rdata);
}