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