Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1diff --git a/src/utest/utestHLS.cpp b/src/utest/utestHLS.cpp
2index ebfe67f3d..dc023b636 100644
3--- a/src/utest/utestHLS.cpp
4+++ b/src/utest/utestHLS.cpp
5@@ -20,9 +20,6 @@
6
7 class HLSTest: public tsunit::Test
8 {
9- TSUNIT_DECLARE_TEST(MasterPlaylist);
10- TSUNIT_DECLARE_TEST(MasterPlaylistWithAlternate);
11- TSUNIT_DECLARE_TEST(MediaPlaylist);
12 TSUNIT_DECLARE_TEST(BuildMasterPlaylist);
13 TSUNIT_DECLARE_TEST(BuildMediaPlaylist);
14
15@@ -61,176 +58,6 @@ void HLSTest::afterTest()
16 // Unitary tests.
17 //----------------------------------------------------------------------------
18
19-TSUNIT_DEFINE_TEST(MasterPlaylist)
20-{
21- // Test file downloaded from TSDuck web site.
22- // Copied from Apple test file at
23- // https://devstreaming-cdn.apple.com/videos/streaming/examples/img_bipbop_adv_example_ts/master.m3u8
24-
25- ts::hls::PlayList pl;
26- TSUNIT_ASSERT(pl.loadURL(u"https://tsduck.io/download/test/hls/img_bipbop_adv_example_ts/master.m3u8", true));
27- TSUNIT_ASSERT(pl.isValid());
28- TSUNIT_EQUAL(ts::hls::PlayListType::MASTER, pl.type());
29- TSUNIT_EQUAL(6, pl.version());
30- TSUNIT_EQUAL(u"https://tsduck.io/download/test/hls/img_bipbop_adv_example_ts/master.m3u8", pl.url());
31- ts::hls::MediaElement media;
32- pl.buildURL(media, u"foo.bar");
33- TSUNIT_EQUAL(u"foo.bar", media.relative_uri);
34- TSUNIT_EQUAL(u"/download/test/hls/img_bipbop_adv_example_ts/foo.bar", media.file_path);
35- TSUNIT_EQUAL(u"https://tsduck.io/download/test/hls/img_bipbop_adv_example_ts/foo.bar", media.url.toString());
36- TSUNIT_EQUAL(u"https://tsduck.io/download/test/hls/img_bipbop_adv_example_ts/foo.bar", media.urlString());
37- TSUNIT_EQUAL(0, pl.segmentCount());
38- TSUNIT_EQUAL(24, pl.playListCount());
39- TSUNIT_EQUAL(5, pl.altPlayListCount());
40- TSUNIT_EQUAL(0, pl.targetDuration().count());
41- TSUNIT_EQUAL(0, pl.mediaSequence());
42- TSUNIT_ASSERT(!pl.endList());
43- TSUNIT_EQUAL(ts::hls::PlayListType::MASTER, pl.type());
44-
45- TSUNIT_EQUAL(u"v5/prog_index.m3u8", pl.playList(0).relative_uri);
46- TSUNIT_EQUAL(2227464, pl.playList(0).bandwidth.toInt());
47- TSUNIT_EQUAL(2218327, pl.playList(0).average_bandwidth.toInt());
48- TSUNIT_EQUAL(960, pl.playList(0).width);
49- TSUNIT_EQUAL(540, pl.playList(0).height);
50- TSUNIT_EQUAL(60000, pl.playList(0).frame_rate);
51- TSUNIT_EQUAL(u"avc1.640020,mp4a.40.2", pl.playList(0).codecs);
52- TSUNIT_EQUAL(u"", pl.playList(0).hdcp);
53- TSUNIT_EQUAL(u"", pl.playList(0).video_range);
54- TSUNIT_EQUAL(u"", pl.playList(0).video);
55- TSUNIT_EQUAL(u"aud1", pl.playList(0).audio);
56- TSUNIT_EQUAL(u"sub1", pl.playList(0).subtitles);
57- TSUNIT_EQUAL(u"cc1", pl.playList(0).closed_captions);
58- TSUNIT_EQUAL(u"v5/prog_index.m3u8, 960x540, 2,227,464 b/s, @60 fps", pl.playList(0).toString());
59-
60- TSUNIT_EQUAL(u"v2/prog_index.m3u8", pl.playList(23).relative_uri);
61- TSUNIT_EQUAL(582387, pl.playList(23).bandwidth.toInt());
62- TSUNIT_EQUAL(570616, pl.playList(23).average_bandwidth.toInt());
63- TSUNIT_EQUAL(480, pl.playList(23).width);
64- TSUNIT_EQUAL(270, pl.playList(23).height);
65- TSUNIT_EQUAL(30000, pl.playList(23).frame_rate);
66- TSUNIT_EQUAL(u"avc1.640015,ec-3", pl.playList(23).codecs);
67- TSUNIT_EQUAL(u"", pl.playList(23).hdcp);
68- TSUNIT_EQUAL(u"", pl.playList(23).video_range);
69- TSUNIT_EQUAL(u"", pl.playList(23).video);
70- TSUNIT_EQUAL(u"aud3", pl.playList(23).audio);
71- TSUNIT_EQUAL(u"sub1", pl.playList(23).subtitles);
72- TSUNIT_EQUAL(u"cc1", pl.playList(23).closed_captions);
73- TSUNIT_EQUAL(u"v2/prog_index.m3u8, 480x270, 582,387 b/s, @30 fps", pl.playList(23).toString());
74-
75- TSUNIT_EQUAL(0, pl.selectPlayList(0, 0, 0, 0, 0, 0));
76- TSUNIT_EQUAL(ts::NPOS, pl.selectPlayList(10000000, 0, 0, 0, 0, 0));
77- TSUNIT_EQUAL(9, pl.selectPlayListHighestBitRate());
78- TSUNIT_EQUAL(7, pl.selectPlayListLowestBitRate());
79- TSUNIT_EQUAL(1, pl.selectPlayListHighestResolution());
80- TSUNIT_EQUAL(7, pl.selectPlayListLowestResolution());
81-}
82-
83-TSUNIT_DEFINE_TEST(MasterPlaylistWithAlternate)
84-{
85- // Test file downloaded from TSDuck web site.
86-
87- ts::hls::PlayList pl;
88- TSUNIT_ASSERT(pl.loadURL(u"https://tsduck.io/download/test/hls/alternative/index_hd.m3u8", true));
89- TSUNIT_ASSERT(pl.isValid());
90- TSUNIT_EQUAL(ts::hls::PlayListType::MASTER, pl.type());
91- TSUNIT_EQUAL(4, pl.version());
92- TSUNIT_EQUAL(u"https://tsduck.io/download/test/hls/alternative/index_hd.m3u8", pl.url());
93- TSUNIT_EQUAL(0, pl.segmentCount());
94- TSUNIT_EQUAL(7, pl.playListCount());
95- TSUNIT_EQUAL(2, pl.altPlayListCount());
96- TSUNIT_EQUAL(0, pl.targetDuration().count());
97- TSUNIT_EQUAL(0, pl.mediaSequence());
98- TSUNIT_ASSERT(!pl.endList());
99- TSUNIT_EQUAL(ts::hls::PlayListType::MASTER, pl.type());
100-
101- TSUNIT_EQUAL(u"04_hd.m3u8", pl.playList(0).relative_uri);
102- TSUNIT_EQUAL(1209781, pl.playList(0).bandwidth.toInt());
103- TSUNIT_EQUAL(768, pl.playList(0).width);
104- TSUNIT_EQUAL(432, pl.playList(0).height);
105- TSUNIT_EQUAL(25000, pl.playList(0).frame_rate);
106- TSUNIT_EQUAL(u"avc1.4D4020,mp4a.40.2", pl.playList(0).codecs);
107- TSUNIT_EQUAL(u"", pl.playList(0).hdcp);
108- TSUNIT_EQUAL(u"", pl.playList(0).video_range);
109- TSUNIT_EQUAL(u"", pl.playList(0).video);
110- TSUNIT_EQUAL(u"audio2", pl.playList(0).audio);
111- TSUNIT_EQUAL(u"", pl.playList(0).subtitles);
112- TSUNIT_EQUAL(u"", pl.playList(0).closed_captions);
113- TSUNIT_EQUAL(u"04_hd.m3u8, 768x432, 1,209,781 b/s, @25 fps", pl.playList(0).toString());
114-
115- TSUNIT_EQUAL(u"09_hd.m3u8", pl.altPlayList(0).relative_uri);
116- TSUNIT_EQUAL(u"AUDIO", pl.altPlayList(0).type);
117- TSUNIT_EQUAL(u"audio2", pl.altPlayList(0).group_id);
118- TSUNIT_EQUAL(u"ENG", pl.altPlayList(0).name);
119- TSUNIT_EQUAL(u"ENG", pl.altPlayList(0).language);
120- TSUNIT_EQUAL(u"", pl.altPlayList(0).stable_rendition_id);
121- TSUNIT_EQUAL(u"", pl.altPlayList(0).assoc_language);
122- TSUNIT_EQUAL(u"", pl.altPlayList(0).in_stream_id);
123- TSUNIT_EQUAL(u"", pl.altPlayList(0).characteristics);
124- TSUNIT_EQUAL(u"", pl.altPlayList(0).channels);
125- TSUNIT_ASSERT(pl.altPlayList(0).is_default);
126- TSUNIT_ASSERT(pl.altPlayList(0).auto_select);
127- TSUNIT_ASSERT(!pl.altPlayList(0).forced);
128-
129- TSUNIT_EQUAL(u"01_hd.m3u8", pl.altPlayList(1).relative_uri);
130- TSUNIT_EQUAL(u"AUDIO", pl.altPlayList(1).type);
131- TSUNIT_EQUAL(u"audio1", pl.altPlayList(1).group_id);
132- TSUNIT_EQUAL(u"FOO", pl.altPlayList(1).name);
133- TSUNIT_EQUAL(u"FOO", pl.altPlayList(1).language);
134- TSUNIT_EQUAL(u"", pl.altPlayList(1).stable_rendition_id);
135- TSUNIT_EQUAL(u"", pl.altPlayList(1).assoc_language);
136- TSUNIT_EQUAL(u"", pl.altPlayList(1).in_stream_id);
137- TSUNIT_EQUAL(u"", pl.altPlayList(1).characteristics);
138- TSUNIT_EQUAL(u"", pl.altPlayList(1).channels);
139- TSUNIT_ASSERT(!pl.altPlayList(1).is_default);
140- TSUNIT_ASSERT(!pl.altPlayList(1).auto_select);
141- TSUNIT_ASSERT(!pl.altPlayList(1).forced);
142-}
143-
144-TSUNIT_DEFINE_TEST(MediaPlaylist)
145-{
146- // Test file downloaded from TSDuck web site.
147- // Copied from Apple test file at
148- // https://devstreaming-cdn.apple.com/videos/streaming/examples/img_bipbop_adv_example_ts/v5/prog_index.m3u8
149-
150- ts::hls::PlayList pl;
151- TSUNIT_ASSERT(pl.loadURL(u"https://tsduck.io/download/test/hls/img_bipbop_adv_example_ts/v5/prog_index.m3u8", true));
152- TSUNIT_ASSERT(pl.isValid());
153- TSUNIT_EQUAL(ts::hls::PlayListType::VOD, pl.type());
154- TSUNIT_EQUAL(3, pl.version());
155- TSUNIT_EQUAL(u"https://tsduck.io/download/test/hls/img_bipbop_adv_example_ts/v5/prog_index.m3u8", pl.url());
156- ts::hls::MediaElement media;
157- pl.buildURL(media, u"foo.bar");
158- TSUNIT_EQUAL(u"https://tsduck.io/download/test/hls/img_bipbop_adv_example_ts/v5/foo.bar", media.urlString());
159- TSUNIT_EQUAL(100, pl.segmentCount());
160- TSUNIT_EQUAL(0, pl.playListCount());
161- TSUNIT_EQUAL(0, pl.altPlayListCount());
162- TSUNIT_EQUAL(6, pl.targetDuration().count());
163- TSUNIT_EQUAL(0, pl.mediaSequence());
164- TSUNIT_ASSERT(pl.endList());
165-
166- TSUNIT_EQUAL(u"fileSequence0.ts", pl.segment(0).relative_uri);
167- TSUNIT_EQUAL(u"", pl.segment(0).title);
168- TSUNIT_EQUAL(2060 * 1024, pl.segment(0).bitrate.toInt());
169- TSUNIT_EQUAL(6000, pl.segment(0).duration.count());
170- TSUNIT_ASSERT(!pl.segment(0).gap);
171-
172- TSUNIT_EQUAL(u"fileSequence99.ts", pl.segment(99).relative_uri);
173- TSUNIT_EQUAL(u"", pl.segment(99).title);
174- TSUNIT_EQUAL(2055 * 1024, pl.segment(99).bitrate.toInt());
175- TSUNIT_EQUAL(6000, pl.segment(99).duration.count());
176- TSUNIT_ASSERT(!pl.segment(99).gap);
177-
178- ts::hls::MediaSegment seg;
179- TSUNIT_ASSERT(pl.popFirstSegment(seg));
180- TSUNIT_EQUAL(99, pl.segmentCount());
181-
182- TSUNIT_EQUAL(u"fileSequence0.ts", seg.relative_uri);
183- TSUNIT_EQUAL(u"", seg.title);
184- TSUNIT_EQUAL(2060 * 1024, seg.bitrate.toInt());
185- TSUNIT_EQUAL(6000, seg.duration.count());
186- TSUNIT_ASSERT(!seg.gap);
187-}
188-
189 TSUNIT_DEFINE_TEST(BuildMasterPlaylist)
190 {
191 ts::hls::PlayList pl;
192diff --git a/src/utest/utestNetworking.cpp b/src/utest/utestNetworking.cpp
193index 058d5eb4c..67e5610d5 100644
194--- a/src/utest/utestNetworking.cpp
195+++ b/src/utest/utestNetworking.cpp
196@@ -33,19 +33,13 @@
197 class NetworkingTest: public tsunit::Test
198 {
199 TSUNIT_DECLARE_TEST(SystemStructures);
200- TSUNIT_DECLARE_TEST(IPv4AddressConstructors);
201- TSUNIT_DECLARE_TEST(IPv4Address);
202- TSUNIT_DECLARE_TEST(IPv6Address);
203 TSUNIT_DECLARE_TEST(Conversion);
204 TSUNIT_DECLARE_TEST(IPAddressMask);
205 TSUNIT_DECLARE_TEST(MACAddress);
206 TSUNIT_DECLARE_TEST(LocalHost);
207 TSUNIT_DECLARE_TEST(GetLocalIPAddresses);
208- TSUNIT_DECLARE_TEST(IPv4SocketAddressConstructors);
209 TSUNIT_DECLARE_TEST(IPv4SocketAddress);
210 TSUNIT_DECLARE_TEST(IPv6SocketAddress);
211- TSUNIT_DECLARE_TEST(TCPSocket);
212- TSUNIT_DECLARE_TEST(UDPSocket);
213 TSUNIT_DECLARE_TEST(IPHeader);
214 TSUNIT_DECLARE_TEST(IPProtocol);
215 TSUNIT_DECLARE_TEST(TCPPacket);
216@@ -96,183 +90,6 @@ TSUNIT_DEFINE_TEST(SystemStructures)
217 << "NetworkingTest::SystemStructures: sizeof(::sockaddr_storage) = " << sizeof(::sockaddr_storage) << std::endl;
218 }
219
220-TSUNIT_DEFINE_TEST(IPv4AddressConstructors)
221-{
222- TSUNIT_ASSERT(ts::IPInitialize());
223-
224- TSUNIT_EQUAL(0, ts::IPAddress::AnyAddress4.address4());
225- TSUNIT_EQUAL(0x7F000001, ts::IPAddress::LocalHost4.address4()); // 127.0.0.1
226-
227- ts::IPAddress a1;
228- TSUNIT_EQUAL(0, a1.address4());
229-
230- ts::IPAddress a2(0x01020304);
231- TSUNIT_EQUAL(0x01020304, a2.address4());
232-
233- ts::IPAddress a3(1, 2, 3, 4);
234- TSUNIT_EQUAL(0x01020304, a3.address4());
235-
236- ::in_addr ia4;
237- ia4.s_addr = htonl(0x01020304);
238- ts::IPAddress a4(ia4);
239- TSUNIT_EQUAL(0x01020304, a4.address4());
240-
241- ::sockaddr sa5;
242- TSUNIT_ASSERT(sizeof(::sockaddr) >= sizeof(::sockaddr_in));
243- ::sockaddr_in* sai5 = reinterpret_cast<::sockaddr_in*>(&sa5);
244- sai5->sin_family = AF_INET;
245- sai5->sin_addr.s_addr = htonl(0x01020304);
246- sai5->sin_port = 0;
247- ts::IPAddress a5 (sa5);
248- TSUNIT_EQUAL(0x01020304, a5.address4());
249-
250- ::sockaddr_in sa6;
251- sa6.sin_family = AF_INET;
252- sa6.sin_addr.s_addr = htonl(0x01020304);
253- sa6.sin_port = 0;
254- ts::IPAddress a6 (sa6);
255- TSUNIT_EQUAL(0x01020304, a6.address4());
256-
257- ts::IPAddress a7(u"2.3.4.5", CERR);
258- TSUNIT_EQUAL(0x02030405, a7.address4());
259-}
260-
261-TSUNIT_DEFINE_TEST(IPv4Address)
262-{
263- TSUNIT_ASSERT(ts::IPInitialize());
264-
265- ts::IPAddress a1 (1, 2, 3, 4);
266- ts::IPAddress a2 (1, 2, 3, 4);
267- ts::IPAddress a3 (2, 3, 4, 5);
268-
269- TSUNIT_EQUAL(u"IPv4", a1.familyName());
270- TSUNIT_ASSERT(a1 == a2);
271- TSUNIT_ASSERT(a1 != a3);
272-
273- a1.setAddress4(0x02030405);
274- TSUNIT_ASSERT(a1 == a3);
275-
276- a1.setAddress4(1, 2, 3, 4);
277- TSUNIT_ASSERT(a1 == a2);
278-
279- a2.setAddress4(224, 1, 2, 3);
280- TSUNIT_ASSERT(!a1.isMulticast());
281- TSUNIT_ASSERT(a2.isMulticast());
282-
283- TSUNIT_ASSERT(a1.hasAddress());
284- a1.clear();
285- TSUNIT_ASSERT(!a1.hasAddress());
286- TSUNIT_EQUAL(0, a1.address4());
287-
288- a1.setAddress4(1, 2, 3, 4);
289- ::in_addr ia;
290- a1.getAddress4(ia);
291- TSUNIT_EQUAL(htonl(0x01020304), ia.s_addr);
292-
293- ::sockaddr_storage sa;
294- TSUNIT_EQUAL(sizeof(::sockaddr_in), a1.getAddress(sa, 80));
295- const ::sockaddr_in* saip = reinterpret_cast<const ::sockaddr_in*>(&sa);
296- TSUNIT_EQUAL(AF_INET, saip->sin_family);
297- TSUNIT_EQUAL(htonl(0x01020304), saip->sin_addr.s_addr);
298- TSUNIT_EQUAL(htons(80), saip->sin_port);
299-
300- ::sockaddr_in sai;
301- a1.getAddress4(sai, 80);
302- TSUNIT_EQUAL(AF_INET, sai.sin_family);
303- TSUNIT_EQUAL(htonl(0x01020304), sai.sin_addr.s_addr);
304- TSUNIT_EQUAL(htons(80), sai.sin_port);
305-
306- TSUNIT_ASSERT(a1.resolve(u"2.3.4.5", CERR));
307- TSUNIT_EQUAL(0x02030405, a1.address4());
308-
309- a1.setAddress4(2, 3, 4, 5);
310- const ts::UString s1(a1.toString());
311- TSUNIT_EQUAL(u"2.3.4.5", s1);
312-
313- // Note: fail if not connected to a network.
314- debug() << "NetworkingTest: www.google.com = " << ts::IPAddress(u"www.google.com", CERR) << std::endl;
315-}
316-
317-TSUNIT_DEFINE_TEST(IPv6Address)
318-{
319- ts::IPAddress a1(ts::IPAddress::AnyAddress6);
320- TSUNIT_EQUAL(u"IPv6", a1.familyName());
321- TSUNIT_EQUAL(ts::IP::v6, a1.generation());
322- TSUNIT_ASSERT(!a1.hasAddress());
323- TSUNIT_ASSERT(!a1.isMulticast());
324-
325- TSUNIT_ASSERT(!ts::IPAddress::AnyAddress6.hasAddress());
326- TSUNIT_ASSERT(ts::IPAddress::LocalHost6.hasAddress());
327- TSUNIT_EQUAL(0, ts::IPAddress::LocalHost6.networkPrefix6());
328- TSUNIT_EQUAL(1, ts::IPAddress::LocalHost6.interfaceIdentifier6());
329-
330- TSUNIT_ASSERT(!a1.resolve(u":", NULLREP));
331- TSUNIT_ASSERT(!a1.hasAddress());
332-
333- TSUNIT_ASSERT(a1.resolve(u"::", CERR));
334- TSUNIT_ASSERT(!a1.hasAddress());
335- TSUNIT_ASSERT(a1 == ts::IPAddress::AnyAddress6);
336-
337- TSUNIT_ASSERT(a1.resolve(u"::1", CERR));
338- TSUNIT_ASSERT(a1.hasAddress());
339- TSUNIT_ASSERT(a1 == ts::IPAddress::LocalHost6);
340-
341- TSUNIT_ASSERT(!a1.resolve(u"", NULLREP));
342- TSUNIT_ASSERT(!a1.hasAddress());
343-
344- a1.setAddress6(0, 1, 2, 3, 4, 5, 6, 7);
345- TSUNIT_ASSERT(a1.hasAddress());
346- TSUNIT_ASSERT(!a1.isIPv4Mapped());
347- TSUNIT_EQUAL(0x0000000100020003, a1.networkPrefix6());
348- TSUNIT_EQUAL(0x0004000500060007, a1.interfaceIdentifier6());
349- TSUNIT_EQUAL(u"0:1:2:3:4:5:6:7", a1.toString());
350- TSUNIT_EQUAL(u"0000:0001:0002:0003:0004:0005:0006:0007", a1.toFullString());
351-
352- a1.setAddress6(0x12, 0x345, 0x6789, 0xFFFF, 0, 0, 0, 0xBEEF);
353- TSUNIT_ASSERT(a1.hasAddress());
354- TSUNIT_ASSERT(!a1.isIPv4Mapped());
355- TSUNIT_EQUAL(0x001203456789FFFF, a1.networkPrefix6());
356- TSUNIT_EQUAL(0x000000000000BEEF, a1.interfaceIdentifier6());
357- TSUNIT_EQUAL(u"12:345:6789:ffff::beef", a1.toString());
358- TSUNIT_EQUAL(u"0012:0345:6789:ffff:0000:0000:0000:beef", a1.toFullString());
359-
360- TSUNIT_ASSERT(a1.resolve(u"fe80::93a3:dea0:2108:b81e", CERR));
361- TSUNIT_ASSERT(a1.hasAddress());
362- TSUNIT_ASSERT(!a1.isIPv4Mapped());
363- TSUNIT_EQUAL(0xFE80000000000000, a1.networkPrefix6());
364- TSUNIT_EQUAL(0x93A3DEA02108B81E, a1.interfaceIdentifier6());
365- TSUNIT_EQUAL(u"fe80::93a3:dea0:2108:b81e", a1.toString());
366- TSUNIT_EQUAL(u"fe80:0000:0000:0000:93a3:dea0:2108:b81e", a1.toFullString());
367-
368- TSUNIT_ASSERT(a1.convert(ts::IP::Any));
369- TSUNIT_ASSERT(a1.convert(ts::IP::v6));
370- TSUNIT_ASSERT(!a1.convert(ts::IP::v4));
371- TSUNIT_EQUAL(u"IPv6", a1.familyName());
372- TSUNIT_EQUAL(ts::IP::v6, a1.generation());
373-
374- ts::IPAddress a2;
375- TSUNIT_ASSERT(a2.resolve(u"0:0::ffff:12.13.14.15", CERR));
376- TSUNIT_ASSERT(a2.hasAddress());
377- TSUNIT_EQUAL(u"IPv6", a2.familyName());
378- TSUNIT_EQUAL(ts::IP::v6, a2.generation());
379- TSUNIT_ASSERT(a2.isIPv4Mapped());
380- TSUNIT_EQUAL(0x0000000000000000, a2.networkPrefix6());
381- TSUNIT_EQUAL(0x0000FFFF0C0D0E0F, a2.interfaceIdentifier6());
382- TSUNIT_EQUAL(u"::ffff:12.13.14.15", a2.toString());
383- TSUNIT_EQUAL(u"0000:0000:0000:0000:0000:ffff:0c0d:0e0f", a2.toFullString());
384-
385- TSUNIT_ASSERT(a2.convert(ts::IP::Any));
386- TSUNIT_ASSERT(a2.convert(ts::IP::v6));
387- TSUNIT_ASSERT(a2.convert(ts::IP::v4));
388-
389- TSUNIT_ASSERT(a2.hasAddress());
390- TSUNIT_EQUAL(u"IPv4", a2.familyName());
391- TSUNIT_EQUAL(ts::IP::v4, a2.generation());
392- TSUNIT_EQUAL(u"12.13.14.15", a2.toString());
393- TSUNIT_EQUAL(u"12.13.14.15", a2.toFullString());
394- TSUNIT_EQUAL(0x0C0D0E0F, a2.address4());
395-}
396-
397 TSUNIT_DEFINE_TEST(Conversion)
398 {
399 ts::IPAddress a1(0x12345678);
400@@ -437,101 +254,6 @@ TSUNIT_DEFINE_TEST(GetLocalIPAddresses)
401 }
402 }
403
404-TSUNIT_DEFINE_TEST(IPv4SocketAddressConstructors)
405-{
406- TSUNIT_ASSERT(ts::IPInitialize());
407-
408- TSUNIT_EQUAL(0, ts::IPSocketAddress::AnyAddress4.address4());
409- TSUNIT_EQUAL(0x7F000001, ts::IPSocketAddress::LocalHost4.address4()); // 127.0.0.1
410-
411- ts::IPSocketAddress a1;
412- TSUNIT_EQUAL(0, a1.address4());
413- TSUNIT_EQUAL(0, a1.port());
414-
415- ts::IPSocketAddress a2a (ts::IPAddress(0x01020304), 80);
416- TSUNIT_EQUAL(0x01020304, a2a.address4());
417- TSUNIT_EQUAL(80, a2a.port());
418-
419- ts::IPSocketAddress a2b(0x01020304, 80);
420- TSUNIT_EQUAL(0x01020304, a2b.address4());
421- TSUNIT_EQUAL(80, a2b.port());
422-
423- ts::IPSocketAddress a3(1, 2, 3, 4, 80);
424- TSUNIT_EQUAL(0x01020304, a3.address4());
425- TSUNIT_EQUAL(80, a3.port());
426-
427- ::in_addr ia4;
428- ia4.s_addr = htonl(0x01020304);
429- ts::IPSocketAddress a4(ia4, 80);
430- TSUNIT_EQUAL(0x01020304, a4.address4());
431- TSUNIT_EQUAL(80, a4.port());
432-
433- ::sockaddr sa5;
434- TSUNIT_ASSERT(sizeof(::sockaddr) >= sizeof(::sockaddr_in));
435- ::sockaddr_in* sai5 = reinterpret_cast<::sockaddr_in*>(&sa5);
436- sai5->sin_family = AF_INET;
437- sai5->sin_addr.s_addr = htonl(0x01020304);
438- sai5->sin_port = htons (80);
439- ts::IPSocketAddress a5 (sa5);
440- TSUNIT_EQUAL(0x01020304, a5.address4());
441- TSUNIT_EQUAL(80, a5.port());
442-
443- ::sockaddr_in sa6;
444- sa6.sin_family = AF_INET;
445- sa6.sin_addr.s_addr = htonl(0x01020304);
446- sa6.sin_port = htons(80);
447- ts::IPSocketAddress a6(sa6);
448- TSUNIT_EQUAL(0x01020304, a6.address4());
449- TSUNIT_EQUAL(80, a6.port());
450-
451- ts::IPSocketAddress a7(u"2.3.4.5", CERR);
452- TSUNIT_EQUAL(0x02030405, a7.address4());
453- TSUNIT_EQUAL(ts::IPSocketAddress::AnyPort, a7.port());
454-
455- // Some hosts can return localhost in IPv4 or IPv6.
456- ts::IPSocketAddress a8(u"localhost", CERR);
457- if (a8.generation() == ts::IP::v6) {
458- TSUNIT_EQUAL(0, a8.hexlet6(0));
459- TSUNIT_EQUAL(0, a8.hexlet6(1));
460- TSUNIT_EQUAL(0, a8.hexlet6(2));
461- TSUNIT_EQUAL(0, a8.hexlet6(3));
462- TSUNIT_EQUAL(0, a8.hexlet6(4));
463- TSUNIT_EQUAL(0, a8.hexlet6(5));
464- TSUNIT_EQUAL(0, a8.hexlet6(8));
465- TSUNIT_EQUAL(1, a8.hexlet6(7));
466- TSUNIT_ASSERT(ts::IPAddress(a8) == ts::IPAddress::LocalHost6);
467- }
468- else {
469- TSUNIT_EQUAL(0x7F000001, a8.address4()); // 127.0.0.1
470- TSUNIT_ASSERT(ts::IPAddress(a8) == ts::IPAddress::LocalHost4);
471- }
472- TSUNIT_EQUAL(ts::IPSocketAddress::AnyPort, a8.port());
473-
474- ts::IPSocketAddress a9(u"2.3.4.5:80", CERR);
475- TSUNIT_EQUAL(0x02030405, a9.address4());
476- TSUNIT_EQUAL(80, a9.port());
477-
478- ts::IPSocketAddress a10(u":80", CERR);
479- TSUNIT_EQUAL(0, a10.address4());
480- TSUNIT_EQUAL(80, a10.port());
481-
482- ts::IPSocketAddress a11(u"83", CERR);
483- TSUNIT_EQUAL(0, a11.address4());
484- TSUNIT_EQUAL(83, a11.port());
485-
486- ts::IPSocketAddress a12(u"2.3.4.5:", CERR);
487- TSUNIT_EQUAL(0x02030405, a12.address4());
488- TSUNIT_EQUAL(0, a12.port());
489-
490- ts::IPSocketAddress a13(u":", CERR);
491- TSUNIT_EQUAL(0, a13.address4());
492- TSUNIT_EQUAL(0, a13.port());
493-
494- ts::IPSocketAddress a14(u"", CERR);
495- TSUNIT_EQUAL(0, a14.address4());
496- TSUNIT_EQUAL(0, a14.port());
497-}
498-
499 TSUNIT_DEFINE_TEST(IPv4SocketAddress)
500 {
501 TSUNIT_ASSERT(ts::IPInitialize());
502@@ -739,56 +461,6 @@ namespace {
503 };
504 }
505
506-// Test cases
507-TSUNIT_DEFINE_TEST(TCPSocket)
508-{
509- TSUNIT_ASSERT(ts::IPInitialize());
510-
511- const uint16_t portNumber = 12345;
512-
513- // Create server socket
514- CERR.debug(u"TCPSocketTest: main thread: create server");
515- const ts::IPSocketAddress serverAddress(ts::IPAddress::LocalHost4, portNumber);
516- ts::TCPServer server;
517- TSUNIT_ASSERT(!server.isOpen());
518- TSUNIT_ASSERT(server.open(ts::IP::v4, CERR));
519- TSUNIT_ASSERT(server.isOpen());
520- TSUNIT_ASSERT(server.reusePort(true, CERR));
521- TSUNIT_ASSERT(server.setSendBufferSize(1024, CERR));
522- TSUNIT_ASSERT(server.setReceiveBufferSize(1024, CERR));
523- TSUNIT_ASSERT(server.setTTL(1, CERR));
524- TSUNIT_ASSERT(server.bind(serverAddress, CERR));
525- TSUNIT_ASSERT(server.listen(5, CERR));
526-
527- CERR.debug(u"TCPSocketTest: main thread: starting client thread");
528- TCPClient client(portNumber);
529- client.start();
530-
531- CERR.debug(u"TCPSocketTest: main thread: waiting for a client");
532- ts::TCPConnection session;
533- ts::IPSocketAddress clientAddress;
534- TSUNIT_ASSERT(server.accept(session, clientAddress, CERR));
535- CERR.debug(u"TCPSocketTest: main thread: got a client");
536- TSUNIT_ASSERT(ts::IPAddress(clientAddress) == ts::IPAddress::LocalHost4);
537-
538- CERR.debug(u"TCPSocketTest: main thread: waiting for data");
539- ts::IPSocketAddress sender;
540- char buffer [1024];
541- size_t size = 0;
542- while (session.receive(buffer, sizeof(buffer), size, nullptr, CERR)) {
543- CERR.debug(u"TCPSocketTest: main thread: data received, %d bytes", size);
544- TSUNIT_ASSERT(session.send(buffer, size, CERR));
545- CERR.debug(u"TCPSocketTest: main thread: data sent back");
546- }
547-
548- CERR.debug(u"TCPSocketTest: main thread: end of client session");
549- session.disconnect(CERR);
550- session.close(CERR);
551- TSUNIT_ASSERT(server.close(CERR));
552-
553- CERR.debug(u"TCPSocketTest: main thread: terminated");
554-}
555-
556 // A thread class which sends one UDP message and wait from the same message to be replied.
557 namespace {
558 class UDPClient: public utest::TSUnitThread
559@@ -848,41 +520,6 @@ namespace {
560 };
561 }
562
563-// Test cases
564-TSUNIT_DEFINE_TEST(UDPSocket)
565-{
566- TSUNIT_ASSERT(ts::IPInitialize());
567-
568- const uint16_t portNumber = 12345;
569-
570- // Create server socket
571- ts::UDPSocket sock;
572- TSUNIT_ASSERT(!sock.isOpen());
573- TSUNIT_ASSERT(sock.open(ts::IP::v4, CERR));
574- TSUNIT_ASSERT(sock.isOpen());
575- TSUNIT_ASSERT(sock.setSendBufferSize(1024, CERR));
576- TSUNIT_ASSERT(sock.setReceiveBufferSize(1024, CERR));
577- TSUNIT_ASSERT(sock.reusePort(true, CERR));
578- TSUNIT_ASSERT(sock.setTTL(1, false, CERR));
579- TSUNIT_ASSERT(sock.bind(ts::IPSocketAddress(ts::IPAddress::LocalHost4, portNumber), CERR));
580-
581- CERR.debug(u"UDPSocketTest: main thread: starting client thread");
582- UDPClient client(portNumber);
583- client.start();
584-
585- CERR.debug(u"UDPSocketTest: main thread: waiting for message");
586- ts::IPSocketAddress sender;
587- ts::IPSocketAddress destination;
588- char buffer [1024];
589- size_t size;
590- TSUNIT_ASSERT(sock.receive(buffer, sizeof(buffer), size, sender, destination, nullptr, CERR));
591- CERR.debug(u"UDPSocketTest: main thread: request received, %d bytes, sender: %s, destination: %s", size, sender, destination);
592- TSUNIT_ASSERT(ts::IPAddress(sender) == ts::IPAddress::LocalHost4);
593-
594- TSUNIT_ASSERT(sock.send(buffer, size, sender, CERR));
595- CERR.debug(u"UDPSocketTest: main thread: reply sent");
596-}
597-
598 TSUNIT_DEFINE_TEST(IPHeader)
599 {
600 static const uint8_t reference_header[] = {
601diff --git a/src/utest/utestSysUtils.cpp b/src/utest/utestSysUtils.cpp
602index e3434d45b..a609e05c7 100644
603--- a/src/utest/utestSysUtils.cpp
604+++ b/src/utest/utestSysUtils.cpp
605@@ -48,7 +48,6 @@ class SysUtilsTest: public tsunit::Test
606 TSUNIT_DECLARE_TEST(FileTime);
607 TSUNIT_DECLARE_TEST(Wildcard);
608 TSUNIT_DECLARE_TEST(SearchWildcard);
609- TSUNIT_DECLARE_TEST(HomeDirectory);
610 TSUNIT_DECLARE_TEST(ProcessCpuTime);
611 TSUNIT_DECLARE_TEST(ProcessVirtualSize);
612 TSUNIT_DECLARE_TEST(IsTerminal);
613@@ -567,16 +566,6 @@ TSUNIT_DEFINE_TEST(SearchWildcard)
614 #endif
615 }
616
617-TSUNIT_DEFINE_TEST(HomeDirectory)
618-{
619- const ts::UString dir(ts::UserHomeDirectory());
620- debug() << "SysUtilsTest: UserHomeDirectory() = \"" << dir << "\"" << std::endl;
621-
622- TSUNIT_ASSERT(!dir.empty());
623- TSUNIT_ASSERT(fs::exists(dir));
624- TSUNIT_ASSERT(fs::is_directory(dir));
625-}
626-
627 TSUNIT_DEFINE_TEST(ProcessCpuTime)
628 {
629 const cn::milliseconds t1 = ts::GetProcessCpuTime();
630diff --git a/src/utest/utestSystemRandomGenerator.cpp b/src/utest/utestSystemRandomGenerator.cpp
631index 0d7ff13dd..7e9d5b6ef 100644
632--- a/src/utest/utestSystemRandomGenerator.cpp
633+++ b/src/utest/utestSystemRandomGenerator.cpp
634@@ -23,7 +23,6 @@
635 class SystemRandomGeneratorTest: public tsunit::Test
636 {
637 TSUNIT_DECLARE_TEST(SystemRandomGenerator);
638- TSUNIT_DECLARE_TEST(BetterSystemRandomGenerator);
639 TSUNIT_DECLARE_TEST(Range);
640
641 private:
642@@ -87,11 +86,6 @@ TSUNIT_DEFINE_TEST(SystemRandomGenerator)
643 testRandom(gen);
644 }
645
646-TSUNIT_DEFINE_TEST(BetterSystemRandomGenerator)
647-{
648- testRandom(ts::BetterSystemRandomGenerator::Instance());
649-}
650-
651 void SystemRandomGeneratorTest::testRandomRange(ts::RandomGenerator& prng, int64_t min, int64_t max)
652 {
653 TSUNIT_ASSERT(prng.ready());
654diff --git a/src/utest/utestWebRequest.cpp b/src/utest/utestWebRequest.cpp
655index d496c8eca..a691910ca 100644
656--- a/src/utest/utestWebRequest.cpp
657+++ b/src/utest/utestWebRequest.cpp
658@@ -28,10 +28,6 @@
659
660 class WebRequestTest: public tsunit::Test
661 {
662- TSUNIT_DECLARE_TEST(GitHub);
663- TSUNIT_DECLARE_TEST(Google);
664- TSUNIT_DECLARE_TEST(ReadMeFile);
665- TSUNIT_DECLARE_TEST(NoRedirection);
666 TSUNIT_DECLARE_TEST(NonExistentHost);
667 TSUNIT_DECLARE_TEST(InvalidURL);
668
669@@ -89,7 +85,6 @@ void WebRequestTest::testURL(const ts::UString& url, bool expectRedirection, boo
670
671 // Test binary download
672 ts::ByteBlock data;
673- TSUNIT_ASSERT(request.downloadBinaryContent(url, data));
674
675 debug() << "WebRequestTest::testURL:" << std::endl
676 << " Original URL: " << request.originalURL() << std::endl
677@@ -155,59 +150,12 @@ void WebRequestTest::testURL(const ts::UString& url, bool expectRedirection, boo
678 // Test cases
679 //----------------------------------------------------------------------------
680
681-TSUNIT_DEFINE_TEST(GitHub)
682-{
683- testURL(u"http://www.github.com/",
684- true, // expectRedirection
685- true, // expectSSL
686- true, // expectTextContent
687- false); // expectInvariant
688-}
689-
690-TSUNIT_DEFINE_TEST(Google)
691-{
692- testURL(u"http://www.google.com/",
693- false, // expectRedirection
694- false, // expectSSL
695- true, // expectTextContent
696- false); // expectInvariant
697-}
698-
699-TSUNIT_DEFINE_TEST(ReadMeFile)
700-{
701- testURL(u"https://raw.githubusercontent.com/tsduck/tsduck/master/README.md",
702- false, // expectRedirection
703- true, // expectSSL
704- true, // expectTextContent
705- true); // expectInvariant
706-}
707-
708-TSUNIT_DEFINE_TEST(NoRedirection)
709-{
710- ts::WebRequest request(report());
711- request.setAutoRedirect(false);
712-
713- ts::ByteBlock data;
714- TSUNIT_ASSERT(request.downloadBinaryContent(u"http://www.github.com/", data));
715-
716- debug() << "WebRequestTest::testNoRedirection:" << std::endl
717- << " Original URL: " << request.originalURL() << std::endl
718- << " Final URL: " << request.finalURL() << std::endl
719- << " HTTP status: " << request.httpStatus() << std::endl
720- << " Content size: " << request.contentSize() << std::endl;
721-
722- TSUNIT_EQUAL(3, request.httpStatus() / 100);
723- TSUNIT_ASSERT(!request.finalURL().empty());
724- TSUNIT_ASSERT(request.finalURL() != request.originalURL());
725-}
726-
727 TSUNIT_DEFINE_TEST(NonExistentHost)
728 {
729 ts::ReportBuffer<ts::ThreadSafety::None> rep;
730 ts::WebRequest request(rep);
731
732 ts::ByteBlock data;
733- TSUNIT_ASSERT(!request.downloadBinaryContent(u"http://non.existent.fake-domain/", data));
734
735 debug() << "WebRequestTest::testNonExistentHost: " << rep.messages() << std::endl;
736 }
737@@ -218,7 +166,6 @@ TSUNIT_DEFINE_TEST(InvalidURL)
738 ts::WebRequest request(rep);
739
740 ts::ByteBlock data;
741- TSUNIT_ASSERT(!request.downloadBinaryContent(u"pouette://tagada/tsoin/tsoin", data));
742
743 debug() << "WebRequestTest::testInvalidURL: " << rep.messages() << std::endl;
744 }