/
api_knet_host_enable_status_change_notify.c
152 lines (116 loc) · 3.71 KB
/
api_knet_host_enable_status_change_notify.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/*
* Copyright (C) 2016 Red Hat, Inc. All rights reserved.
*
* Authors: Fabio M. Di Nitto <fabbione@kronosnet.org>
*
* This software licensed under GPL-2.0+, LGPL-2.0+
*/
#include "config.h"
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "libknet.h"
#include "internals.h"
#include "test-common.h"
static int private_data;
static void host_notify(void *priv_data,
uint16_t host_id,
uint8_t reachable,
uint8_t remote,
uint8_t external)
{
return;
}
static void test(void)
{
knet_handle_t knet_h;
int logfds[2];
printf("Test knet_host_enable_status_change_notify incorrect knet_h\n");
if ((!knet_host_enable_status_change_notify(NULL, NULL, host_notify)) || (errno != EINVAL)) {
printf("knet_host_enable_status_change_notify accepted invalid knet_h or returned incorrect error: %s\n", strerror(errno));
exit(FAIL);
}
setup_logpipes(logfds);
knet_h = knet_handle_new(1, logfds[1], KNET_LOG_DEBUG);
if (!knet_h) {
printf("knet_handle_new failed: %s\n", strerror(errno));
flush_logs(logfds[0], stdout);
close_logpipes(logfds);
exit(FAIL);
}
printf("Test knet_host_enable_status_change_notify with no private_data\n");
if (knet_host_enable_status_change_notify(knet_h, NULL, host_notify) < 0) {
printf("knet_host_enable_status_change_notify failed: %s\n", strerror(errno));
knet_handle_free(knet_h);
flush_logs(logfds[0], stdout);
close_logpipes(logfds);
exit(FAIL);
}
if (knet_h->host_status_change_notify_fn_private_data != NULL) {
printf("knet_host_enable_status_change_notify failed to unset private_data");
knet_handle_free(knet_h);
flush_logs(logfds[0], stdout);
close_logpipes(logfds);
exit(FAIL);
}
flush_logs(logfds[0], stdout);
printf("Test knet_host_enable_status_change_notify with private_data\n");
if (knet_host_enable_status_change_notify(knet_h, &private_data, NULL) < 0) {
printf("knet_host_enable_status_change_notify failed: %s\n", strerror(errno));
knet_handle_free(knet_h);
flush_logs(logfds[0], stdout);
close_logpipes(logfds);
exit(FAIL);
}
if (knet_h->host_status_change_notify_fn_private_data != &private_data) {
printf("knet_host_enable_status_change_notify failed to set private_data");
knet_handle_free(knet_h);
flush_logs(logfds[0], stdout);
close_logpipes(logfds);
exit(FAIL);
}
flush_logs(logfds[0], stdout);
printf("Test knet_host_enable_status_change_notify with no host_notify fn\n");
if (knet_host_enable_status_change_notify(knet_h, NULL, NULL) < 0) {
printf("knet_host_enable_status_change_notify failed: %s\n", strerror(errno));
knet_handle_free(knet_h);
flush_logs(logfds[0], stdout);
close_logpipes(logfds);
exit(FAIL);
}
if (knet_h->host_status_change_notify_fn != NULL) {
printf("knet_host_enable_status_change_notify failed to unset host_notify fn");
knet_handle_free(knet_h);
flush_logs(logfds[0], stdout);
close_logpipes(logfds);
exit(FAIL);
}
flush_logs(logfds[0], stdout);
printf("Test knet_host_enable_status_change_notify with host_notify fn\n");
if (knet_host_enable_status_change_notify(knet_h, NULL, host_notify) < 0) {
printf("knet_host_enable_status_change_notify failed: %s\n", strerror(errno));
knet_handle_free(knet_h);
flush_logs(logfds[0], stdout);
close_logpipes(logfds);
exit(FAIL);
}
if (knet_h->host_status_change_notify_fn != &host_notify) {
printf("knet_host_enable_status_change_notify failed to set host_notify fn");
knet_handle_free(knet_h);
flush_logs(logfds[0], stdout);
close_logpipes(logfds);
exit(FAIL);
}
flush_logs(logfds[0], stdout);
knet_handle_free(knet_h);
flush_logs(logfds[0], stdout);
close_logpipes(logfds);
}
int main(int argc, char *argv[])
{
need_root();
test();
return PASS;
}