summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Habets <thomas@habets.se>2012-10-03 23:58:48 +0100
committerThomas Habets <thomas@habets.se>2012-10-03 23:58:48 +0100
commit128f399117efa9a972e5c22e2fd3fb14a4e37554 (patch)
treebe68eff90d1135141679838de393588310fbb66f
parent9e4c463ccdd25894f9f0edfaced76190a2060933 (diff)
downloadarping-unit_tests.tar.gz
Test -A with pingipunit_tests
-rw-r--r--src/arping.c4
-rw-r--r--src/arping.h2
-rw-r--r--src/arping_test.c43
3 files changed, 47 insertions, 2 deletions
diff --git a/src/arping.c b/src/arping.c
index 267dc62..efff12a 100644
--- a/src/arping.c
+++ b/src/arping.c
@@ -135,7 +135,7 @@ uint32_t dstip;
* Ping IP mode: ethxmas, override with -t
* Ping MAC mode: cmdline target
*/
-static uint8_t dstmac[ETH_ALEN];
+uint8_t dstmac[ETH_ALEN];
uint32_t srcip; /* autodetected, override with -S/-b/-0 */
static uint8_t srcmac[ETH_ALEN]; /* autodetected, override with -s */
@@ -143,7 +143,7 @@ static uint8_t srcmac[ETH_ALEN]; /* autodetected, override with -s */
static int beep = 0; /* beep when reply is received. -a */
static int reverse_beep = 0; /* beep when expected reply absent. -e */
static int alsototal = 0; /* print sent as well as received. -u */
-static int addr_must_be_same = 0; /* -A */
+int addr_must_be_same = 0; /* -A */
static int finddup = 0; /* finddup mode. -d */
static int dupfound = 0; /* set to 1 if dup found */
diff --git a/src/arping.h b/src/arping.h
index 1f66277..799a26d 100644
--- a/src/arping.h
+++ b/src/arping.h
@@ -33,6 +33,8 @@ extern uint32_t srcip;
extern uint32_t dstip;
extern unsigned int numrecvd;
extern unsigned int numsent;
+extern int addr_must_be_same;
+extern uint8_t dstmac[];
const char *
arping_lookupdev(uint32_t srcip, uint32_t dstip, char *ebuf);
diff --git a/src/arping_test.c b/src/arping_test.c
index 6a81ed3..81ed576 100644
--- a/src/arping_test.c
+++ b/src/arping_test.c
@@ -333,6 +333,48 @@ START_TEST(pingip_interesting_packet)
} END_TEST
/**
+ * Test that -A functionality works.
+ */
+START_TEST(pingip_flag_A)
+{
+ struct pcap_pkthdr pkthdr;
+ int prev_numrecvd = numrecvd;
+ addr_must_be_same = 1;
+
+ dstip = htonl(0x12345678);
+
+ uint8_t* packet = mkpacket(&pkthdr);
+
+ struct captured_output *sout;
+
+ // Wrong MAC.
+ sout = capture(1);
+ pingip_recv(NULL, &pkthdr, packet);
+ stop_capture(sout);
+ fail_unless(numrecvd == prev_numrecvd,
+ "numrecvd changed");
+ fail_unless(!strcmp(sout->buffer, ""),
+ sout->buffer);
+ uncapture(sout);
+
+ // Right MAC.
+ const char* correct =
+ "60 bytes from 77:88:99:aa:bb:cc (18.52.86.120): "
+ "index=0 time=";
+ memcpy(dstmac, packet + LIBNET_ETH_H + LIBNET_ARP_H, 6);
+ sout = capture(1);
+ pingip_recv(NULL, &pkthdr, packet);
+ stop_capture(sout);
+ fail_unless(numrecvd == prev_numrecvd + 1,
+ "numrecvd not incremented");
+ fail_unless(!strncmp(sout->buffer, correct, strlen(correct)),
+ sout->buffer);
+ uncapture(sout);
+
+ free(packet);
+} END_TEST
+
+/**
* Set up test suite.
*/
static Suite *
@@ -346,6 +388,7 @@ arping_suite (void)
tcase_add_test(tc_core, test_mkpacket);
tcase_add_test(tc_core, pingip_uninteresting_packet);
tcase_add_test(tc_core, pingip_interesting_packet);
+ tcase_add_test(tc_core, pingip_flag_A);
suite_add_tcase(s, tc_core);
return s;
}