Skip to content

Commit b7c3975

Browse files
Add negative unit tests
1 parent dbe78c9 commit b7c3975

1 file changed

Lines changed: 153 additions & 13 deletions

File tree

tests/test.c

Lines changed: 153 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ typedef struct
7070
pp_info_t pp_info_in;
7171
uint8_t *raw_bytes_in;
7272
uint32_t raw_bytes_in_length;
73+
int32_t error_expected; /* error parameter of pp_create_hdr() */
7374
int32_t rc_expected;
7475
pp_info_t pp_info_out_expected;
7576
test_tlv_t add_tlvs[10];
@@ -554,6 +555,132 @@ int main()
554555
.pp2_info.local = 1
555556
},
556557
},
558+
{
559+
.name = "v1 PROXY protocol header: -ERR_PP1_TRANSPORT_FAMILY",
560+
.version = 1,
561+
.pp_info_in = {
562+
.transport_protocol = 3,
563+
},
564+
.error_expected = -ERR_PP1_TRANSPORT_FAMILY,
565+
},
566+
{
567+
.name = "v1 PROXY protocol header: -ERR_PP1_TRANSPORT_FAMILY",
568+
.version = 1,
569+
.pp_info_in = {
570+
.address_family = 3,
571+
},
572+
.error_expected = -ERR_PP1_TRANSPORT_FAMILY,
573+
},
574+
{
575+
.name = "v1 PROXY protocol header: -ERR_PP1_IPV4_SRC_IP",
576+
.version = 1,
577+
.pp_info_in = {
578+
.address_family = ADDR_FAMILY_INET,
579+
.transport_protocol = TRANSPORT_PROTOCOL_STREAM,
580+
.src_addr = "255.255.255.255.255",
581+
},
582+
.error_expected = -ERR_PP1_IPV4_SRC_IP,
583+
},
584+
{
585+
.name = "v1 PROXY protocol header: -ERR_PP1_IPV4_DST_IP",
586+
.version = 1,
587+
.pp_info_in = {
588+
.address_family = ADDR_FAMILY_INET,
589+
.transport_protocol = TRANSPORT_PROTOCOL_STREAM,
590+
.src_addr = "255.255.255.255",
591+
.dst_addr = "255.255.255.255.255",
592+
},
593+
.error_expected = -ERR_PP1_IPV4_DST_IP,
594+
},
595+
{
596+
.name = "v1 PROXY protocol header: -ERR_PP1_IPV6_SRC_IP",
597+
.version = 1,
598+
.pp_info_in = {
599+
.address_family = ADDR_FAMILY_INET6,
600+
.transport_protocol = TRANSPORT_PROTOCOL_STREAM,
601+
.src_addr = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
602+
},
603+
.error_expected = -ERR_PP1_IPV6_SRC_IP,
604+
},
605+
{
606+
.name = "v1 PROXY protocol header: -ERR_PP1_IPV6_DST_IP",
607+
.version = 1,
608+
.pp_info_in = {
609+
.address_family = ADDR_FAMILY_INET6,
610+
.transport_protocol = TRANSPORT_PROTOCOL_STREAM,
611+
.src_addr = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
612+
.dst_addr = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
613+
},
614+
.error_expected = -ERR_PP1_IPV6_DST_IP,
615+
},
616+
{
617+
.name = "v2 PROXY protocol header: -ERR_PP2_CMD",
618+
.version = 2,
619+
.pp_info_in = {
620+
.pp2_info.local = 0,
621+
},
622+
.error_expected = -ERR_PP2_CMD,
623+
},
624+
{
625+
.name = "v2 PROXY protocol header: -ERR_PP2_ADDR_FAMILY",
626+
.version = 2,
627+
.pp_info_in = {
628+
.address_family = 4,
629+
},
630+
.error_expected = -ERR_PP2_ADDR_FAMILY,
631+
},
632+
{
633+
.name = "v2 PROXY protocol header: -ERR_PP2_TRANSPORT_PROTOCOL",
634+
.version = 2,
635+
.pp_info_in = {
636+
.address_family = ADDR_FAMILY_UNSPEC,
637+
.pp2_info.local = 1,
638+
.transport_protocol = 4,
639+
},
640+
.error_expected = -ERR_PP2_TRANSPORT_PROTOCOL,
641+
},
642+
{
643+
.name = "v2 PROXY protocol header: -ERR_PP2_IPV4_SRC_IP",
644+
.version = 2,
645+
.pp_info_in = {
646+
.address_family = ADDR_FAMILY_INET,
647+
.transport_protocol = TRANSPORT_PROTOCOL_STREAM,
648+
.src_addr = "255.255.255.255.255",
649+
},
650+
.error_expected = -ERR_PP2_IPV4_SRC_IP,
651+
},
652+
{
653+
.name = "v2 PROXY protocol header: -ERR_PP2_IPV4_DST_IP",
654+
.version = 2,
655+
.pp_info_in = {
656+
.address_family = ADDR_FAMILY_INET,
657+
.transport_protocol = TRANSPORT_PROTOCOL_STREAM,
658+
.src_addr = "255.255.255.255",
659+
.dst_addr = "255.255.255.255.255",
660+
},
661+
.error_expected = -ERR_PP2_IPV4_DST_IP,
662+
},
663+
{
664+
.name = "v2 PROXY protocol header: -ERR_PP2_IPV6_SRC_IP",
665+
.version = 2,
666+
.pp_info_in = {
667+
.address_family = ADDR_FAMILY_INET6,
668+
.transport_protocol = TRANSPORT_PROTOCOL_STREAM,
669+
.src_addr = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
670+
},
671+
.error_expected = -ERR_PP2_IPV6_SRC_IP,
672+
},
673+
{
674+
.name = "v2 PROXY protocol header: -ERR_PP2_IPV6_DST_IP",
675+
.version = 2,
676+
.pp_info_in = {
677+
.address_family = ADDR_FAMILY_INET6,
678+
.transport_protocol = TRANSPORT_PROTOCOL_STREAM,
679+
.src_addr = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
680+
.dst_addr = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
681+
},
682+
.error_expected = -ERR_PP2_IPV6_DST_IP,
683+
},
557684
};
558685

