1 /*
2 *
3 * test-packet.c
4 *
5 * March 06, 2016 Yauheni Kaliuta
6 *
7 */
8 #include "fidogate.h"
9 #include <cgreen/cgreen.h>
10 #include <stdio.h>
11
12 static FILE *f;
13 static char buf[64];
14 static int n;
15
16 #define ERROR (-1)
17
setup_sized_file(char * buf,size_t size)18 static void setup_sized_file(char *buf, size_t size)
19 {
20 f = fmemopen(buf, size, "rb");
21 assert_that(f, is_not_equal_to(NULL));
22 }
23
setup_file(char * buf)24 static void setup_file(char *buf)
25 {
26 size_t size = strlen(buf) + 1;
27
28 setup_sized_file(buf, size);
29 }
30
setup_empty_file(void)31 static void setup_empty_file(void)
32 {
33 /* looks like fmemopen() doesn't accept size 0 */
34 setup_file("");
35 fgetc(f);
36 }
37
Ensure(getstring_reads_normal_string)38 Ensure(getstring_reads_normal_string)
39 {
40 char str[] = "string";
41 char exp[] = "string";
42
43 setup_file(str);
44
45 /* so, it returns number bytes read */
46 n = pkt_get_string(f, buf, sizeof(buf));
47
48 assert_that(n, is_equal_to(strlen(exp) + 1));
49 assert_that(buf, is_equal_to_string(exp));
50 }
51
Ensure(getstring_reads_empty_string)52 Ensure(getstring_reads_empty_string)
53 {
54 char str[] = "";
55 char exp[] = "";
56
57 setup_file(str);
58
59 /* so, it returns number bytes read */
60 n = pkt_get_string(f, buf, sizeof(buf));
61
62 assert_that(n, is_equal_to(strlen(exp) + 1));
63 assert_that(buf, is_equal_to_string(exp));
64 }
65
Ensure(getstring_reads_empty_file)66 Ensure(getstring_reads_empty_file)
67 {
68 setup_empty_file();
69
70 n = pkt_get_string(f, buf, sizeof(buf));
71
72 assert_that(n, is_equal_to(0));
73 }
74
Ensure(getstring_handles_eof)75 Ensure(getstring_handles_eof)
76 {
77 char str[] = "verybigstring";
78 size_t file_len = strlen(str) / 2;
79
80 setup_sized_file(str, file_len);
81
82 n = pkt_get_string(f, buf, sizeof(buf));
83
84 assert_that(n, is_equal_to(file_len));
85 }
86
Ensure(getstring_handles_small_buffer)87 Ensure(getstring_handles_small_buffer)
88 {
89 char str[] = "verybigstring";
90 char exp[] = "very" "aaaaa";
91 size_t buf_len = sizeof("very"); /* 5 */
92
93 setup_file(str);
94 memcpy(buf, exp, sizeof(exp));
95
96 n = pkt_get_string(f, buf, buf_len);
97
98 assert_that(n, is_equal_to(strlen(str) + 1));
99 assert_that(buf + buf_len,
100 is_equal_to_string(exp + buf_len));
101 }
102
Ensure(getstring_handles_empty_buffer)103 Ensure(getstring_handles_empty_buffer)
104 {
105 char str[] = "string";
106 char exp[] = "another string";
107 int buf_len = 0; /* ! */
108
109 setup_file(str);
110 memcpy(buf, exp, sizeof(exp));
111
112 n = pkt_get_string(f, buf, buf_len);
113
114 assert_that(n, is_equal_to(ERROR));
115 assert_that(buf,
116 is_equal_to_contents_of(exp, sizeof(exp)));
117 }
118
get_string_teardown(void)119 static void get_string_teardown(void)
120 {
121 if (f != NULL)
122 fclose(f);
123 f = NULL;
124 }
125
create_get_string_suite(void)126 static TestSuite *create_get_string_suite(void)
127 {
128 TestSuite *suite = create_named_test_suite(
129 "packet_get_string suite");
130
131 /* the next fails */
132 /* add_test(suite, getstring_handles_empty_buffer); */
133 add_test(suite, getstring_handles_small_buffer);
134 add_test(suite, getstring_handles_eof);
135 add_test(suite, getstring_reads_empty_file);
136 add_test(suite, getstring_reads_empty_string);
137 add_test(suite, getstring_reads_normal_string);
138
139 set_teardown(suite, get_string_teardown);
140
141 return suite;
142 }
143
create_packet_suite(void)144 static TestSuite *create_packet_suite(void)
145 {
146 TestSuite *suite = create_named_test_suite(
147 "Packet suite");
148 TestSuite *get_string_suite = create_get_string_suite();
149
150 add_suite(suite, get_string_suite);
151
152 return suite;
153 }
154
main(int argc,char ** argv)155 int main(int argc, char **argv) {
156 TestSuite *suite = create_packet_suite();
157 return run_test_suite(suite, create_text_reporter());
158 }
159