Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at devShellTools-shell 744 lines 28 kB view raw
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 }