1a74702c6SGeorge Wang/* Copyright (c) 2017 - 2022 LiteSpeed Technologies Inc. See LICENSE. */ 25392f7a3SLiteSpeed Tech#include <assert.h> 35392f7a3SLiteSpeed Tech#include <stdio.h> 45392f7a3SLiteSpeed Tech#include <stdlib.h> 55392f7a3SLiteSpeed Tech#include <string.h> 65392f7a3SLiteSpeed Tech#ifndef WIN32 75392f7a3SLiteSpeed Tech#include <sys/time.h> 85392f7a3SLiteSpeed Tech#endif 95392f7a3SLiteSpeed Tech 105392f7a3SLiteSpeed Tech#include "lsquic.h" 115392f7a3SLiteSpeed Tech#include "lsquic_types.h" 125392f7a3SLiteSpeed Tech#include "lsquic_parse.h" 135392f7a3SLiteSpeed Tech 145392f7a3SLiteSpeed Techstatic const struct parse_funcs *const pf = select_pf_by_ver(LSQVER_041); 155392f7a3SLiteSpeed Tech 165392f7a3SLiteSpeed Tech 175392f7a3SLiteSpeed Tech/* The test is both for generation and parsing: */ 185392f7a3SLiteSpeed Techstruct rst_stream_test { 195392f7a3SLiteSpeed Tech unsigned char buf[0x20]; 205392f7a3SLiteSpeed Tech size_t buf_len; 215392f7a3SLiteSpeed Tech lsquic_stream_id_t stream_id; 225392f7a3SLiteSpeed Tech uint64_t offset; 235392f7a3SLiteSpeed Tech uint32_t error_code; 245392f7a3SLiteSpeed Tech}; 255392f7a3SLiteSpeed Tech 265392f7a3SLiteSpeed Techstatic const struct rst_stream_test rst_stream_tests[] = { 275392f7a3SLiteSpeed Tech { 285392f7a3SLiteSpeed Tech .buf = { 0x01, 295392f7a3SLiteSpeed Tech 0x00, 0x67, 0x45, 0x34, 305392f7a3SLiteSpeed Tech 0x00, 0x00, 0x00, 0x03, 315392f7a3SLiteSpeed Tech 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 325392f7a3SLiteSpeed Tech }, 335392f7a3SLiteSpeed Tech .buf_len = GQUIC_RST_STREAM_SZ, 345392f7a3SLiteSpeed Tech .stream_id = 0x674534, 355392f7a3SLiteSpeed Tech .offset = 0x0102030405, 365392f7a3SLiteSpeed Tech .error_code = 0x03, 375392f7a3SLiteSpeed Tech }, 385392f7a3SLiteSpeed Tech 395392f7a3SLiteSpeed Tech { .buf = { 0 }, } 405392f7a3SLiteSpeed Tech}; 415392f7a3SLiteSpeed Tech 425392f7a3SLiteSpeed Tech 435392f7a3SLiteSpeed Techstatic void 445392f7a3SLiteSpeed Techrun_parse_tests (void) 455392f7a3SLiteSpeed Tech{ 465392f7a3SLiteSpeed Tech const struct rst_stream_test *test; 475392f7a3SLiteSpeed Tech for (test = rst_stream_tests; test->buf[0]; ++test) 485392f7a3SLiteSpeed Tech { 495392f7a3SLiteSpeed Tech lsquic_stream_id_t stream_id = ~0; 505392f7a3SLiteSpeed Tech uint64_t offset = ~0; 515392f7a3SLiteSpeed Tech uint32_t error_code = ~0; 525392f7a3SLiteSpeed Tech int sz = pf->pf_parse_rst_frame(test->buf, test->buf_len, &stream_id, &offset, &error_code); 535392f7a3SLiteSpeed Tech assert(sz == GQUIC_RST_STREAM_SZ); 545392f7a3SLiteSpeed Tech assert(stream_id == test->stream_id); 555392f7a3SLiteSpeed Tech assert(offset == test->offset); 565392f7a3SLiteSpeed Tech assert(error_code == test->error_code); 575392f7a3SLiteSpeed Tech } 585392f7a3SLiteSpeed Tech} 595392f7a3SLiteSpeed Tech 605392f7a3SLiteSpeed Tech 615392f7a3SLiteSpeed Techstatic void 625392f7a3SLiteSpeed Techrun_gen_tests (void) 635392f7a3SLiteSpeed Tech{ 645392f7a3SLiteSpeed Tech const struct rst_stream_test *test; 655392f7a3SLiteSpeed Tech for (test = rst_stream_tests; test->buf[0]; ++test) 665392f7a3SLiteSpeed Tech { 675392f7a3SLiteSpeed Tech unsigned char buf[0x100]; 685392f7a3SLiteSpeed Tech int sz = pf->pf_gen_rst_frame(buf, test->buf_len, test->stream_id, test->offset, test->error_code); 695392f7a3SLiteSpeed Tech assert(sz == GQUIC_RST_STREAM_SZ); 705392f7a3SLiteSpeed Tech assert(0 == memcmp(buf, test->buf, sz)); 715392f7a3SLiteSpeed Tech } 725392f7a3SLiteSpeed Tech} 735392f7a3SLiteSpeed Tech 745392f7a3SLiteSpeed Tech 755392f7a3SLiteSpeed Techint 765392f7a3SLiteSpeed Techmain (void) 775392f7a3SLiteSpeed Tech{ 785392f7a3SLiteSpeed Tech run_parse_tests(); 795392f7a3SLiteSpeed Tech run_gen_tests(); 805392f7a3SLiteSpeed Tech return 0; 815392f7a3SLiteSpeed Tech} 82