559686
/* Run tests */
@@ -562,16 +689,16 @@ int main()
562689
{
563690
printf("Running test: %s...", tests[i].name);
564691
pp_info_t pp_info_out;
565-
int32_t rc;
692+
int32_t pp_parse_hdr_rc = 0;
566693
if (tests[i].raw_bytes_in)
567694
{
568-
rc = pp_parse_hdr(tests[i].raw_bytes_in, tests[i].raw_bytes_in_length, &pp_info_out);
695+
pp_parse_hdr_rc = pp_parse_hdr(tests[i].raw_bytes_in, tests[i].raw_bytes_in_length, &pp_info_out);
569696
}
570697
else
571698
{
572-
uint16_t pp_hdr_len;
699+
uint16_t pp_hdr_len = 0;
573700
uint16_t alignment = 1 << tests[i].pp_info_in.pp2_info.alignment_power;
574-
int32_t error;
701+
int32_t error = ERR_NULL;
575702

576703
if (tests[i].add_tlvs[0].type)
577704
{
@@ -594,20 +721,33 @@ int main()
594721
pp_hdr = pp_create_hdr(tests[i].version, &tests[i].pp_info_in, &pp_hdr_len, &error);
595722
pp_info_clear(&tests[i].pp_info_in);
596723
}
597-
if (!pp_hdr
598-
|| error != ERR_NULL
599-
|| (alignment > 1 && pp_hdr_len % alignment))
724+
if (tests[i].error_expected == ERR_NULL)
600725
{
601-
printf("FAILED\n");
602-
pp_info_clear(&pp_info_out);
603-
return EXIT_FAILURE;
726+
if (!pp_hdr
727+
|| error != ERR_NULL
728+
|| (alignment > 1 && pp_hdr_len % alignment))
729+
{
730+
printf("FAILED\n");
731+
pp_info_clear(&pp_info_out);
732+
return EXIT_FAILURE;
733+
}
734+
tests[i].rc_expected = pp_hdr_len;
735+
pp_parse_hdr_rc = pp_parse_hdr(pp_hdr, pp_hdr_len, &pp_info_out);
736+
}
737+
else
738+
{
739+
if (pp_hdr || error != tests[i].error_expected)
740+
{
741+
printf("FAILED\n");
742+
pp_info_clear(&pp_info_out);
743+
return EXIT_FAILURE;
744+
}
604745
}
605-
tests[i].rc_expected = pp_hdr_len;
606-
rc = pp_parse_hdr(pp_hdr, pp_hdr_len, &pp_info_out);
607746
free(pp_hdr);
608747
}
609748

610-
if (rc != tests[i].rc_expected || !pp_info_equal(&pp_info_out, &tests[i].pp_info_out_expected) || !pp_verify_tlvs(&pp_info_out, &tests[i].expected_tlvs))
749+
if (pp_parse_hdr_rc != tests[i].rc_expected
750+
|| (pp_parse_hdr_rc && (!pp_info_equal(&pp_info_out, &tests[i].pp_info_out_expected) || !pp_verify_tlvs(&pp_info_out, &tests[i].expected_tlvs))))
611751
{
612752
printf("FAILED\n");
613753
pp_info_clear(&pp_info_out);

0 commit comments

Comments
 (0)