1 #include "common.h"
2 #include "vnstat_tests.h"
3 #include "vnstat_func.h"
4 #include "cfg.h"
5 #include "dbsql.h"
6 #include "cli_tests.h"
7
START_TEST(vnstat_can_init_params)8 START_TEST(vnstat_can_init_params)
9 {
10 PARAMS p;
11
12 initparams(&p);
13 }
14 END_TEST
15
START_TEST(vnstat_showhelp_does_not_crash)16 START_TEST(vnstat_showhelp_does_not_crash)
17 {
18 PARAMS p;
19
20 initparams(&p);
21 strncpy_nt(p.definterface, "ethgone", 32);
22 suppress_output();
23 showhelp(&p);
24 }
25 END_TEST
26
START_TEST(vnstat_showlonghelp_does_not_crash)27 START_TEST(vnstat_showlonghelp_does_not_crash)
28 {
29 PARAMS p;
30
31 initparams(&p);
32 strncpy_nt(p.definterface, "ethgone", 32);
33 suppress_output();
34 showlonghelp(&p);
35 }
36 END_TEST
37
START_TEST(vnstat_handlers_do_nothing_by_default)38 START_TEST(vnstat_handlers_do_nothing_by_default)
39 {
40 PARAMS p, b;
41
42 initparams(&p);
43 memcpy(&b, &p, sizeof(PARAMS));
44 handleremoveinterface(&p);
45 handlerenameinterface(&p);
46 handleaddinterface(&p);
47 handlesetalias(&p);
48 handletrafficmeters(&p);
49 ck_assert_int_eq(memcmp(&p, &b, sizeof(PARAMS)), 0);
50 }
51 END_TEST
52
START_TEST(vnstat_handletrafficmeters_exists_when_interface_is_not_available)53 START_TEST(vnstat_handletrafficmeters_exists_when_interface_is_not_available)
54 {
55 PARAMS p;
56
57 ck_assert_int_eq(remove_directory(TESTDIR), 1);
58 initparams(&p);
59 strncpy_nt(cfg.iface, "ethfoo", 32);
60 strncpy_nt(p.interface, "default", 32);
61 strncpy_nt(p.definterface, cfg.iface, 32);
62 p.livetraffic = 1;
63 suppress_output();
64
65 handletrafficmeters(&p);
66 }
67 END_TEST
68
START_TEST(vnstat_handleremoveinterface_exits_if_no_interface_has_been_specified)69 START_TEST(vnstat_handleremoveinterface_exits_if_no_interface_has_been_specified)
70 {
71 PARAMS p;
72 initparams(&p);
73 p.removeiface = 1;
74
75 suppress_output();
76 handleremoveinterface(&p);
77 }
78 END_TEST
79
START_TEST(vnstat_handleremoveinterface_exits_if_given_interface_does_not_exist)80 START_TEST(vnstat_handleremoveinterface_exits_if_given_interface_does_not_exist)
81 {
82 int ret;
83 PARAMS p;
84
85 initparams(&p);
86 p.removeiface = 1;
87 p.defaultiface = 0;
88 strncpy_nt(p.interface, "unknown", 32);
89
90 ret = db_open_rw(1);
91 ck_assert_int_eq(ret, 1);
92
93 ret = db_addinterface("known");
94 ck_assert_int_eq(ret, 1);
95
96 suppress_output();
97 handleremoveinterface(&p);
98 }
99 END_TEST
100
START_TEST(vnstat_handleremoveinterface_exits_if_force_is_not_used)101 START_TEST(vnstat_handleremoveinterface_exits_if_force_is_not_used)
102 {
103 int ret;
104 PARAMS p;
105
106 initparams(&p);
107 p.removeiface = 1;
108 p.defaultiface = 0;
109 p.force = 0;
110 strncpy_nt(p.interface, "known", 32);
111
112 ret = db_open_rw(1);
113 ck_assert_int_eq(ret, 1);
114
115 ret = db_addinterface("known");
116 ck_assert_int_eq(ret, 1);
117
118 suppress_output();
119 handleremoveinterface(&p);
120 }
121 END_TEST
122
START_TEST(vnstat_handleremoveinterface_removes_interface)123 START_TEST(vnstat_handleremoveinterface_removes_interface)
124 {
125 int ret;
126 PARAMS p;
127
128 initparams(&p);
129 p.removeiface = 1;
130 p.defaultiface = 0;
131 p.force = 1;
132 strncpy_nt(p.interface, "known", 32);
133
134 ret = db_open_rw(1);
135 ck_assert_int_eq(ret, 1);
136
137 ret = db_addinterface("known");
138 ck_assert_int_eq(ret, 1);
139
140 ret = (int)db_getinterfacecountbyname("known");
141 ck_assert_int_eq(ret, 1);
142
143 suppress_output();
144 handleremoveinterface(&p);
145
146 ret = (int)db_getinterfacecountbyname("known");
147 ck_assert_int_eq(ret, 0);
148 }
149 END_TEST
150
START_TEST(vnstat_handlerenameinterface_exits_if_no_interface_has_been_specified)151 START_TEST(vnstat_handlerenameinterface_exits_if_no_interface_has_been_specified)
152 {
153 PARAMS p;
154 initparams(&p);
155 p.renameiface = 1;
156
157 suppress_output();
158 handlerenameinterface(&p);
159 }
160 END_TEST
161
START_TEST(vnstat_handlerenameinterface_exits_if_new_interface_name_is_not_given)162 START_TEST(vnstat_handlerenameinterface_exits_if_new_interface_name_is_not_given)
163 {
164 PARAMS p;
165 initparams(&p);
166 p.renameiface = 1;
167 p.defaultiface = 0;
168
169 suppress_output();
170 handlerenameinterface(&p);
171 }
172 END_TEST
173
START_TEST(vnstat_handlerenameinterface_exits_if_given_interface_does_not_exist)174 START_TEST(vnstat_handlerenameinterface_exits_if_given_interface_does_not_exist)
175 {
176 int ret;
177 PARAMS p;
178
179 initparams(&p);
180 p.renameiface = 1;
181 p.defaultiface = 0;
182 strncpy_nt(p.interface, "oldname", 32);
183 strncpy_nt(p.newifname, "newname", 32);
184
185 ret = db_open_rw(1);
186 ck_assert_int_eq(ret, 1);
187
188 ret = db_addinterface("somename");
189 ck_assert_int_eq(ret, 1);
190
191 suppress_output();
192 handlerenameinterface(&p);
193 }
194 END_TEST
195
START_TEST(vnstat_handlerenameinterface_exits_if_new_interface_name_already_exist)196 START_TEST(vnstat_handlerenameinterface_exits_if_new_interface_name_already_exist)
197 {
198 int ret;
199 PARAMS p;
200
201 initparams(&p);
202 p.renameiface = 1;
203 p.defaultiface = 0;
204 strncpy_nt(p.interface, "oldname", 32);
205 strncpy_nt(p.newifname, "newname", 32);
206
207 ret = db_open_rw(1);
208 ck_assert_int_eq(ret, 1);
209
210 ret = db_addinterface("oldname");
211 ck_assert_int_eq(ret, 1);
212
213 ret = db_addinterface("newname");
214 ck_assert_int_eq(ret, 1);
215
216 suppress_output();
217 handlerenameinterface(&p);
218 }
219 END_TEST
220
START_TEST(vnstat_handlerenameinterface_exits_if_force_is_not_used)221 START_TEST(vnstat_handlerenameinterface_exits_if_force_is_not_used)
222 {
223 int ret;
224 PARAMS p;
225
226 initparams(&p);
227
228 p.renameiface = 1;
229 p.defaultiface = 0;
230 p.force = 0;
231 strncpy_nt(p.interface, "oldname", 32);
232 strncpy_nt(p.newifname, "newname", 32);
233
234 ret = db_open_rw(1);
235 ck_assert_int_eq(ret, 1);
236
237 ret = db_addinterface("oldname");
238 ck_assert_int_eq(ret, 1);
239
240 suppress_output();
241 handlerenameinterface(&p);
242 }
243 END_TEST
244
START_TEST(vnstat_handlerenameinterface_renames_interface)245 START_TEST(vnstat_handlerenameinterface_renames_interface)
246 {
247 int ret;
248 PARAMS p;
249
250 initparams(&p);
251 p.renameiface = 1;
252 p.defaultiface = 0;
253 p.force = 1;
254 strncpy_nt(p.interface, "oldname", 32);
255 strncpy_nt(p.newifname, "newname", 32);
256
257 ret = db_open_rw(1);
258 ck_assert_int_eq(ret, 1);
259
260 ret = db_addinterface("oldname");
261 ck_assert_int_eq(ret, 1);
262
263 ret = (int)db_getinterfacecountbyname("oldname");
264 ck_assert_int_eq(ret, 1);
265
266 ret = (int)db_getinterfacecountbyname("newname");
267 ck_assert_int_eq(ret, 0);
268
269 suppress_output();
270 handlerenameinterface(&p);
271
272 ret = (int)db_getinterfacecountbyname("oldname");
273 ck_assert_int_eq(ret, 0);
274
275 ret = (int)db_getinterfacecountbyname("newname");
276 ck_assert_int_eq(ret, 1);
277 }
278 END_TEST
279
START_TEST(vnstat_handleaddinterface_exits_if_no_interface_has_been_specified)280 START_TEST(vnstat_handleaddinterface_exits_if_no_interface_has_been_specified)
281 {
282 PARAMS p;
283 initparams(&p);
284 p.addiface = 1;
285
286 suppress_output();
287 handleaddinterface(&p);
288 }
289 END_TEST
290
START_TEST(vnstat_handleaddinterface_exits_if_interface_already_exist_in_database)291 START_TEST(vnstat_handleaddinterface_exits_if_interface_already_exist_in_database)
292 {
293 int ret;
294 PARAMS p;
295
296 initparams(&p);
297 p.addiface = 1;
298 p.defaultiface = 0;
299 strncpy_nt(p.interface, "newiface", 32);
300
301 ret = db_open_rw(1);
302 ck_assert_int_eq(ret, 1);
303
304 ret = db_addinterface("newiface");
305 ck_assert_int_eq(ret, 1);
306
307 suppress_output();
308 handleaddinterface(&p);
309 }
310 END_TEST
311
START_TEST(vnstat_handleaddinterface_exits_if_interface_does_not_exist)312 START_TEST(vnstat_handleaddinterface_exits_if_interface_does_not_exist)
313 {
314 int ret;
315 PARAMS p;
316
317 initparams(&p);
318 p.addiface = 1;
319 p.defaultiface = 0;
320 strncpy_nt(p.interface, "newiface", 32);
321
322 ck_assert_int_eq(remove_directory(TESTDIR), 1);
323 fake_proc_net_dev("w", "notnewiface", 0, 0, 0, 0);
324
325 ret = db_open_rw(1);
326 ck_assert_int_eq(ret, 1);
327
328 suppress_output();
329 handleaddinterface(&p);
330 }
331 END_TEST
332
START_TEST(vnstat_handleaddinterface_adds_interface)333 START_TEST(vnstat_handleaddinterface_adds_interface)
334 {
335 int ret;
336 PARAMS p;
337
338 initparams(&p);
339 p.addiface = 1;
340 p.defaultiface = 0;
341 cfg.spacecheck = 0;
342 strncpy_nt(p.interface, "newiface", 32);
343
344 ck_assert_int_eq(remove_directory(TESTDIR), 1);
345 fake_proc_net_dev("w", "newiface", 0, 0, 0, 0);
346
347 ret = db_open_rw(1);
348 ck_assert_int_eq(ret, 1);
349
350 ret = (int)db_getinterfacecountbyname("newiface");
351 ck_assert_int_eq(ret, 0);
352
353 suppress_output();
354 handleaddinterface(&p);
355
356 ret = (int)db_getinterfacecountbyname("newiface");
357 ck_assert_int_eq(ret, 1);
358 }
359 END_TEST
360
START_TEST(vnstat_handleaddinterface_can_be_forced_to_add_interface_that_does_not_exist)361 START_TEST(vnstat_handleaddinterface_can_be_forced_to_add_interface_that_does_not_exist)
362 {
363 int ret;
364 PARAMS p;
365
366 initparams(&p);
367 p.addiface = 1;
368 p.defaultiface = 0;
369 p.force = 1;
370 cfg.spacecheck = 0;
371 strncpy_nt(p.interface, "newiface", 32);
372
373 ck_assert_int_eq(remove_directory(TESTDIR), 1);
374 fake_proc_net_dev("w", "notnewiface", 0, 0, 0, 0);
375
376 ret = db_open_rw(1);
377 ck_assert_int_eq(ret, 1);
378
379 ret = (int)db_getinterfacecountbyname("newiface");
380 ck_assert_int_eq(ret, 0);
381
382 suppress_output();
383 handleaddinterface(&p);
384
385 ret = (int)db_getinterfacecountbyname("newiface");
386 ck_assert_int_eq(ret, 1);
387 }
388 END_TEST
389
START_TEST(vnstat_handlesetalias_exits_if_no_interface_has_been_specified)390 START_TEST(vnstat_handlesetalias_exits_if_no_interface_has_been_specified)
391 {
392 PARAMS p;
393 initparams(&p);
394 p.setalias = 1;
395
396 suppress_output();
397 handlesetalias(&p);
398 }
399 END_TEST
400
START_TEST(vnstat_handlesetalias_exits_if_given_interface_does_not_exist)401 START_TEST(vnstat_handlesetalias_exits_if_given_interface_does_not_exist)
402 {
403 int ret;
404 PARAMS p;
405 initparams(&p);
406 p.setalias = 1;
407 p.defaultiface = 0;
408 strncpy_nt(p.interface, "ethiface", 32);
409
410 ret = db_open_rw(1);
411 ck_assert_int_eq(ret, 1);
412
413 ret = db_addinterface("somename");
414 ck_assert_int_eq(ret, 1);
415
416 suppress_output();
417 handlesetalias(&p);
418 }
419 END_TEST
420
START_TEST(vnstat_handlesetalias_sets_alias)421 START_TEST(vnstat_handlesetalias_sets_alias)
422 {
423 int ret;
424 PARAMS p;
425 interfaceinfo info;
426 initparams(&p);
427 p.setalias = 1;
428 p.defaultiface = 0;
429 strncpy_nt(p.interface, "ethiface", 32);
430 strncpy_nt(p.alias, "The Internet", 32);
431
432 ret = db_open_rw(1);
433 ck_assert_int_eq(ret, 1);
434
435 ret = db_addinterface("ethiface");
436 ck_assert_int_eq(ret, 1);
437
438 ret = db_getinterfaceinfo("ethiface", &info);
439 ck_assert_int_eq(ret, 1);
440 ck_assert_str_eq(info.alias, "");
441
442 suppress_output();
443 handlesetalias(&p);
444
445 ret = db_getinterfaceinfo("ethiface", &info);
446 ck_assert_int_eq(ret, 1);
447 ck_assert_str_eq(info.alias, "The Internet");
448 }
449 END_TEST
450
START_TEST(vnstat_handlesetalias_clears_alias)451 START_TEST(vnstat_handlesetalias_clears_alias)
452 {
453 int ret;
454 PARAMS p;
455 interfaceinfo info;
456 initparams(&p);
457 p.setalias = 1;
458 p.defaultiface = 0;
459 strncpy_nt(p.interface, "ethiface", 32);
460 strncpy_nt(p.alias, "", 32);
461
462 ret = db_open_rw(1);
463 ck_assert_int_eq(ret, 1);
464
465 ret = db_addinterface("ethiface");
466 ck_assert_int_eq(ret, 1);
467
468 ret = db_setalias("ethiface", "Local network");
469 ck_assert_int_eq(ret, 1);
470
471 ret = db_getinterfaceinfo("ethiface", &info);
472 ck_assert_int_eq(ret, 1);
473 ck_assert_str_eq(info.alias, "Local network");
474
475 suppress_output();
476 handlesetalias(&p);
477
478 ret = db_getinterfaceinfo("ethiface", &info);
479 ck_assert_int_eq(ret, 1);
480 ck_assert_str_eq(info.alias, "");
481 }
482 END_TEST
483
START_TEST(vnstat_handleaddinterface_can_also_set_alias_after_adding_interface)484 START_TEST(vnstat_handleaddinterface_can_also_set_alias_after_adding_interface)
485 {
486 int ret;
487 PARAMS p;
488 interfaceinfo info;
489
490 initparams(&p);
491 p.addiface = 1;
492 p.setalias = 1;
493 p.defaultiface = 0;
494 cfg.spacecheck = 0;
495 strncpy_nt(p.interface, "newiface", 32);
496 strncpy_nt(p.alias, "The Interface", 32);
497
498 ck_assert_int_eq(remove_directory(TESTDIR), 1);
499 fake_proc_net_dev("w", "newiface", 0, 0, 0, 0);
500
501 ret = db_open_rw(1);
502 ck_assert_int_eq(ret, 1);
503
504 ret = (int)db_getinterfacecountbyname("newiface");
505 ck_assert_int_eq(ret, 0);
506
507 suppress_output();
508 handleaddinterface(&p);
509
510 ret = (int)db_getinterfacecountbyname("newiface");
511 ck_assert_int_eq(ret, 1);
512
513 ret = db_getinterfaceinfo("newiface", &info);
514 ck_assert_int_eq(ret, 1);
515 ck_assert_str_eq(info.alias, "The Interface");
516 }
517 END_TEST
518
START_TEST(vnstat_handletrafficmeters_exits_when_interface_is_not_available)519 START_TEST(vnstat_handletrafficmeters_exits_when_interface_is_not_available)
520 {
521 PARAMS p;
522 initparams(&p);
523 p.traffic = 1;
524 p.defaultiface = 1;
525 strncpy_nt(p.interface, "someiface", 32);
526
527 ck_assert_int_eq(remove_directory(TESTDIR), 1);
528 fake_proc_net_dev("w", "otheriface", 0, 0, 0, 0);
529
530 suppress_output();
531 handletrafficmeters(&p);
532 }
533 END_TEST
534
START_TEST(vnstat_handletrafficmeters_exits_when_interface_is_not_available_with_configuration_tips)535 START_TEST(vnstat_handletrafficmeters_exits_when_interface_is_not_available_with_configuration_tips)
536 {
537 PARAMS p;
538 initparams(&p);
539 p.traffic = 1;
540 p.defaultiface = 1;
541 strncpy_nt(p.interface, "someiface", 32);
542 strncpy_nt(cfg.cfgfile, "I_do_not_have_a_config_file_here.something", 512);
543
544 ck_assert_int_eq(remove_directory(TESTDIR), 1);
545 fake_proc_net_dev("w", "otheriface", 0, 0, 0, 0);
546
547 suppress_output();
548 handletrafficmeters(&p);
549 }
550 END_TEST
551
START_TEST(vnstat_handletrafficmeters_exits_when_specific_interface_is_not_available)552 START_TEST(vnstat_handletrafficmeters_exits_when_specific_interface_is_not_available)
553 {
554 PARAMS p;
555 initparams(&p);
556 p.traffic = 1;
557 p.defaultiface = 0;
558 strncpy_nt(p.interface, "someiface", 32);
559
560 ck_assert_int_eq(remove_directory(TESTDIR), 1);
561 fake_proc_net_dev("w", "otheriface", 0, 0, 0, 0);
562
563 suppress_output();
564 handletrafficmeters(&p);
565 }
566 END_TEST
567
START_TEST(vnstat_handletrafficmeters_can_calculate_traffic)568 START_TEST(vnstat_handletrafficmeters_can_calculate_traffic)
569 {
570 PARAMS p;
571 initparams(&p);
572 p.traffic = 1;
573 p.defaultiface = 0;
574 cfg.qmode = 1;
575 cfg.sampletime = 0;
576 strncpy_nt(p.interface, "someiface", 32);
577
578 ck_assert_int_eq(remove_directory(TESTDIR), 1);
579 fake_proc_net_dev("w", "someiface", 0, 0, 0, 0);
580
581 suppress_output();
582 handletrafficmeters(&p);
583 }
584 END_TEST
585
START_TEST(vnstat_handletrafficmeters_can_handle_interface_merge_using_first_interface)586 START_TEST(vnstat_handletrafficmeters_can_handle_interface_merge_using_first_interface)
587 {
588 PARAMS p;
589 initparams(&p);
590 p.traffic = 1;
591 p.defaultiface = 0;
592 cfg.qmode = 1;
593 cfg.sampletime = 0;
594 strncpy_nt(p.interface, "someiface+anotherinterface", 32);
595
596 ck_assert_int_eq(remove_directory(TESTDIR), 1);
597 fake_proc_net_dev("w", "someiface", 0, 0, 0, 0);
598
599 suppress_output();
600 handletrafficmeters(&p);
601 }
602 END_TEST
603
START_TEST(vnstat_handletrafficmeters_can_calculate_traffic_and_output_json)604 START_TEST(vnstat_handletrafficmeters_can_calculate_traffic_and_output_json)
605 {
606 PARAMS p;
607 initparams(&p);
608 p.traffic = 1;
609 p.defaultiface = 0;
610 cfg.qmode = 10;
611 cfg.sampletime = 0;
612 strncpy_nt(p.interface, "someiface", 32);
613
614 ck_assert_int_eq(remove_directory(TESTDIR), 1);
615 fake_proc_net_dev("w", "someiface", 0, 0, 0, 0);
616
617 suppress_output();
618 handletrafficmeters(&p);
619 }
620 END_TEST
621
START_TEST(vnstat_handletrafficmeters_livetraffic_does_not_crash)622 START_TEST(vnstat_handletrafficmeters_livetraffic_does_not_crash)
623 {
624 PARAMS p;
625 initparams(&p);
626 p.livetraffic = 1;
627 p.defaultiface = 0;
628 cfg.qmode = 1;
629 cfg.ostyle = 0;
630 cfg.sampletime = 0;
631 strncpy_nt(p.interface, "someiface", 32);
632
633 ck_assert_int_eq(remove_directory(TESTDIR), 1);
634 fake_proc_net_dev("w", "someiface", 0, 0, 0, 0);
635
636 suppress_output();
637 handletrafficmeters(&p);
638 }
639 END_TEST
640
START_TEST(vnstat_handletrafficmeters_livetraffic_does_not_crash_with_interface_merge)641 START_TEST(vnstat_handletrafficmeters_livetraffic_does_not_crash_with_interface_merge)
642 {
643 PARAMS p;
644 initparams(&p);
645 p.livetraffic = 1;
646 p.defaultiface = 0;
647 cfg.qmode = 1;
648 cfg.ostyle = 0;
649 cfg.sampletime = 0;
650 strncpy_nt(p.interface, "someiface+anotherinterface", 32);
651
652 ck_assert_int_eq(remove_directory(TESTDIR), 1);
653 fake_proc_net_dev("w", "someiface", 0, 0, 0, 0);
654
655 suppress_output();
656 handletrafficmeters(&p);
657 }
658 END_TEST
659
START_TEST(vnstat_handletrafficmeters_livetraffic_does_not_crash_with_json)660 START_TEST(vnstat_handletrafficmeters_livetraffic_does_not_crash_with_json)
661 {
662 PARAMS p;
663 initparams(&p);
664 p.livetraffic = 1;
665 p.defaultiface = 0;
666 cfg.qmode = 10;
667 cfg.sampletime = 0;
668 strncpy_nt(p.interface, "someiface", 32);
669
670 ck_assert_int_eq(remove_directory(TESTDIR), 1);
671 fake_proc_net_dev("w", "someiface", 0, 0, 0, 0);
672
673 suppress_output();
674 handletrafficmeters(&p);
675 }
676 END_TEST
677
START_TEST(handleifselection_does_nothing_when_interface_has_already_been_selected)678 START_TEST(handleifselection_does_nothing_when_interface_has_already_been_selected)
679 {
680 PARAMS p;
681 initparams(&p);
682
683 p.defaultiface = 0;
684 strncpy_nt(p.interface, "myiface", 32);
685
686 handleifselection(&p);
687
688 ck_assert_str_eq(p.interface, "myiface");
689 }
690 END_TEST
691
START_TEST(handleifselection_selects_default_interface_if_field_is_filled)692 START_TEST(handleifselection_selects_default_interface_if_field_is_filled)
693 {
694 PARAMS p;
695 initparams(&p);
696
697 p.defaultiface = 1;
698 strncpy_nt(p.interface, "default", 32);
699 strncpy_nt(p.definterface, "myiface", 32);
700
701 handleifselection(&p);
702
703 ck_assert_str_eq(p.interface, "myiface");
704 ck_assert_str_eq(p.definterface, "myiface");
705 }
706 END_TEST
707
START_TEST(handleifselection_exits_when_no_suitable_interface_is_available_for_query)708 START_TEST(handleifselection_exits_when_no_suitable_interface_is_available_for_query)
709 {
710 int ret;
711 PARAMS p;
712 initparams(&p);
713
714 p.defaultiface = 1;
715 p.query = 1;
716 strncpy_nt(p.interface, "default", 32);
717
718 ret = db_open_rw(1);
719 ck_assert_int_eq(ret, 1);
720
721 /* no interfaces added to database */
722
723 suppress_output();
724 handleifselection(&p);
725 }
726 END_TEST
727
START_TEST(handleifselection_selects_only_interface_from_database_for_query)728 START_TEST(handleifselection_selects_only_interface_from_database_for_query)
729 {
730 int ret;
731 PARAMS p;
732 initparams(&p);
733
734 p.defaultiface = 1;
735 p.query = 1;
736 strncpy_nt(p.interface, "default", 32);
737
738 ret = db_open_rw(1);
739 ck_assert_int_eq(ret, 1);
740
741 ret = db_addinterface("lettherebemagic");
742 ck_assert_int_eq(ret, 1);
743
744 handleifselection(&p);
745
746 ck_assert_str_eq(p.interface, "lettherebemagic");
747 }
748 END_TEST
749
START_TEST(handleifselection_selects_highest_traffic_interface_from_database_for_query)750 START_TEST(handleifselection_selects_highest_traffic_interface_from_database_for_query)
751 {
752 int ret;
753 PARAMS p;
754 initparams(&p);
755
756 p.defaultiface = 1;
757 p.query = 1;
758 strncpy_nt(p.interface, "default", 32);
759
760 ret = db_open_rw(1);
761 ck_assert_int_eq(ret, 1);
762
763 ret = db_addinterface("ethslow");
764 ck_assert_int_eq(ret, 1);
765
766 ret = db_addinterface("ethfast");
767 ck_assert_int_eq(ret, 1);
768
769 ret = db_addinterface("ethone");
770 ck_assert_int_eq(ret, 1);
771
772 ret = db_settotal("ethslow", 100, 200);
773 ck_assert_int_eq(ret, 1);
774
775 ret = db_settotal("ethfast", 80, 9001);
776 ck_assert_int_eq(ret, 1);
777
778 ret = db_settotal("ethone", 1, 1);
779 ck_assert_int_eq(ret, 1);
780
781 handleifselection(&p);
782
783 /* interface with most traffic in database is selected */
784 ck_assert_str_eq(p.interface, "ethfast");
785 }
786 END_TEST
787
START_TEST(handleifselection_exits_when_no_suitable_interface_is_available_for_traffic)788 START_TEST(handleifselection_exits_when_no_suitable_interface_is_available_for_traffic)
789 {
790 PARAMS p;
791 initparams(&p);
792
793 p.defaultiface = 1;
794 p.query = 0;
795 p.traffic = 1;
796 strncpy_nt(p.interface, "default", 32);
797
798 ck_assert_int_eq(remove_directory(TESTDIR), 1);
799
800 /* database not available and interface listing provides nothing */
801
802 suppress_output();
803 handleifselection(&p);
804 }
805 END_TEST
806
START_TEST(handleifselection_can_select_interface_without_database_for_traffic)807 START_TEST(handleifselection_can_select_interface_without_database_for_traffic)
808 {
809 PARAMS p;
810 initparams(&p);
811
812 p.defaultiface = 1;
813 p.query = 0;
814 p.traffic = 1;
815 strncpy_nt(p.interface, "default", 32);
816
817 ck_assert_int_eq(remove_directory(TESTDIR), 1);
818 fake_proc_net_dev("w", "firstinterface", 0, 0, 0, 0);
819 fake_proc_net_dev("a", "secondinterface", 0, 0, 0, 0);
820
821 suppress_output();
822 handleifselection(&p);
823
824 /* first available interface is selected */
825 ck_assert_str_eq(p.interface, "firstinterface");
826 }
827 END_TEST
828
START_TEST(handleifselection_exits_if_only_database_shows_interfaces_for_traffic)829 START_TEST(handleifselection_exits_if_only_database_shows_interfaces_for_traffic)
830 {
831 int ret;
832 PARAMS p;
833 initparams(&p);
834
835 p.defaultiface = 1;
836 p.query = 0;
837 p.traffic = 1;
838 strncpy_nt(p.interface, "default", 32);
839
840 ck_assert_int_eq(remove_directory(TESTDIR), 1);
841
842 ret = db_open_rw(1);
843 ck_assert_int_eq(ret, 1);
844
845 ret = db_addinterface("ethsomething");
846 ck_assert_int_eq(ret, 1);
847
848 ret = db_addinterface("ethnothing");
849 ck_assert_int_eq(ret, 1);
850
851 suppress_output();
852 handleifselection(&p);
853 }
854 END_TEST
855
START_TEST(handleifselection_selects_only_available_interfaces_for_traffic)856 START_TEST(handleifselection_selects_only_available_interfaces_for_traffic)
857 {
858 int ret;
859 PARAMS p;
860 initparams(&p);
861
862 p.defaultiface = 1;
863 p.query = 0;
864 p.traffic = 1;
865 strncpy_nt(p.interface, "default", 32);
866
867 ck_assert_int_eq(remove_directory(TESTDIR), 1);
868 fake_proc_net_dev("w", "ethnone", 0, 0, 0, 0);
869 fake_proc_net_dev("a", "ethslow", 0, 0, 0, 0);
870
871 ret = db_open_rw(1);
872 ck_assert_int_eq(ret, 1);
873
874 ret = db_addinterface("ethslow");
875 ck_assert_int_eq(ret, 1);
876
877 ret = db_addinterface("ethfast");
878 ck_assert_int_eq(ret, 1);
879
880 ret = db_settotal("ethslow", 100, 200);
881 ck_assert_int_eq(ret, 1);
882
883 ret = db_settotal("ethfast", 80, 9001);
884 ck_assert_int_eq(ret, 1);
885
886 handleifselection(&p);
887
888 /* interface with most traffic in database the is also available is selected */
889 ck_assert_str_eq(p.interface, "ethslow");
890 }
891 END_TEST
892
START_TEST(handleifselection_selects_only_available_interfaces_and_can_ignore_database_for_traffic)893 START_TEST(handleifselection_selects_only_available_interfaces_and_can_ignore_database_for_traffic)
894 {
895 int ret;
896 PARAMS p;
897 initparams(&p);
898
899 p.defaultiface = 1;
900 p.query = 0;
901 p.traffic = 1;
902 strncpy_nt(p.interface, "default", 32);
903
904 ck_assert_int_eq(remove_directory(TESTDIR), 1);
905 fake_proc_net_dev("w", "ethnone", 0, 0, 0, 0);
906 fake_proc_net_dev("a", "ethall", 0, 0, 0, 0);
907
908 ret = db_open_rw(1);
909 ck_assert_int_eq(ret, 1);
910
911 ret = db_addinterface("ethslow");
912 ck_assert_int_eq(ret, 1);
913
914 ret = db_addinterface("ethfast");
915 ck_assert_int_eq(ret, 1);
916
917 ret = db_settotal("ethslow", 100, 200);
918 ck_assert_int_eq(ret, 1);
919
920 ret = db_settotal("ethfast", 80, 9001);
921 ck_assert_int_eq(ret, 1);
922
923 handleifselection(&p);
924
925 /* first available interface is selected if none of the interfaces in database are available */
926 ck_assert_str_eq(p.interface, "ethnone");
927 }
928 END_TEST
929
add_cli_tests(Suite * s)930 void add_cli_tests(Suite *s)
931 {
932 TCase *tc_cli = tcase_create("CLI");
933 tcase_add_checked_fixture(tc_cli, setup, teardown);
934 tcase_add_unchecked_fixture(tc_cli, setup, teardown);
935 tcase_add_test(tc_cli, vnstat_can_init_params);
936 tcase_add_test(tc_cli, vnstat_showhelp_does_not_crash);
937 tcase_add_test(tc_cli, vnstat_showlonghelp_does_not_crash);
938 tcase_add_test(tc_cli, vnstat_handlers_do_nothing_by_default);
939 tcase_add_exit_test(tc_cli, vnstat_handletrafficmeters_exists_when_interface_is_not_available, 1);
940 tcase_add_exit_test(tc_cli, vnstat_handleremoveinterface_exits_if_no_interface_has_been_specified, 1);
941 tcase_add_exit_test(tc_cli, vnstat_handleremoveinterface_exits_if_given_interface_does_not_exist, 1);
942 tcase_add_exit_test(tc_cli, vnstat_handleremoveinterface_exits_if_force_is_not_used, 1);
943 tcase_add_test(tc_cli, vnstat_handleremoveinterface_removes_interface);
944 tcase_add_exit_test(tc_cli, vnstat_handlerenameinterface_exits_if_no_interface_has_been_specified, 1);
945 tcase_add_exit_test(tc_cli, vnstat_handlerenameinterface_exits_if_new_interface_name_is_not_given, 1);
946 tcase_add_exit_test(tc_cli, vnstat_handlerenameinterface_exits_if_given_interface_does_not_exist, 1);
947 tcase_add_exit_test(tc_cli, vnstat_handlerenameinterface_exits_if_new_interface_name_already_exist, 1);
948 tcase_add_exit_test(tc_cli, vnstat_handlerenameinterface_exits_if_force_is_not_used, 1);
949 tcase_add_test(tc_cli, vnstat_handlerenameinterface_renames_interface);
950 tcase_add_exit_test(tc_cli, vnstat_handleaddinterface_exits_if_no_interface_has_been_specified, 1);
951 tcase_add_exit_test(tc_cli, vnstat_handleaddinterface_exits_if_interface_already_exist_in_database, 1);
952 tcase_add_exit_test(tc_cli, vnstat_handleaddinterface_exits_if_interface_does_not_exist, 1);
953 tcase_add_test(tc_cli, vnstat_handleaddinterface_adds_interface);
954 tcase_add_test(tc_cli, vnstat_handleaddinterface_can_be_forced_to_add_interface_that_does_not_exist);
955 tcase_add_exit_test(tc_cli, vnstat_handlesetalias_exits_if_no_interface_has_been_specified, 1);
956 tcase_add_exit_test(tc_cli, vnstat_handlesetalias_exits_if_given_interface_does_not_exist, 1);
957 tcase_add_test(tc_cli, vnstat_handlesetalias_sets_alias);
958 tcase_add_test(tc_cli, vnstat_handlesetalias_clears_alias);
959 tcase_add_test(tc_cli, vnstat_handleaddinterface_can_also_set_alias_after_adding_interface);
960 tcase_add_exit_test(tc_cli, vnstat_handletrafficmeters_exits_when_interface_is_not_available, 1);
961 tcase_add_exit_test(tc_cli, vnstat_handletrafficmeters_exits_when_interface_is_not_available_with_configuration_tips, 1);
962 tcase_add_exit_test(tc_cli, vnstat_handletrafficmeters_exits_when_specific_interface_is_not_available, 1);
963 tcase_add_test(tc_cli, vnstat_handletrafficmeters_can_calculate_traffic);
964 tcase_add_test(tc_cli, vnstat_handletrafficmeters_can_handle_interface_merge_using_first_interface);
965 tcase_add_test(tc_cli, vnstat_handletrafficmeters_can_calculate_traffic_and_output_json);
966 tcase_add_test(tc_cli, vnstat_handletrafficmeters_livetraffic_does_not_crash);
967 tcase_add_test(tc_cli, vnstat_handletrafficmeters_livetraffic_does_not_crash_with_interface_merge);
968 tcase_add_test(tc_cli, vnstat_handletrafficmeters_livetraffic_does_not_crash_with_json);
969 tcase_add_test(tc_cli, handleifselection_does_nothing_when_interface_has_already_been_selected);
970 tcase_add_test(tc_cli, handleifselection_selects_default_interface_if_field_is_filled);
971 tcase_add_exit_test(tc_cli, handleifselection_exits_when_no_suitable_interface_is_available_for_query, 1);
972 tcase_add_test(tc_cli, handleifselection_selects_only_interface_from_database_for_query);
973 tcase_add_test(tc_cli, handleifselection_selects_highest_traffic_interface_from_database_for_query);
974 tcase_add_exit_test(tc_cli, handleifselection_exits_when_no_suitable_interface_is_available_for_traffic, 1);
975 tcase_add_test(tc_cli, handleifselection_can_select_interface_without_database_for_traffic);
976 tcase_add_exit_test(tc_cli, handleifselection_exits_if_only_database_shows_interfaces_for_traffic, 1);
977 tcase_add_test(tc_cli, handleifselection_selects_only_available_interfaces_for_traffic);
978 tcase_add_test(tc_cli, handleifselection_selects_only_available_interfaces_and_can_ignore_database_for_traffic);
979 suite_add_tcase(s, tc_cli);
980 }
981