diff --git a/wire/test/run-tlvstream.c b/wire/test/run-tlvstream.c index 2535851ae..a63e69d90 100644 --- a/wire/test/run-tlvstream.c +++ b/wire/test/run-tlvstream.c @@ -4,12 +4,15 @@ #include #include +#include #include +#include static const char *reason; #undef SUPERVERBOSE #define SUPERVERBOSE(r) do { reason = (r); } while(0) +#include #include #include #include @@ -17,227 +20,6 @@ static const char *reason; /* AUTOGENERATED MOCKS START */ /* AUTOGENERATED MOCKS END */ -/* FIXME: Autogenerate these! */ -/* BOLT-EXPERIMENTAL #1: - * 1. tlvs: `n1` - * 2. types: - * 1. type: 1 (`tlv1`) - * 2. data: - * * [`tu64`:`amount_msat`] - * 1. type: 2 (`tlv2`) - * 2. data: - * * [`short_channel_id`:`scid`] - * 1. type: 3 (`tlv3`) - * 2. data: - * * [`point`:`node_id`] - * * [`u64`:`amount_msat_1`] - * * [`u64`:`amount_msat_2`] - * 1. type: 254 (`tlv4`) - * 2. data: - * * [`u16`:`cltv_delta`] - */ -struct tlv_n1_tlv1 { - u64 amount_msat; -}; - -struct tlv_n1_tlv2 { - struct short_channel_id scid; -}; - -struct tlv_n1_tlv3 { - struct pubkey node_id; - u64 amount_msat_1; - u64 amount_msat_2; -}; - -struct tlv_n1_tlv4 { - u16 cltv_delta; -}; - -struct tlv_n1 { - struct tlv_n1_tlv1 *tlv1; - struct tlv_n1_tlv2 *tlv2; - struct tlv_n1_tlv3 *tlv3; - struct tlv_n1_tlv4 *tlv4; -}; - -static struct tlv_n1 *tlv_n1_new(const tal_t *ctx) -{ - /* Initialize everything to NULL. (Quiet, C pedants!) */ - return talz(ctx, struct tlv_n1); -} - -static u8 *towire_tlv_n1_tlv1(const tal_t *ctx, const void *vrecord) -{ - const struct tlv_n1 *r = vrecord; - u8 *ptr; - - if (!r->tlv1) - return NULL; - - ptr = tal_arr(ctx, u8, 0); - towire_tu64(&ptr, r->tlv1->amount_msat); - return ptr; -} - -static u8 *towire_tlv_n1_tlv2(const tal_t *ctx, const void *vrecord) -{ - const struct tlv_n1 *r = vrecord; - u8 *ptr; - - if (!r->tlv2) - return NULL; - - ptr = tal_arr(ctx, u8, 0); - towire_short_channel_id(&ptr, &r->tlv2->scid); - return ptr; -} - -static u8 *towire_tlv_n1_tlv3(const tal_t *ctx, const void *vrecord) -{ - const struct tlv_n1 *r = vrecord; - u8 *ptr; - - if (!r->tlv3) - return NULL; - - ptr = tal_arr(ctx, u8, 0); - towire_pubkey(&ptr, &r->tlv3->node_id); - towire_u64(&ptr, r->tlv3->amount_msat_1); - towire_u64(&ptr, r->tlv3->amount_msat_2); - return ptr; -} - -static u8 *towire_tlv_n1_tlv4(const tal_t *ctx, const void *vrecord) -{ - const struct tlv_n1 *r = vrecord; - u8 *ptr; - - if (!r->tlv4) - return NULL; - - ptr = tal_arr(ctx, u8, 0); - towire_u16(&ptr, r->tlv4->cltv_delta); - return ptr; -} - -static void fromwire_tlv_n1_tlv1(const u8 **cursor, size_t *max, void *vrecord) -{ - struct tlv_n1 *r = vrecord; - - r->tlv1 = tal(r, struct tlv_n1_tlv1); - r->tlv1->amount_msat = fromwire_tu64(cursor, max); -} - -static void fromwire_tlv_n1_tlv2(const u8 **cursor, size_t *max, void *vrecord) -{ - struct tlv_n1 *r = vrecord; - - r->tlv2 = tal(r, struct tlv_n1_tlv2); - fromwire_short_channel_id(cursor, max, &r->tlv2->scid); -} - -static void fromwire_tlv_n1_tlv3(const u8 **cursor, size_t *max, void *vrecord) -{ - struct tlv_n1 *r = vrecord; - - r->tlv3 = tal(r, struct tlv_n1_tlv3); - - fromwire_pubkey(cursor, max, &r->tlv3->node_id); - r->tlv3->amount_msat_1 = fromwire_u64(cursor, max); - r->tlv3->amount_msat_2 = fromwire_u64(cursor, max); -} - -static void fromwire_tlv_n1_tlv4(const u8 **cursor, size_t *max, void *vrecord) -{ - struct tlv_n1 *r = vrecord; - - r->tlv4 = tal(r, struct tlv_n1_tlv4); - r->tlv4->cltv_delta = fromwire_u16(cursor, max); -} - -static const struct tlv_record_type tlvs_n1[] = { - { 1, towire_tlv_n1_tlv1, fromwire_tlv_n1_tlv1 }, - { 2, towire_tlv_n1_tlv2, fromwire_tlv_n1_tlv2 }, - { 3, towire_tlv_n1_tlv3, fromwire_tlv_n1_tlv3 }, - { 254, towire_tlv_n1_tlv4, fromwire_tlv_n1_tlv4 }, -}; - -/* BOLT-EXPERIMENTAL #1: - * 1. tlvs: `n2` - * 2. types: - * 1. type: 0 (`tlv1`) - * 2. data: - * * [`tu64`:`amount_msat`] - * 1. type: 11 (`tlv2`) - * 2. data: - * * [`tu32`:`cltv_expiry`] - */ -struct tlv_n2_tlv1 { - u64 amount_msat; -}; - -struct tlv_n2_tlv2 { - u16 cltv_expiry; -}; - -struct tlv_n2 { - struct tlv_n2_tlv1 *tlv1; - struct tlv_n2_tlv2 *tlv2; -}; - -static struct tlv_n2 *tlv_n2_new(const tal_t *ctx) -{ - /* Initialize everything to NULL. (Quiet, C pedants!) */ - return talz(ctx, struct tlv_n2); -} - -static u8 *towire_tlv_n2_tlv1(const tal_t *ctx, const void *vrecord) -{ - const struct tlv_n2 *r = vrecord; - u8 *ptr; - - if (!r->tlv1) - return NULL; - - ptr = tal_arr(ctx, u8, 0); - towire_tu64(&ptr, r->tlv1->amount_msat); - return ptr; -} - -static u8 *towire_tlv_n2_tlv2(const tal_t *ctx, const void *vrecord) -{ - const struct tlv_n2 *r = vrecord; - u8 *ptr; - - if (!r->tlv2) - return NULL; - - ptr = tal_arr(ctx, u8, 0); - towire_u16(&ptr, r->tlv2->cltv_expiry); - return ptr; -} - -static void fromwire_tlv_n2_tlv1(const u8 **cursor, size_t *max, void *vrecord) -{ - struct tlv_n2 *r = vrecord; - - r->tlv1 = tal(r, struct tlv_n2_tlv1); - r->tlv1->amount_msat = fromwire_tu64(cursor, max); -} - -static void fromwire_tlv_n2_tlv2(const u8 **cursor, size_t *max, void *vrecord) -{ - struct tlv_n2 *r = vrecord; - - r->tlv2 = tal(r, struct tlv_n2_tlv2); - r->tlv2->cltv_expiry = fromwire_u16(cursor, max); -} - -static const struct tlv_record_type tlvs_n2[] = { - { 0, towire_tlv_n2_tlv1, fromwire_tlv_n2_tlv1 }, - { 11, towire_tlv_n2_tlv2, fromwire_tlv_n2_tlv2 }, -}; /* BOLT #1 ### TLV Decoding Failures @@ -523,8 +305,8 @@ static struct tlv_n1_tlv1 tlv1_1099511627776 = { .amount_msat = 1099511627776ULL static struct tlv_n1_tlv1 tlv1_281474976710656 = { .amount_msat = 281474976710656ULL }; static struct tlv_n1_tlv1 tlv1_72057594037927936 = { .amount_msat = 72057594037927936ULL }; static struct tlv_n1_tlv2 tlv2_0x0x550 = { .scid.u64 = 0x000000000226 }; -/* node_id filled in at runtime. */ -static struct tlv_n1_tlv3 tlv3_node_id = { { { { 0 } } }, .amount_msat_1 = 1, .amount_msat_2 = 2 }; +/* filled in at runtime. */ +static struct tlv_n1_tlv3 tlv3_node_id; static struct tlv_n1_tlv4 tlv4_550 = { .cltv_delta = 550 }; static struct valid_stream valid_streams[] = { @@ -575,9 +357,11 @@ static bool tlv_n1_eq(const struct tlv_n1 *a, const struct tlv_n1 *b) return false; if (!pubkey_eq(&a->tlv3->node_id, &b->tlv3->node_id)) return false; - if (a->tlv3->amount_msat_1 != b->tlv3->amount_msat_1) + if (!amount_msat_eq(a->tlv3->amount_msat_1, + b->tlv3->amount_msat_1)) return false; - if (a->tlv3->amount_msat_2 != b->tlv3->amount_msat_2) + if (!amount_msat_eq(a->tlv3->amount_msat_2, + b->tlv3->amount_msat_2)) return false; } else if (b->tlv3) return false; @@ -660,6 +444,9 @@ int main(void) if (!pubkey_from_hexstr("023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb", 66, &tlv3_node_id.node_id)) abort(); + /* gcc 4.8 doesn't like this initialized statically. */ + tlv3_node_id.amount_msat_1 = AMOUNT_MSAT(1); + tlv3_node_id.amount_msat_2 = AMOUNT_MSAT(2); for (size_t i = 0; i < ARRAY_SIZE(invalid_streams_either); i++) { struct tlv_n1 *tlv_n1 = tlv_n1_new(tmpctx); @@ -670,13 +457,13 @@ int main(void) orig_p = stream(tmpctx, invalid_streams_either[i].hex); max = tal_count(orig_p); p = orig_p; - assert(!fromwire_tlvs(&p, &max, tlvs_n1, ARRAY_SIZE(tlvs_n1), + assert(!fromwire_tlvs(&p, &max, tlvs_n1, TLVS_N1_ARRAY_SIZE, tlv_n1)); assert(!p); assert(strstr(invalid_streams_either[i].reason, reason)); max = tal_count(orig_p); p = orig_p; - assert(!fromwire_tlvs(&p, &max, tlvs_n2, ARRAY_SIZE(tlvs_n2), + assert(!fromwire_tlvs(&p, &max, tlvs_n2, TLVS_N2_ARRAY_SIZE, tlv_n2)); assert(!p); assert(strstr(invalid_streams_either[i].reason, reason)); @@ -689,7 +476,7 @@ int main(void) p = stream(tmpctx, invalid_streams_n1[i].hex); max = tal_count(p); - assert(!fromwire_tlvs(&p, &max, tlvs_n1, ARRAY_SIZE(tlvs_n1), + assert(!fromwire_tlvs(&p, &max, tlvs_n1, TLVS_N1_ARRAY_SIZE, tlv_n1)); assert(!p); assert(strstr(invalid_streams_n1[i].reason, reason)); @@ -702,7 +489,7 @@ int main(void) p = stream(tmpctx, invalid_streams_n1_combo[i].hex); max = tal_count(p); - assert(!fromwire_tlvs(&p, &max, tlvs_n1, ARRAY_SIZE(tlvs_n1), + assert(!fromwire_tlvs(&p, &max, tlvs_n1, TLVS_N1_ARRAY_SIZE, tlv_n1)); assert(!p); assert(strstr(invalid_streams_n1_combo[i].reason, reason)); @@ -715,7 +502,7 @@ int main(void) p = stream(tmpctx, invalid_streams_n2_combo[i].hex); max = tal_count(p); - assert(!fromwire_tlvs(&p, &max, tlvs_n2, ARRAY_SIZE(tlvs_n2), + assert(!fromwire_tlvs(&p, &max, tlvs_n2, TLVS_N2_ARRAY_SIZE, tlv_n2)); assert(!p); assert(strstr(invalid_streams_n2_combo[i].reason, reason)); @@ -731,7 +518,7 @@ int main(void) max = tal_count(orig_p); p = orig_p; - assert(fromwire_tlvs(&p, &max, tlvs_n1, ARRAY_SIZE(tlvs_n1), + assert(fromwire_tlvs(&p, &max, tlvs_n1, TLVS_N1_ARRAY_SIZE, tlv_n1)); assert(p); assert(max == 0); @@ -743,7 +530,7 @@ int main(void) continue; p2 = tal_arr(tmpctx, u8, 0); - towire_tlvs(&p2, tlvs_n1, ARRAY_SIZE(tlvs_n1), tlv_n1); + towire_tlvs(&p2, tlvs_n1, TLVS_N1_ARRAY_SIZE, tlv_n1); assert(memeq(p2, tal_count(p2), orig_p, tal_count(orig_p))); } @@ -765,13 +552,13 @@ int main(void) max = tal_count(orig_p); p = orig_p; assert(!fromwire_tlvs(&p, &max, - tlvs_n1, ARRAY_SIZE(tlvs_n1), + tlvs_n1, TLVS_N1_ARRAY_SIZE, tlv_n1)); assert(!p); max = tal_count(orig_p); p = orig_p; assert(!fromwire_tlvs(&p, &max, - tlvs_n2, ARRAY_SIZE(tlvs_n2), + tlvs_n2, TLVS_N2_ARRAY_SIZE, tlv_n2)); assert(!p); } @@ -787,7 +574,7 @@ int main(void) invalid_streams_n1[i].hex); max = tal_count(p); assert(!fromwire_tlvs(&p, &max, - tlvs_n1, ARRAY_SIZE(tlvs_n1), + tlvs_n1, TLVS_N1_ARRAY_SIZE, tlv_n1)); assert(!p); } @@ -803,7 +590,7 @@ int main(void) invalid_streams_n1_combo[i].hex); max = tal_count(p); assert(!fromwire_tlvs(&p, &max, - tlvs_n1, ARRAY_SIZE(tlvs_n1), + tlvs_n1, TLVS_N1_ARRAY_SIZE, tlv_n1)); assert(!p); } @@ -835,7 +622,7 @@ int main(void) < pull_type(valid_streams[j].hex); assert(fromwire_tlvs(&p, &max, - tlvs_n1, ARRAY_SIZE(tlvs_n1), + tlvs_n1, TLVS_N1_ARRAY_SIZE, tlv_n1) == expect_success); if (!expect_success) @@ -848,7 +635,7 @@ int main(void) continue; u8 *p2 = tal_arr(tmpctx, u8, 0); - towire_tlvs(&p2, tlvs_n1, ARRAY_SIZE(tlvs_n1), tlv_n1); + towire_tlvs(&p2, tlvs_n1, TLVS_N1_ARRAY_SIZE, tlv_n1); assert(memeq(orig_p, tal_count(orig_p), p2, tal_count(p2))); }