mirror of
https://github.com/usmannasir/cyberpanel.git
synced 2026-02-25 16:00:43 +01:00
147 lines
6.2 KiB
C++
147 lines
6.2 KiB
C++
/*****************************************************************************
|
|
* Open LiteSpeed is an open source HTTP server. *
|
|
* Copyright (C) 2013 - 2015 LiteSpeed Technologies, Inc. *
|
|
* *
|
|
* This program is free software: you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation, either version 3 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
* GNU General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU General Public License *
|
|
* along with this program. If not, see http://www.gnu.org/licenses/. *
|
|
*****************************************************************************/
|
|
#ifdef RUN_TEST
|
|
|
|
#include <lsr/ls_xpool.h>
|
|
#include <http/httprange.h>
|
|
#include <http/httpstatuscode.h>
|
|
#include <string.h>
|
|
#include "unittest-cpp/UnitTest++.h"
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
SUITE(YourSuitqqqqeName)
|
|
{
|
|
|
|
TEST(httprange_test)
|
|
{
|
|
int el = 2000;
|
|
ls_xpool_t * pool = ls_xpool_new();
|
|
HttpRange *range;
|
|
|
|
printf("Start HttpRange Test\n");
|
|
|
|
range = new(ls_xpool_alloc(pool, sizeof(HttpRange))) HttpRange(el);
|
|
|
|
const char *psRange = "bytes= 0 -\t0\t ,1234-23456,-10,10-,1999-1999";
|
|
CHECK(range->parse(psRange, pool) == 0);
|
|
CHECK(range->count() == 5);
|
|
|
|
off_t b, e;
|
|
CHECK(range->getContentOffset(0, b, e) == 0);
|
|
CHECK(b == 0);
|
|
CHECK(e == 1);
|
|
CHECK(range->getContentOffset(1, b, e) == 0);
|
|
CHECK(b == 1234);
|
|
CHECK(e == el);
|
|
CHECK(range->getContentOffset(2, b, e) == 0);
|
|
CHECK(b == el - 10);
|
|
CHECK(e == el);
|
|
CHECK(range->getContentOffset(3, b, e) == 0);
|
|
CHECK(b == 10);
|
|
CHECK(e == el);
|
|
CHECK(range->getContentOffset(4, b, e) == 0);
|
|
CHECK(b == 1999);
|
|
CHECK(e == el);
|
|
|
|
char crs[1000];
|
|
int len;
|
|
range->beginMultipart();
|
|
CHECK(len = range->getPartHeader(0, "text/html", crs, 1000));
|
|
int partLen = range->getPartLen(0, 9);
|
|
CHECK(partLen == len + 1);
|
|
CHECK(len = range->getPartHeader(1, "text/html", crs, 1000));
|
|
partLen = range->getPartLen(1, 9);
|
|
CHECK(partLen == len + 2000 - 1234);
|
|
|
|
CHECK(range->getContentRangeString(0, crs, 99) > 0);
|
|
CHECK(strcmp(crs, "Content-Range: bytes 0-0/2000\r\n") == 0);
|
|
CHECK(range->getContentRangeString(1, crs, 99) > 0);
|
|
CHECK(strcmp(crs, "Content-Range: bytes 1234-1999/2000\r\n") == 0);
|
|
CHECK(range->getContentRangeString(2, crs, 99) > 0);
|
|
CHECK(strcmp(crs, "Content-Range: bytes 1990-1999/2000\r\n") == 0);
|
|
CHECK(range->getContentRangeString(3, crs, 99) > 0);
|
|
CHECK(strcmp(crs, "Content-Range: bytes 10-1999/2000\r\n") == 0);
|
|
CHECK(range->getContentRangeString(4, crs, 38) > 0);
|
|
CHECK(strcmp(crs, "Content-Range: bytes 1999-1999/2000\r\n") == 0);
|
|
CHECK(range->getContentRangeString(5, crs, 30) > 0);
|
|
CHECK(strcmp(crs, "Content-Range: bytes */2000\r\n") == 0);
|
|
CHECK(range->getContentRangeString(4, crs, 37) == -1);
|
|
CHECK(range->getContentRangeString(5, crs, 29) == -1);
|
|
|
|
|
|
range->setContentLen(-1);
|
|
CHECK(range->getContentRangeString(0, crs, 99) > 0);
|
|
CHECK(strcmp(crs, "Content-Range: bytes 0-0/*\r\n") == 0);
|
|
CHECK(range->getContentRangeString(1, crs, 99) > 0);
|
|
CHECK(strcmp(crs, "Content-Range: bytes 1234-1999/*\r\n") == 0);
|
|
CHECK(range->getContentRangeString(2, crs, 99) > 0);
|
|
CHECK(strcmp(crs, "Content-Range: bytes 1990-1999/*\r\n") == 0);
|
|
CHECK(range->getContentRangeString(3, crs, 99) > 0);
|
|
CHECK(strcmp(crs, "Content-Range: bytes 10-1999/*\r\n") == 0);
|
|
CHECK(range->getContentRangeString(4, crs, 38) > 0);
|
|
CHECK(strcmp(crs, "Content-Range: bytes 1999-1999/*\r\n") == 0);
|
|
|
|
const char *psInSatified = "bytes=2000-2000,4423-123495";
|
|
range->setContentLen(2000);
|
|
CHECK(range->parse(psInSatified, pool) == SC_416);
|
|
const char *psSimple = "bytes=10-20";
|
|
CHECK(range->parse(psSimple, pool) == 0);
|
|
|
|
HttpRange *range1;
|
|
range1 = new(ls_xpool_alloc(pool, sizeof(HttpRange))) HttpRange(el);
|
|
range1->setContentLen(2000);
|
|
const char *psBad1 = "bytes=--10";
|
|
const char *psBad2 = "bytes=10--2345";
|
|
const char *psBad3 = "bytes=10,";
|
|
const char *psBad4 = "bytes=10 3-231";
|
|
const char *psBad5 = "bytes=1-234 2";
|
|
const char *psBad6 = "bytes=,1-2";
|
|
const char *psBad7 = "bytes=-,1-2";
|
|
const char *psBad8 = "bytes=1-2,,";
|
|
const char *psBad9 = "bytes=1-2, 3 ,";
|
|
const char *psBad10 = "bytes=1234-1123";
|
|
CHECK(range1->parse(psBad1, pool) == SC_400);
|
|
CHECK(range1->parse(psBad2, pool) == SC_400);
|
|
CHECK(range1->parse(psBad3, pool) == SC_400);
|
|
CHECK(range1->parse(psBad4, pool) == SC_400);
|
|
CHECK(range1->parse(psBad5, pool) == SC_400);
|
|
CHECK(range1->parse(psBad6, pool) == SC_400);
|
|
CHECK(range1->parse(psBad7, pool) == SC_400);
|
|
CHECK(range1->parse(psBad8, pool) == SC_400);
|
|
CHECK(range1->parse(psBad9, pool) == SC_400);
|
|
CHECK(range1->parse(psBad10, pool) == SC_400);
|
|
|
|
HttpRange *range2;
|
|
range2 = new(ls_xpool_alloc(pool, sizeof(HttpRange))) HttpRange(1447936);
|
|
const char *pdfRange =
|
|
"bytes=1409802-1439801, 1439802-1447935, 3855-31023, "
|
|
"31024-61023, 61024-91023, 91024-121023, 121024-151023, 151024-165400";
|
|
int ret = range2->parse(pdfRange, pool);
|
|
CHECK(ret == 0);
|
|
|
|
ls_xpool_delete(pool);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
#endif
|