Annotation of embedaddon/quagga/tests/ecommunity_test.c, revision 1.1
1.1 ! misho 1: #include <zebra.h>
! 2:
! 3: #include "vty.h"
! 4: #include "stream.h"
! 5: #include "privs.h"
! 6: #include "memory.h"
! 7:
! 8: #include "bgpd/bgpd.h"
! 9: #include "bgpd/bgp_ecommunity.h"
! 10:
! 11: /* need these to link in libbgp */
! 12: struct zebra_privs_t *bgpd_privs = NULL;
! 13: struct thread_master *master = NULL;
! 14:
! 15: static int failed = 0;
! 16:
! 17: /* specification for a test - what the results should be */
! 18: struct test_spec
! 19: {
! 20: const char *shouldbe; /* the string the path should parse to */
! 21: };
! 22:
! 23:
! 24: /* test segments to parse and validate, and use for other tests */
! 25: static struct test_segment {
! 26: const char *name;
! 27: const char *desc;
! 28: const u_char data[1024];
! 29: int len;
! 30: struct test_spec sp;
! 31: } test_segments [] =
! 32: {
! 33: { /* 0 */
! 34: "ipaddr",
! 35: "rt 1.2.3.4:257",
! 36: { ECOMMUNITY_ENCODE_IP, ECOMMUNITY_ROUTE_TARGET,
! 37: 0x1,0x2,0x3,0x4, 0x1,0x1 },
! 38: 8,
! 39: { "rt 1.2.3.4:257" }
! 40: },
! 41: { /* 1 */
! 42: "ipaddr-so",
! 43: "soo 1.2.3.4:257",
! 44: { ECOMMUNITY_ENCODE_IP, ECOMMUNITY_SITE_ORIGIN,
! 45: 0x1,0x2,0x3,0x4, 0x1,0x1},
! 46: 8,
! 47: { "soo 1.2.3.4:257" }
! 48: },
! 49: { /* 2 */
! 50: "asn",
! 51: "rt 23456:987654321",
! 52: { ECOMMUNITY_ENCODE_AS, ECOMMUNITY_SITE_ORIGIN,
! 53: 0x5b,0xa0, 0x3a,0xde,0x68,0xb1 },
! 54: 8,
! 55: { "soo 23456:987654321" }
! 56: },
! 57: { /* 3 */
! 58: "asn4",
! 59: "rt 168450976:4321",
! 60: { ECOMMUNITY_ENCODE_AS4, ECOMMUNITY_SITE_ORIGIN,
! 61: 0xa,0xa,0x5b,0xa0, 0x10,0xe1 },
! 62: 8,
! 63: { "soo 168450976:4321" }
! 64: },
! 65: { NULL, NULL, {0}, 0, { NULL } }
! 66: };
! 67:
! 68:
! 69: /* validate the given aspath */
! 70: static int
! 71: validate (struct ecommunity *ecom, const struct test_spec *sp)
! 72: {
! 73: int fails = 0;
! 74: struct ecommunity *etmp;
! 75: char *str1, *str2;
! 76:
! 77: printf ("got:\n %s\n", ecommunity_str (ecom));
! 78: str1 = ecommunity_ecom2str (ecom, ECOMMUNITY_FORMAT_COMMUNITY_LIST);
! 79: etmp = ecommunity_str2com (str1, 0, 1);
! 80: if (etmp)
! 81: str2 = ecommunity_ecom2str (etmp, ECOMMUNITY_FORMAT_COMMUNITY_LIST);
! 82: else
! 83: str2 = NULL;
! 84:
! 85: if (strcmp (sp->shouldbe, str1))
! 86: {
! 87: failed++;
! 88: fails++;
! 89: printf ("shouldbe: %s\n%s\n", str1, sp->shouldbe);
! 90: }
! 91: if (!etmp || strcmp (str1, str2))
! 92: {
! 93: failed++;
! 94: fails++;
! 95: printf ("dogfood: in %s\n"
! 96: " in->out %s\n",
! 97: str1,
! 98: (etmp && str2) ? str2 : "NULL");
! 99: }
! 100: ecommunity_free (etmp);
! 101: XFREE (MTYPE_ECOMMUNITY_STR, str1);
! 102: XFREE (MTYPE_ECOMMUNITY_STR, str2);
! 103:
! 104: return fails;
! 105: }
! 106:
! 107: /* basic parsing test */
! 108: static void
! 109: parse_test (struct test_segment *t)
! 110: {
! 111: struct ecommunity *ecom;
! 112:
! 113: printf ("%s: %s\n", t->name, t->desc);
! 114:
! 115: ecom = ecommunity_parse (t->data, t->len);
! 116:
! 117: printf ("ecom: %s\nvalidating...:\n", ecommunity_str (ecom));
! 118:
! 119: if (!validate (ecom, &t->sp))
! 120: printf ("OK\n");
! 121: else
! 122: printf ("failed\n");
! 123:
! 124: printf ("\n");
! 125: ecommunity_unintern (ecom);
! 126: }
! 127:
! 128:
! 129: int
! 130: main (void)
! 131: {
! 132: int i = 0;
! 133: ecommunity_init();
! 134: while (test_segments[i].name)
! 135: parse_test (&test_segments[i++]);
! 136:
! 137: printf ("failures: %d\n", failed);
! 138: //printf ("aspath count: %ld\n", aspath_count());
! 139: return failed;
! 140: //return (failed + aspath_count());
! 141: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>