File indexing completed on 2025-01-05 04:37:21
0001 /* 0002 SPDX-FileCopyrightText: 2012 Joris Guisson <joris.guisson@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include <QObject> 0008 #include <QtTest> 0009 #include <peer/connectionlimit.h> 0010 #include <util/log.h> 0011 0012 class ConnectionLimitTest : public QObject 0013 { 0014 Q_OBJECT 0015 public: 0016 private Q_SLOTS: 0017 void initTestCase() 0018 { 0019 bt::InitLog("connectionlimittest.log"); 0020 } 0021 0022 void cleanupTestCase() 0023 { 0024 } 0025 0026 void testGlobalLimit() 0027 { 0028 bt::ConnectionLimit climit; 0029 climit.setLimits(10, 20); 0030 bt::SHA1Hash hash; 0031 0032 QList<bt::ConnectionLimit::Token::Ptr> tokens; 0033 for (int i = 0; i < 10; i++) { 0034 bt::ConnectionLimit::Token::Ptr t = climit.acquire(hash); 0035 QVERIFY(!t.isNull()); 0036 tokens.append(t); 0037 } 0038 0039 bt::ConnectionLimit::Token::Ptr t = climit.acquire(hash); 0040 QVERIFY(t.isNull()); 0041 0042 tokens.pop_front(); 0043 0044 t = climit.acquire(hash); 0045 QVERIFY(!t.isNull()); 0046 } 0047 0048 void testTorrentLimit() 0049 { 0050 bt::ConnectionLimit climit; 0051 climit.setLimits(20, 10); 0052 bt::SHA1Hash hash; 0053 0054 QList<bt::ConnectionLimit::Token::Ptr> tokens; 0055 for (int i = 0; i < 10; i++) { 0056 bt::ConnectionLimit::Token::Ptr t = climit.acquire(hash); 0057 QVERIFY(!t.isNull()); 0058 tokens.append(t); 0059 } 0060 0061 bt::ConnectionLimit::Token::Ptr t = climit.acquire(hash); 0062 QVERIFY(t.isNull()); 0063 0064 tokens.pop_front(); 0065 0066 t = climit.acquire(hash); 0067 QVERIFY(!t.isNull()); 0068 } 0069 0070 void testMulitpleTorrents() 0071 { 0072 bt::Uint8 tmp[20]; 0073 bt::ConnectionLimit climit; 0074 climit.setLimits(15, 10); 0075 0076 memset(tmp, 0xFF, 20); 0077 bt::SHA1Hash hash1 = bt::SHA1Hash::generate(tmp, 20); 0078 0079 memset(tmp, 0xEE, 20); 0080 bt::SHA1Hash hash2 = bt::SHA1Hash::generate(tmp, 20); 0081 0082 QList<bt::ConnectionLimit::Token::Ptr> tokens; 0083 for (int i = 0; i < 10; i++) { 0084 bt::ConnectionLimit::Token::Ptr t = climit.acquire(hash1); 0085 QVERIFY(!t.isNull()); 0086 tokens.append(t); 0087 } 0088 0089 QVERIFY(climit.acquire(hash1).isNull()); 0090 0091 for (int i = 0; i < 5; i++) { 0092 bt::ConnectionLimit::Token::Ptr t = climit.acquire(hash2); 0093 QVERIFY(!t.isNull()); 0094 tokens.append(t); 0095 } 0096 0097 bt::ConnectionLimit::Token::Ptr t = climit.acquire(hash1); 0098 QVERIFY(t.isNull()); 0099 0100 t = climit.acquire(hash2); 0101 QVERIFY(t.isNull()); 0102 0103 tokens.pop_front(); 0104 0105 t = climit.acquire(hash2); 0106 QVERIFY(!t.isNull()); 0107 } 0108 0109 private: 0110 }; 0111 0112 QTEST_MAIN(ConnectionLimitTest) 0113 0114 #include "connectionlimittest.moc"