summaryrefslogtreecommitdiff
path: root/packet_test.c
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2005-07-26 19:15:25 +0000
committerEric S. Raymond <esr@thyrsus.com>2005-07-26 19:15:25 +0000
commit9a72ea292399172e6481a0215a220d56ec425e6f (patch)
tree0a9493a2538bf9d00fa5f4d7b166c480d340259e /packet_test.c
parent2c44b4ab04ef97bb2090d84a73c5892f47e3b378 (diff)
downloadgpsd-9a72ea292399172e6481a0215a220d56ec425e6f.tar.gz
New -t option lets us perform individual regressions.
Diffstat (limited to 'packet_test.c')
-rw-r--r--packet_test.c350
1 files changed, 182 insertions, 168 deletions
diff --git a/packet_test.c b/packet_test.c
index c6902753..2b886ad0 100644
--- a/packet_test.c
+++ b/packet_test.c
@@ -6,6 +6,7 @@
#include <errno.h>
#include <sys/types.h>
#include <stdarg.h>
+#include <getopt.h>
#include "config.h"
#include "gpsd.h"
@@ -35,6 +36,170 @@ struct map {
int type;
};
+/*@ -initallelements +charint -usedef @*/
+struct map tests[] = {
+ /* NMEA tests */
+ {
+ "NMEA packet with checksum (1)",
+ "$GPVTG,308.74,T,,M,0.00,N,0.0,K*68\r\n",
+ 36,
+ 0,
+ NMEA_PACKET,
+ },
+ {
+ "NMEA packet with checksum (2)",
+ "$GPGGA,110534.994,4002.1425,N,07531.2585,W,0,00,50.0,172.7,M,-33.8,M,0.0,0000*7A\r\n",
+ 82,
+ 0,
+ NMEA_PACKET,
+ },
+ {
+ "NMEA packet with checksum and 4 chars of leading garbage",
+ "\xff\xbf\x00\xbf$GPVTG,308.74,T,,M,0.00,N,0.0,K*68\r\n",
+ 40,
+ 4,
+ NMEA_PACKET,
+ },
+ {
+ "NMEA packet without checksum",
+ "$PSRF105,1\r\n",
+ 12,
+ 0,
+ NMEA_PACKET,
+ },
+ {
+ "NMEA packet with wrong checksum",
+ "$GPVTG,308.74,T,,M,0.00,N,0.0,K*28\r\n",
+ 36,
+ 0,
+ BAD_PACKET,
+ },
+ /* SiRF tests */
+ {
+ "SiRF WAAS version ID",
+ {
+ 0xA0, 0xA2, 0x00, 0x15,
+ 0x06, 0x06, 0x31, 0x2E, 0x32, 0x2E, 0x30, 0x44,
+ 0x4B, 0x49, 0x54, 0x31, 0x31, 0x39, 0x20, 0x53,
+ 0x4D, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x82, 0xB0, 0xB3},
+ 29,
+ 0,
+ SIRF_PACKET,
+ },
+ {
+ "SiRF WAAS version ID with 3 chars of leading garbage",
+ {
+ 0xff, 0x00, 0xff,
+ 0xA0, 0xA2, 0x00, 0x15,
+ 0x06, 0x06, 0x31, 0x2E, 0x32, 0x2E, 0x30, 0x44,
+ 0x4B, 0x49, 0x54, 0x31, 0x31, 0x39, 0x20, 0x53,
+ 0x4D, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x82, 0xB0, 0xB3},
+ 32,
+ 3,
+ SIRF_PACKET,
+ },
+ {
+ "SiRF WAAS version ID with wrong checksum",
+ {
+ 0xA0, 0xA2, 0x00, 0x15,
+ 0x06, 0x06, 0x31, 0x2E, 0x32, 0x2E, 0x30, 0x44,
+ 0x4B, 0x49, 0x54, 0x31, 0x31, 0x39, 0x20, 0x53,
+ 0x4D, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0xB0, 0xB3},
+ 29,
+ 0,
+ BAD_PACKET,
+ },
+ {
+ "SiRF WAAS version ID with bad length",
+ {
+ 0xA0, 0xA2, 0xff, 0x15,
+ 0x06, 0x06, 0x31, 0x2E, 0x32, 0x2E, 0x30, 0x44,
+ 0x4B, 0x49, 0x54, 0x31, 0x31, 0x39, 0x20, 0x53,
+ 0x4D, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x82, 0xB0, 0xB3},
+ 29,
+ 0,
+ BAD_PACKET,
+ },
+ /* Zodiac tests */
+ {
+ "Zodiac binary 1000 Geodetic Status Output Message",
+ {
+ 0xff, 0x81, 0xe8, 0x03, 0x31, 0x00, 0x00, 0x00, 0xe8, 0x79,
+ 0x74, 0x0e, 0x00, 0x00, 0x24, 0x00, 0x24, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x03, 0x23, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x06, 0x00,
+ 0xcd, 0x07, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x7b, 0x0d,
+ 0x00, 0x00, 0x12, 0x6b, 0xa7, 0x04, 0x41, 0x75, 0x32, 0xf8,
+ 0x03, 0x1f, 0x00, 0x00, 0xe6, 0xf2, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x11, 0xf6, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40,
+ 0xd9, 0x12, 0x90, 0xd0, 0x03, 0x00, 0x00, 0xa3, 0xe1, 0x11,
+ 0x10, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa3, 0xe1, 0x11,
+ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x93, 0x04, 0x00, 0x04, 0xaa},
+ 110,
+ 0,
+ ZODIAC_PACKET,
+ },
+ /* EverMore tests */
+ {
+ "EverMore status packet 0x20",
+ {
+ 0x10, 0x02, 0x0D, 0x20, 0xE1, 0x00, 0x00, 0x00,
+ 0x0A, 0x00, 0x1E, 0x00, 0x32, 0x00, 0x5b, 0x10,
+ 0x03},
+ 17,
+ 0,
+ EVERMORE_PACKET,
+ },
+ {
+ "EverMore packet 0x04 with 0x10 0x10 sequence",
+ {
+ 0x10, 0x02, 0x0f, 0x04, 0x00, 0x00, 0x10, 0x10,
+ 0xa7, 0x13, 0x03, 0x2c, 0x26, 0x24, 0x0a, 0x17,
+ 0x00, 0x68, 0x10, 0x03},
+ 20,
+ 0,
+ EVERMORE_PACKET,
+ },
+ {
+ "EverMore packet 0x04 with 0x10 0x10 sequence, some noise before packet data",
+ {
+ 0x10, 0x03, 0xff, 0x10, 0x02, 0x0f, 0x04, 0x00,
+ 0x00, 0x10, 0x10, 0xa7, 0x13, 0x03, 0x2c, 0x26,
+ 0x24, 0x0a, 0x17, 0x00, 0x68, 0x10, 0x03},
+ 23,
+ 3,
+ EVERMORE_PACKET,
+ },
+ {
+ "EverMore packet 0x04, 0x10 and some other data at the begining",
+ {
+ 0x10, 0x12, 0x10, 0x03, 0xff, 0x10, 0x02, 0x0f,
+ 0x04, 0x00, 0x00, 0x10, 0x10, 0xa7, 0x13, 0x03,
+ 0x2c, 0x26, 0x24, 0x0a, 0x17, 0x00, 0x68, 0x10,
+ 0x03},
+ 25,
+ 5,
+ EVERMORE_PACKET,
+ },
+ {
+ "EverMore packet 0x04, 0x10 three times at the begining",
+ {
+ 0x10, 0x10, 0x10, 0x29, 0x01, 0x0B, 0x00, 0x01,
+ 0x23, 0x0A, 0x16, 0x22, 0xe0, 0x10, 0x03, 0xff,
+ 0x10, 0x02, 0x0f, 0x04, 0x00, 0x00, 0x10, 0x10,
+ 0xa7, 0x13, 0x03, 0x2c, 0x26, 0x24, 0x0a, 0x17,
+ 0x00, 0x68, 0x10, 0x03},
+ 36,
+ 16,
+ EVERMORE_PACKET,
+ },
+};
+/*@ +initallelements -charint +usedef @*/
+
static int packet_test(struct map *mp)
{
struct gps_device_t state;
@@ -78,177 +243,26 @@ static int packet_test(struct map *mp)
int main(int argc, char *argv[])
{
- /*@ -initallelements +charint -usedef @*/
- struct map tests[] = {
- /* NMEA tests */
- {
- "NMEA packet with checksum (1)",
- "$GPVTG,308.74,T,,M,0.00,N,0.0,K*68\r\n",
- 36,
- 0,
- NMEA_PACKET,
- },
- {
- "NMEA packet with checksum (2)",
- "$GPGGA,110534.994,4002.1425,N,07531.2585,W,0,00,50.0,172.7,M,-33.8,M,0.0,0000*7A\r\n",
- 82,
- 0,
- NMEA_PACKET,
- },
- {
- "NMEA packet with checksum and 4 chars of leading garbage",
- "\xff\xbf\x00\xbf$GPVTG,308.74,T,,M,0.00,N,0.0,K*68\r\n",
- 40,
- 4,
- NMEA_PACKET,
- },
- {
- "NMEA packet without checksum",
- "$PSRF105,1\r\n",
- 12,
- 0,
- NMEA_PACKET,
- },
- {
- "NMEA packet with wrong checksum",
- "$GPVTG,308.74,T,,M,0.00,N,0.0,K*28\r\n",
- 36,
- 0,
- BAD_PACKET,
- },
- /* SiRF tests */
- {
- "SiRF WAAS version ID",
- {
- 0xA0, 0xA2, 0x00, 0x15,
- 0x06, 0x06, 0x31, 0x2E, 0x32, 0x2E, 0x30, 0x44,
- 0x4B, 0x49, 0x54, 0x31, 0x31, 0x39, 0x20, 0x53,
- 0x4D, 0x00, 0x00, 0x00, 0x00,
- 0x03, 0x82, 0xB0, 0xB3},
- 29,
- 0,
- SIRF_PACKET,
- },
- {
- "SiRF WAAS version ID with 3 chars of leading garbage",
- {
- 0xff, 0x00, 0xff,
- 0xA0, 0xA2, 0x00, 0x15,
- 0x06, 0x06, 0x31, 0x2E, 0x32, 0x2E, 0x30, 0x44,
- 0x4B, 0x49, 0x54, 0x31, 0x31, 0x39, 0x20, 0x53,
- 0x4D, 0x00, 0x00, 0x00, 0x00,
- 0x03, 0x82, 0xB0, 0xB3},
- 32,
- 3,
- SIRF_PACKET,
- },
- {
- "SiRF WAAS version ID with wrong checksum",
- {
- 0xA0, 0xA2, 0x00, 0x15,
- 0x06, 0x06, 0x31, 0x2E, 0x32, 0x2E, 0x30, 0x44,
- 0x4B, 0x49, 0x54, 0x31, 0x31, 0x39, 0x20, 0x53,
- 0x4D, 0x00, 0x00, 0x00, 0x00,
- 0x03, 0x00, 0xB0, 0xB3},
- 29,
- 0,
- BAD_PACKET,
- },
- {
- "SiRF WAAS version ID with bad length",
- {
- 0xA0, 0xA2, 0xff, 0x15,
- 0x06, 0x06, 0x31, 0x2E, 0x32, 0x2E, 0x30, 0x44,
- 0x4B, 0x49, 0x54, 0x31, 0x31, 0x39, 0x20, 0x53,
- 0x4D, 0x00, 0x00, 0x00, 0x00,
- 0x03, 0x82, 0xB0, 0xB3},
- 29,
- 0,
- BAD_PACKET,
- },
- /* Zodiac tests */
- {
- "Zodiac binary 1000 Geodetic Status Output Message",
- {
- 0xff, 0x81, 0xe8, 0x03, 0x31, 0x00, 0x00, 0x00, 0xe8, 0x79,
- 0x74, 0x0e, 0x00, 0x00, 0x24, 0x00, 0x24, 0x00, 0x04, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x03, 0x23, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x06, 0x00,
- 0xcd, 0x07, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x7b, 0x0d,
- 0x00, 0x00, 0x12, 0x6b, 0xa7, 0x04, 0x41, 0x75, 0x32, 0xf8,
- 0x03, 0x1f, 0x00, 0x00, 0xe6, 0xf2, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x11, 0xf6, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40,
- 0xd9, 0x12, 0x90, 0xd0, 0x03, 0x00, 0x00, 0xa3, 0xe1, 0x11,
- 0x10, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa3, 0xe1, 0x11,
- 0x00, 0x00, 0x00, 0x00, 0xe0, 0x93, 0x04, 0x00, 0x04, 0xaa},
- 110,
- 0,
- ZODIAC_PACKET,
- },
- /* EverMore tests */
- {
- "EverMore status packet 0x20",
- {
- 0x10, 0x02, 0x0D, 0x20, 0xE1, 0x00, 0x00, 0x00,
- 0x0A, 0x00, 0x1E, 0x00, 0x32, 0x00, 0x5b, 0x10,
- 0x03},
- 17,
- 0,
- EVERMORE_PACKET,
- },
- {
- "EverMore packet 0x04 with 0x10 0x10 sequence",
- {
- 0x10, 0x02, 0x0f, 0x04, 0x00, 0x00, 0x10, 0x10,
- 0xa7, 0x13, 0x03, 0x2c, 0x26, 0x24, 0x0a, 0x17,
- 0x00, 0x68, 0x10, 0x03},
- 20,
- 0,
- EVERMORE_PACKET,
- },
- {
- "EverMore packet 0x04 with 0x10 0x10 sequence, some noise before packet data",
- {
- 0x10, 0x03, 0xff, 0x10, 0x02, 0x0f, 0x04, 0x00,
- 0x00, 0x10, 0x10, 0xa7, 0x13, 0x03, 0x2c, 0x26,
- 0x24, 0x0a, 0x17, 0x00, 0x68, 0x10, 0x03},
- 23,
- 3,
- EVERMORE_PACKET,
- },
- {
- "EverMore packet 0x04, 0x10 and some other data at the begining",
- {
- 0x10, 0x12, 0x10, 0x03, 0xff, 0x10, 0x02, 0x0f,
- 0x04, 0x00, 0x00, 0x10, 0x10, 0xa7, 0x13, 0x03,
- 0x2c, 0x26, 0x24, 0x0a, 0x17, 0x00, 0x68, 0x10,
- 0x03},
- 25,
- 5,
- EVERMORE_PACKET,
- },
- {
- "EverMore packet 0x04, 0x10 three times at the begining",
- {
- 0x10, 0x10, 0x10, 0x29, 0x01, 0x0B, 0x00, 0x01,
- 0x23, 0x0A, 0x16, 0x22, 0xe0, 0x10, 0x03, 0xff,
- 0x10, 0x02, 0x0f, 0x04, 0x00, 0x00, 0x10, 0x10,
- 0xa7, 0x13, 0x03, 0x2c, 0x26, 0x24, 0x0a, 0x17,
- 0x00, 0x68, 0x10, 0x03},
- 36,
- 16,
- EVERMORE_PACKET,
- },
- };
- /*@ +initallelements -charint +usedef @*/
-
struct map *mp;
int failcount = 0;
+ int option, singletest = 0;
- if (argc > 1)
- verbose = atoi(argv[1]);
+ verbose = 0;
+ while ((option = getopt(argc, argv, "t:v:")) != -1) {
+ switch (option) {
+ case 't':
+ singletest = atoi(optarg);
+ break;
+ case 'v':
+ verbose = atoi(optarg);
+ break;
+ }
+ }
- for (mp = tests; mp < tests + sizeof(tests)/sizeof(tests[0]); mp++)
- failcount += packet_test(mp);
+ if (singletest)
+ failcount += packet_test(tests + singletest - 1);
+ else
+ for (mp = tests; mp < tests + sizeof(tests)/sizeof(tests[0]); mp++)
+ failcount += packet_test(mp);
exit(failcount > 0);
}