]> git.proxmox.com Git - mirror_corosync.git/blame - test/stress_cpgcontext.c
test: Fix cpgtest
[mirror_corosync.git] / test / stress_cpgcontext.c
CommitLineData
55ac5ee8
SD
1/*
2 * Copyright (c) 2009 Red Hat, Inc.
3 *
4 * All rights reserved.
5 *
6 * Author: Steven Dake (sdake@redhat.com)
7 *
8 * This software licensed under BSD license, the text of which follows:
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions are met:
12 *
13 * - Redistributions of source code must retain the above copyright notice,
14 * this list of conditions and the following disclaimer.
15 * - Redistributions in binary form must reproduce the above copyright notice,
16 * this list of conditions and the following disclaimer in the documentation
17 * and/or other materials provided with the distribution.
18 * - Neither the name of the MontaVista Software, Inc. nor the names of its
19 * contributors may be used to endorse or promote products derived from this
20 * software without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
26 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
32 * THE POSSIBILITY OF SUCH DAMAGE.
33 */
34
35#include <config.h>
36
37#include <stdio.h>
38#include <stdlib.h>
39#include <sys/socket.h>
40#include <netinet/in.h>
41#include <arpa/inet.h>
42#include <errno.h>
43#include <string.h>
44#include <corosync/corotypes.h>
45#include <corosync/cpg.h>
46#include <signal.h>
55ac5ee8
SD
47
48struct my_msg {
49 unsigned int msg_size;
50 unsigned char sha1[20];
51 unsigned char buffer[0];
52};
53
54static void cpg_deliver_fn (
55 cpg_handle_t handle,
56 const struct cpg_name *group_name,
57 uint32_t nodeid,
58 uint32_t pid,
59 void *m,
60 size_t msg_len)
61{
62}
63
64static void cpg_confchg_fn (
65 cpg_handle_t handle,
66 const struct cpg_name *group_name,
67 const struct cpg_address *member_list, size_t member_list_entries,
68 const struct cpg_address *left_list, size_t left_list_entries,
69 const struct cpg_address *joined_list, size_t joined_list_entries)
70{
71}
72
73static cpg_callbacks_t callbacks = {
74 cpg_deliver_fn,
75 cpg_confchg_fn
76};
77
78static void sigintr_handler (int num)
79{
80 exit (1);
81}
82
83#define ITERATIONS (1000000)
84
85#define INSTANCES 100
86
87int main (void)
88{
89 cpg_handle_t handle[INSTANCES];
90 cs_error_t res;
91 void *context[INSTANCES];
92 int i, j;
93 void *ctx;
94
95 signal (SIGINT, sigintr_handler);
96 for (i = 0; i < INSTANCES; i++) {
97 res = cpg_initialize (&handle[i], &callbacks);
98 if (res != CS_OK) {
99 printf ("FAIL %d\n", res);
100 exit (-1);
101 }
102 }
103
104 for (j = 0; j < ITERATIONS; j++) {
105 for (i = 0; i < INSTANCES; i++) {
106 context[i] = malloc (20);
107 res = cpg_context_set (handle[i], context[i]);
108 if (res != CS_OK) {
109 printf ("FAIL %d\n", res);
110 exit (-1);
111 }
112 }
113
114 for (i = 0; i < INSTANCES; i++) {
115 res = cpg_context_get (handle[i], &ctx);
116 if (res != CS_OK) {
117 printf ("FAIL %d\n", res);
118 exit (-1);
119 }
120 if (ctx != context[i]) {
121 printf ("FAIL\n");
122 exit (-1);
123 }
124 free (ctx);
125 }
126 }
127
128 for (i = 0; i < INSTANCES; i++) {
129 cpg_finalize (handle[i]);
130 }
131
132 printf ("PASS\n");
133 return (0);
134}