good for merge..  Would be helpful if we could add nss as conditional in
future patches - plan is to remove crypto v0 (sober) mode entirely from
trunk.

On Thu, 2010-03-18 at 08:58 +1100, Angus Salkeld wrote:
> Improve the message order test to include hashing of the
> message body and sending a range of sizes.
> 
> -Angus
> 
> Signed-off-by: Angus Salkeld <[email protected]>
> ---
>  cts/agents/Makefile.am      |    2 +-
>  cts/agents/cpg_test_agent.c |   82 +++++++++++++++++++++++++++++++++++-------
>  2 files changed, 69 insertions(+), 15 deletions(-)
> 
> diff --git a/cts/agents/Makefile.am b/cts/agents/Makefile.am
> index ff27b56..8ae7ee7 100644
> --- a/cts/agents/Makefile.am
> +++ b/cts/agents/Makefile.am
> @@ -43,7 +43,7 @@ noinst_PROGRAMS = $(TEST_AGENTS)
>  noinst_SCRIPTS = mem_leak_test.sh net_breaker.sh
>  endif
>  
> -cpg_test_agent_LDADD =  -lcpg -lcoroipcc ../../exec/coropoll.o
> +cpg_test_agent_LDADD =  -lcpg -lcoroipcc ../../exec/coropoll.o 
> ../../exec/crypto.o
>  cpg_test_agent_LDFLAGS =  -L../../lib
>  
>  lint:
> diff --git a/cts/agents/cpg_test_agent.c b/cts/agents/cpg_test_agent.c
> index 593aadc..9db370d 100644
> --- a/cts/agents/cpg_test_agent.c
> +++ b/cts/agents/cpg_test_agent.c
> @@ -50,6 +50,7 @@
>  #include <corosync/totem/coropoll.h>
>  #include <corosync/list.h>
>  #include <corosync/cpg.h>
> +#include "../../exec/crypto.h"
>  
> 
>  #define SERVER_PORT "9034"
> @@ -60,16 +61,16 @@ typedef enum {
>       MSG_PID_ERR,
>       MSG_SEQ_ERR,
>       MSG_SIZE_ERR,
> -     MSG_HASH_ERR,
> +     MSG_SHA1_ERR,
>  } msg_status_t;
>  
>  typedef struct {
>       uint32_t nodeid;
>       pid_t   pid;
> -     uint32_t hash;
> +     unsigned char sha1[20];
>       uint32_t seq;
>       size_t size;
> -     char payload[1];
> +     unsigned char payload[0];
>  } msg_t;
>  
>  #define LOG_STR_SIZE 256
> @@ -95,6 +96,37 @@ static int32_t my_msgs_to_send;
>  static int32_t total_stored_msgs = 0;
>  static hdb_handle_t poll_handle;
>  
> +static char* err_status_string (char * buf, size_t buf_len, msg_status_t 
> status)
> +{
> +     switch (status) {
> +     case MSG_OK:
> +             strncpy (buf, "OK", buf_len);
> +             return buf;
> +             break;
> +     case MSG_NODEID_ERR:
> +             strncpy (buf, "NODEID_ERR", buf_len);
> +             return buf;
> +             break;
> +     case MSG_PID_ERR:
> +             strncpy (buf, "PID_ERR", buf_len);
> +             return buf;
> +             break;
> +     case MSG_SEQ_ERR:
> +             strncpy (buf, "SEQ_ERR", buf_len);
> +             return buf;
> +             break;
> +     case MSG_SIZE_ERR:
> +             strncpy (buf, "SIZE_ERR", buf_len);
> +             return buf;
> +             break;
> +     case MSG_SHA1_ERR:
> +     default:
> +             strncpy (buf, "SHA1_ERR", buf_len);
> +             return buf;
> +             break;
> +     }
> +
> +}
>  
>  static void delivery_callback (
>       cpg_handle_t handle,
> @@ -107,6 +139,9 @@ static void delivery_callback (
>       log_entry_t *log_pt;
>       msg_t *msg_pt = (msg_t*)msg;
>       msg_status_t status = MSG_OK;
> +     char status_buf[20];
> +     unsigned char sha1_compare[20];
> +     hash_state sha1_hash;
>  
>       if (record_messages_g == 0) {
>               return;
> @@ -124,13 +159,21 @@ static void delivery_callback (
>       if (msg_len != msg_pt->size) {
>               status = MSG_SIZE_ERR;
>       }
> -     /* TODO: check hash here.
> -     */
> +     sha1_init (&sha1_hash);
> +     sha1_process (&sha1_hash, msg_pt->payload, msg_pt->size);
> +     sha1_done (&sha1_hash, sha1_compare);
> +     if (memcmp (sha1_compare, msg_pt->sha1, 20) != 0) {
> +             syslog (LOG_ERR, "%s(); msg seq:%d; incorrect hash",
> +                     __func__, msg_pt->seq);
> +             status = MSG_SHA1_ERR;
> +     }
>  
>       log_pt = malloc (sizeof(log_entry_t));
>       list_init (&log_pt->list);
> -     snprintf (log_pt->log, LOG_STR_SIZE, "%d:%d:%d:%d;",
> -             msg_pt->nodeid, msg_pt->pid, msg_pt->seq, status);
> +
> +     snprintf (log_pt->log, LOG_STR_SIZE, "%d:%d:%d:%s;",
> +             msg_pt->nodeid, msg_pt->pid, msg_pt->seq,
> +             err_status_string (status_buf, 20, status));
>       list_add_tail (&log_pt->list, &msg_log_head);
>       total_stored_msgs++;
>  }
> @@ -242,12 +285,15 @@ static void read_messages (int sock, char* atmost_str)
>       send (sock, big_and_buf, strlen (big_and_buf), 0);
>  }
>  
> +static unsigned char buffer[200000];
>  static void send_some_more_messages (void)
>  {
>       msg_t my_msg;
> -     struct iovec iov[1];
> +     struct iovec iov[2];
>       int i;
>       int send_now;
> +     size_t payload_size;
> +     hash_state sha1_hash;
>       cs_error_t res;
>       cpg_flow_control_state_t fc_state;
>  
> @@ -259,26 +305,34 @@ static void send_some_more_messages (void)
>       syslog (LOG_DEBUG,"%s() send_now:%d", __func__, send_now);
>       my_msg.pid = my_pid;
>       my_msg.nodeid = my_nodeid;
> -     my_msg.hash = 0;
> -     my_msg.size = sizeof (msg_t);
> +     payload_size = (rand() % 100000);
> +     my_msg.size = sizeof (msg_t) + payload_size;
>       my_msg.seq = 0;
> +     for (i = 0; i < payload_size; i++) {
> +             buffer[i] = i;
> +     }
> +     sha1_init (&sha1_hash);
> +     sha1_process (&sha1_hash, buffer, payload_size);
> +     sha1_done (&sha1_hash, my_msg.sha1);
>  
> -     iov[0].iov_len = my_msg.size;
> +     iov[0].iov_len = sizeof (msg_t);
>       iov[0].iov_base = &my_msg;
> +     iov[1].iov_len = payload_size;
> +     iov[1].iov_base = buffer;
>  
>       for (i = 0; i < send_now; i++) {
>  
>               res = cpg_flow_control_state_get (cpg_handle, &fc_state);
>               if (res == CS_OK && fc_state == CPG_FLOW_CONTROL_ENABLED) {
>                       /* lets do this later */
> -                     syslog (LOG_DEBUG, "%s() flow control enabled.", 
> __func__);
> +                     syslog (LOG_INFO, "%s() flow control enabled.", 
> __func__);
>                       return;
>               }
>  
> -             res = cpg_mcast_joined (cpg_handle, CPG_TYPE_AGREED, iov, 1);
> +             res = cpg_mcast_joined (cpg_handle, CPG_TYPE_AGREED, iov, 2);
>               if (res == CS_ERR_TRY_AGAIN) {
>                       /* lets do this later */
> -                     syslog (LOG_DEBUG, "%s() cpg_mcast_joined() says try 
> again.",
> +                     syslog (LOG_INFO, "%s() cpg_mcast_joined() says try 
> again.",
>                               __func__);
>                       return;
>               } else

_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais

Reply via email to