Squid Web Cache master
Loading...
Searching...
No Matches
testHttpRange.cc
Go to the documentation of this file.
1/*
2 * Copyright (C) 1996-2025 The Squid Software Foundation and contributors
3 *
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
7 */
8
9#include "squid.h"
10#include "compat/cppunit.h"
11#include "HttpHeaderRange.h"
12#include "HttpHeaderTools.h"
13#include "unitTestMain.h"
14
15class TestHttpRange : public CPPUNIT_NS::TestFixture
16{
22
23protected:
24 void testRangeParser();
25 void testRangeParsing(char const *rangestring);
26 void testRangeIter();
28};
30
31void
33{
34 testRangeParsing("bytes=0-3");
35 testRangeParsing("bytes=-3");
36 testRangeParsing("bytes=1-");
37 testRangeParsing("bytes=0-3, 1-, -2");
38}
39
40void
41TestHttpRange::testRangeParsing(char const *rangestring)
42{
43 String aString (rangestring);
44 HttpHdrRange *range = HttpHdrRange::ParseCreate (&aString);
45
46 if (!range)
47 exit(EXIT_FAILURE);
48
49 HttpHdrRange copy(*range);
50
51 CPPUNIT_ASSERT_EQUAL(range->specs.size(), copy.specs.size());
52
53 HttpHdrRange::iterator pos = range->begin();
54
55 CPPUNIT_ASSERT(*pos);
56
57 delete range;
58}
59
60static HttpHdrRange *
61rangeFromString(char const *rangestring)
62{
63 String aString (rangestring);
64 HttpHdrRange *range = HttpHdrRange::ParseCreate (&aString);
65
66 if (!range)
67 exit(EXIT_FAILURE);
68
69 return range;
70}
71
72void
74{
75 HttpHdrRange *range=rangeFromString("bytes=0-3, 1-, -2");
76 CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), range->specs.size());
77 size_t counter = 0;
78 HttpHdrRange::iterator i = range->begin();
79
80 while (i != range->end()) {
81 ++counter;
82 ++i;
83 }
84
85 CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), counter);
86 i = range->begin();
87 CPPUNIT_ASSERT_EQUAL(static_cast<ptrdiff_t>(0), i - range->begin());
88 ++i;
89 CPPUNIT_ASSERT_EQUAL(static_cast<ptrdiff_t>(1), i - range->begin());
90 CPPUNIT_ASSERT_EQUAL(static_cast<ptrdiff_t>(-2), i - range->end());
91}
92
93void
95{
96 HttpHdrRange *range=rangeFromString("bytes=0-3, 1-, -2");
97 CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), range->specs.size());
98
99 /* 0-3 needs a content length of 4 */
100 /* This passes in the extant code - but should it? */
101
102 if (!range->canonize(3))
103 exit(EXIT_FAILURE);
104
105 CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), range->specs.size());
106
107 delete range;
108
109 range=rangeFromString("bytes=0-3, 1-, -2");
110
111 CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), range->specs.size());
112
113 /* 0-3 needs a content length of 4 */
114 if (!range->canonize(4))
115 exit(EXIT_FAILURE);
116
117 delete range;
118
119 range=rangeFromString("bytes=3-6");
120
121 CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), range->specs.size());
122
123 /* 3-6 needs a content length of 4 or more */
124 if (range->canonize(3))
125 exit(EXIT_FAILURE);
126
127 delete range;
128
129 range=rangeFromString("bytes=3-6");
130
131 CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), range->specs.size());
132
133 /* 3-6 needs a content length of 4 or more */
134 if (!range->canonize(4))
135 exit(EXIT_FAILURE);
136
137 delete range;
138
139 range=rangeFromString("bytes=1-1,2-3");
140
141 CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), range->specs.size());
142
143 if (!range->canonize(4))
144 exit(EXIT_FAILURE);
145
146 CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), range->specs.size());
147
148 delete range;
149}
150
151int
152main(int argc, char *argv[])
153{
154 return TestProgram().run(argc, argv);
155}
156
int canonize(int64_t)
std::vector< HttpHdrRangeSpec * >::iterator iterator
iterator begin()
iterator end()
std::vector< HttpHdrRangeSpec * > specs
static HttpHdrRange * ParseCreate(const String *range_spec)
CPPUNIT_TEST(testRangeCanonization)
void testRangeParsing(char const *rangestring)
CPPUNIT_TEST(testRangeParser)
void testRangeParser()
void testRangeCanonization()
CPPUNIT_TEST(testRangeIter)
CPPUNIT_TEST_SUITE(TestHttpRange)
implements test program's main() function while enabling customization
int run(int argc, char *argv[])
int main()
CPPUNIT_TEST_SUITE_REGISTRATION(TestHttpRange)
static HttpHdrRange * rangeFromString(char const *rangestring)