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"