diff options
Diffstat (limited to 'tests/bgpd/test_capability.c')
| -rw-r--r-- | tests/bgpd/test_capability.c | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/tests/bgpd/test_capability.c b/tests/bgpd/test_capability.c index e8700a8b4a..a5092708e2 100644 --- a/tests/bgpd/test_capability.c +++ b/tests/bgpd/test_capability.c @@ -796,14 +796,15 @@ static void parse_test(struct peer *peer, struct test_segment *t, int type) int oldfailed = failed; int len = t->len; #define RANDOM_FUZZ 35 - stream_reset(peer->ibuf); - stream_put(peer->ibuf, NULL, RANDOM_FUZZ); - stream_set_getp(peer->ibuf, RANDOM_FUZZ); + + stream_reset(peer->curr); + stream_put(peer->curr, NULL, RANDOM_FUZZ); + stream_set_getp(peer->curr, RANDOM_FUZZ); switch (type) { case CAPABILITY: - stream_putc(peer->ibuf, BGP_OPEN_OPT_CAP); - stream_putc(peer->ibuf, t->len); + stream_putc(peer->curr, BGP_OPEN_OPT_CAP); + stream_putc(peer->curr, t->len); break; case DYNCAP: /* for (i = 0; i < BGP_MARKER_SIZE; i++) @@ -812,7 +813,7 @@ static void parse_test(struct peer *peer, struct test_segment *t, int type) stream_putc (s, BGP_MSG_CAPABILITY);*/ break; } - stream_write(peer->ibuf, t->data, t->len); + stream_write(peer->curr, t->data, t->len); printf("%s: %s\n", t->name, t->desc); @@ -825,7 +826,7 @@ static void parse_test(struct peer *peer, struct test_segment *t, int type) as4 = peek_for_as4_capability(peer, len); printf("peek_for_as4: as4 is %u\n", as4); /* and it should leave getp as it found it */ - assert(stream_get_getp(peer->ibuf) == RANDOM_FUZZ); + assert(stream_get_getp(peer->curr) == RANDOM_FUZZ); ret = bgp_open_option_parse(peer, len, &capability); break; @@ -837,7 +838,7 @@ static void parse_test(struct peer *peer, struct test_segment *t, int type) exit(1); } - if (!ret && t->validate_afi) { + if (ret != BGP_Stop && t->validate_afi) { afi_t afi; safi_t safi; @@ -865,10 +866,20 @@ static void parse_test(struct peer *peer, struct test_segment *t, int type) failed++; } + /* + * Some of the functions used return BGP_Stop on error and some return + * -1. If we have -1, keep it; if we have BGP_Stop, transform it to the + * correct pass/fail code + */ + if (ret != -1) + ret = (ret == BGP_Stop) ? -1 : 0; + printf("parsed?: %s\n", ret ? "no" : "yes"); - if (ret != t->parses) + if (ret != t->parses) { + printf("t->parses: %d\nret: %d\n", t->parses, ret); failed++; + } if (tty) printf("%s", @@ -919,6 +930,8 @@ int main(void) peer->afc_adv[i][j] = 1; } + peer->curr = stream_new(BGP_MAX_PACKET_SIZE); + i = 0; while (mp_segments[i].name) parse_test(peer, &mp_segments[i++], CAPABILITY); |
