|
8 | 8 |
|
9 | 9 | #include "MockRelay.h"
|
10 | 10 |
|
11 |
| -uint32_t openSockCount = 0; |
12 |
| -uint32_t prepareSockCount = 0; |
| 11 | +extern struct event_base *base; |
| 12 | +extern struct event *ev_sigint; |
| 13 | +extern struct event *ev_sigterm; |
13 | 14 |
|
14 | 15 | static struct sock_filter ether_relay_filter[] = {
|
15 | 16 |
|
@@ -204,24 +205,66 @@ TEST(parsePacket, relay_forward)
|
204 | 205 |
|
205 | 206 | TEST(sock, sock_open)
|
206 | 207 | {
|
207 |
| - sock_fprog ether_relay_fprog = {0,{}}; |
208 |
| - int index = 0; |
209 |
| - if (!index) { |
210 |
| - errno = EINVAL; |
211 |
| - } |
212 |
| - EXPECT_EQ(errno, EINVAL); |
213 |
| - openSockCount++; |
214 |
| - int filter = sock_open(index, ðer_relay_fprog); |
215 |
| - EXPECT_EQ(1, openSockCount); |
| 208 | + struct sock_filter ether_relay_filter[] = { |
| 209 | + { 0x6, 0, 0, 0x00040000 }, |
| 210 | + }; |
| 211 | + const struct sock_fprog ether_relay_fprog = { |
| 212 | + lengthof(ether_relay_filter), |
| 213 | + ether_relay_filter |
| 214 | + }; |
| 215 | + int index = if_nametoindex("lo"); |
| 216 | + EXPECT_GE(sock_open(index, ðer_relay_fprog), 0); |
| 217 | +} |
| 218 | + |
| 219 | +TEST(sock, sock_open_invalid_filter) |
| 220 | +{ |
| 221 | + const struct sock_fprog ether_relay_fprog = {0,{}}; |
| 222 | + int index = if_nametoindex("lo"); |
| 223 | + EXPECT_EQ(sock_open(index, ðer_relay_fprog), -1); |
| 224 | +} |
| 225 | + |
| 226 | +TEST(sock, sock_open_invalid_ifindex_zero) |
| 227 | +{ |
| 228 | + struct sock_filter ether_relay_filter[] = { |
| 229 | + { 0x6, 0, 0, 0x00040000 }, |
| 230 | + }; |
| 231 | + const struct sock_fprog ether_relay_fprog = { |
| 232 | + lengthof(ether_relay_filter), |
| 233 | + ether_relay_filter |
| 234 | + }; |
| 235 | + EXPECT_EQ(sock_open(0, ðer_relay_fprog), -1); |
| 236 | +} |
| 237 | + |
| 238 | +TEST(sock, sock_open_invalid_ifindex) |
| 239 | +{ |
| 240 | + struct sock_filter ether_relay_filter[] = { |
| 241 | + { 0x6, 0, 0, 0x00040000 }, |
| 242 | + }; |
| 243 | + const struct sock_fprog ether_relay_fprog = { |
| 244 | + lengthof(ether_relay_filter), |
| 245 | + ether_relay_filter |
| 246 | + }; |
| 247 | + EXPECT_EQ(sock_open(42384239, ðer_relay_fprog), -1); |
216 | 248 | }
|
217 | 249 |
|
218 | 250 | TEST(sock, prepare_socket)
|
219 | 251 | {
|
220 | 252 | relay_config *config = new struct relay_config;;
|
221 |
| - int local_sock, server_sock, index = 1; |
222 |
| - prepareSockCount++; |
| 253 | + int local_sock = -1, server_sock = -1, index = 1; |
| 254 | + int socket_type = -1; |
| 255 | + socklen_t socket_type_len = sizeof(socket_type); |
223 | 256 | prepare_socket(&local_sock, &server_sock, config, index);
|
224 |
| - EXPECT_EQ(1, prepareSockCount); |
| 257 | + EXPECT_GE(local_sock, 0); |
| 258 | + EXPECT_GE(server_sock, 0); |
| 259 | + EXPECT_EQ(0, getsockopt(local_sock, SOL_SOCKET, SO_TYPE, &socket_type, &socket_type_len)); |
| 260 | + EXPECT_EQ(SOCK_DGRAM, socket_type); |
| 261 | + socket_type = -1; |
| 262 | + socket_type_len = sizeof(socket_type); |
| 263 | + EXPECT_EQ(0, getsockopt(server_sock, SOL_SOCKET, SO_TYPE, &socket_type, &socket_type_len)); |
| 264 | + EXPECT_EQ(SOCK_DGRAM, socket_type); |
| 265 | + close(local_sock); |
| 266 | + close(server_sock); |
| 267 | + delete config; |
225 | 268 | }
|
226 | 269 |
|
227 | 270 | TEST(helper, send_udp)
|
@@ -597,30 +640,6 @@ TEST(relay, relay_relay_reply) {
|
597 | 640 | }
|
598 | 641 |
|
599 | 642 | TEST(relay, callback) {
|
600 |
| - static struct sock_filter ether_relay_filter[] = { |
601 |
| - |
602 |
| - { 0x28, 0, 0, 0x0000000c }, |
603 |
| - { 0x15, 0, 13, 0x000086dd }, |
604 |
| - { 0x20, 0, 0, 0x00000026 }, |
605 |
| - { 0x15, 0, 11, 0xff020000 }, |
606 |
| - { 0x20, 0, 0, 0x0000002a }, |
607 |
| - { 0x15, 0, 9, 0x00000000 }, |
608 |
| - { 0x20, 0, 0, 0x0000002e }, |
609 |
| - { 0x15, 0, 7, 0x00000000 }, |
610 |
| - { 0x20, 0, 0, 0x00000032 }, |
611 |
| - { 0x15, 0, 5, 0x00010002 }, |
612 |
| - { 0x30, 0, 0, 0x00000014 }, |
613 |
| - { 0x15, 0, 3, 0x00000011 }, |
614 |
| - { 0x28, 0, 0, 0x00000038 }, |
615 |
| - { 0x15, 0, 1, 0x00000223 }, |
616 |
| - { 0x6, 0, 0, 0x00040000 }, |
617 |
| - { 0x6, 0, 0, 0x00000000 }, |
618 |
| - }; |
619 |
| - const struct sock_fprog ether_relay_fprog = { |
620 |
| - lengthof(ether_relay_filter), |
621 |
| - ether_relay_filter |
622 |
| - }; |
623 |
| - |
624 | 643 | int mock_sock = 123;
|
625 | 644 | evutil_socket_t fd = 1;
|
626 | 645 | short event = 1;
|
@@ -650,40 +669,38 @@ TEST(relay, callback) {
|
650 | 669 |
|
651 | 670 | int local_sock = 1;
|
652 | 671 | int filter = 1;
|
653 |
| - int index = 1; |
654 |
| - filter = sock_open(index, ðer_relay_fprog); |
| 672 | + int index = if_nametoindex("lo"); |
| 673 | + config.filter = sock_open(index, ðer_relay_fprog); |
| 674 | + EXPECT_GE(config.filter, 0); |
655 | 675 | prepare_relay_config(&config, &local_sock, filter);
|
656 | 676 |
|
657 | 677 | callback(fd, event, &config);
|
658 | 678 | }
|
659 | 679 |
|
660 | 680 | TEST(relay, signal_init) {
|
661 |
| - struct event_base *base; |
662 |
| - struct event *ev_sigint = NULL; |
663 |
| - struct event *ev_sigterm; |
664 | 681 | signal_init();
|
| 682 | + EXPECT_NE((uintptr_t)ev_sigint, NULL); |
| 683 | + EXPECT_NE((uintptr_t)ev_sigterm, NULL); |
665 | 684 | }
|
666 | 685 |
|
667 | 686 | TEST(relay, signal_start) {
|
668 |
| - struct event_base *base = event_base_new();; |
669 |
| - struct event *ev_sigint; |
670 |
| - struct event *ev_sigterm; |
671 | 687 | signal_init();
|
| 688 | + EXPECT_NE((uintptr_t)ev_sigint, NULL); |
| 689 | + EXPECT_NE((uintptr_t)ev_sigterm, NULL); |
672 | 690 | signal_start();
|
673 | 691 | }
|
674 | 692 |
|
675 | 693 | TEST(relay, signal_callback) {
|
676 |
| - struct event_base *base = event_base_new();; |
677 |
| - struct event *ev_sigint; |
678 |
| - struct event *ev_sigterm; |
679 | 694 | signal_callback(1, 1, &base);
|
680 | 695 | }
|
681 | 696 |
|
682 | 697 | TEST(relay, dhcp6relay_stop) {
|
683 | 698 | int filter = 1;
|
684 | 699 | struct relay_config config{};
|
685 |
| - struct event_base *base = event_base_new(); |
686 |
| - struct event *mock_event; |
687 |
| - event_new(base, filter, EV_READ|EV_PERSIST, callback, &config); |
| 700 | + base = event_base_new(); |
| 701 | + struct event* event = event_new(base, filter, EV_READ|EV_PERSIST, callback, &config); |
688 | 702 | dhcp6relay_stop();
|
| 703 | + event_free(event); |
| 704 | + event_base_free(base); |
| 705 | + base = NULL; |
689 | 706 | }
|
0 commit comments