File indexing completed on 2024-04-14 15:40:10

0001 /*
0002     SPDX-FileCopyrightText: 2018 Bruce Anderson <banderson19com@san.rr.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005 */
0006 
0007 #include "simpleipv6addressvalidator.h"
0008 #include <QTest>
0009 
0010 class SimpleIpv6Test : public QObject
0011 {
0012     Q_OBJECT
0013 
0014 public:
0015     SimpleIpv6Test();
0016 
0017 private Q_SLOTS:
0018     void baseTest();
0019     void baseTest_data();
0020     void cidrTest();
0021     void cidrTest_data();
0022     void portTest();
0023     void portTest_data();
0024 
0025 private:
0026     SimpleIpV6AddressValidator m_vb;
0027     SimpleIpV6AddressValidator m_vc;
0028     SimpleIpV6AddressValidator m_vp;
0029 };
0030 
0031 SimpleIpv6Test::SimpleIpv6Test()
0032     : m_vb(SimpleIpV6AddressValidator::AddressStyle::Base)
0033     , m_vc(SimpleIpV6AddressValidator::AddressStyle::WithCidr)
0034     , m_vp(SimpleIpV6AddressValidator::AddressStyle::WithPort)
0035 {
0036 }
0037 
0038 Q_DECLARE_METATYPE(QValidator::State)
0039 
0040 void SimpleIpv6Test::baseTest_data()
0041 {
0042     QTest::addColumn<QString>("address");
0043     QTest::addColumn<QValidator::State>("result");
0044 
0045     QTest::newRow("null string") << "" << QValidator::Intermediate;
0046     QTest::newRow("0123:4567:89ab:cdef") << "0123:4567:89ab:cdef" << QValidator::Intermediate;
0047     QTest::newRow("0123:4567:89ab:cdef:0123:4567:89ab:cdef") << "0123:4567:89ab:cdef:0123:4567:89ab:cdef" << QValidator::Acceptable;
0048     QTest::newRow("1") << "1" << QValidator::Intermediate;
0049     QTest::newRow("12") << "12" << QValidator::Intermediate;
0050     QTest::newRow("123") << "123" << QValidator::Intermediate;
0051     QTest::newRow("1234") << "1234" << QValidator::Intermediate;
0052     QTest::newRow("1234:") << "1234:" << QValidator::Intermediate;
0053     QTest::newRow("1234:1") << "1234:1" << QValidator::Intermediate;
0054     QTest::newRow("1234:12") << "1234:12" << QValidator::Intermediate;
0055     QTest::newRow("1234:123") << "1234:123" << QValidator::Intermediate;
0056     QTest::newRow("1234:1234") << "1234:1234" << QValidator::Intermediate;
0057     QTest::newRow("1234:1234:") << "1234:1234:" << QValidator::Intermediate;
0058     QTest::newRow("1234:1234:1") << "1234:1234:1" << QValidator::Intermediate;
0059     QTest::newRow("1234:1234:12") << "1234:1234:12" << QValidator::Intermediate;
0060     QTest::newRow("1234:1234:123") << "1234:1234:123" << QValidator::Intermediate;
0061     QTest::newRow("1234:1234:1234") << "1234:1234:1234" << QValidator::Intermediate;
0062     QTest::newRow("1234:1234:1234:") << "1234:1234:1234:" << QValidator::Intermediate;
0063     QTest::newRow("1234:1234:1234:1") << "1234:1234:1234:1" << QValidator::Intermediate;
0064     QTest::newRow("1234:1234:1234:12") << "1234:1234:1234:12" << QValidator::Intermediate;
0065     QTest::newRow("1234:1234:1234:123") << "1234:1234:1234:123" << QValidator::Intermediate;
0066     QTest::newRow("1234:1234:1234:1234") << "1234:1234:1234:1234" << QValidator::Intermediate;
0067     QTest::newRow("1234:1234:1234:1234:") << "1234:1234:1234:1234:" << QValidator::Intermediate;
0068     QTest::newRow("1234:1234:1234:1234:1") << "1234:1234:1234:1234:1" << QValidator::Intermediate;
0069     QTest::newRow("1234:1234:1234:1234:12") << "1234:1234:1234:1234:12" << QValidator::Intermediate;
0070     QTest::newRow("1234:1234:1234:1234:123") << "1234:1234:1234:1234:123" << QValidator::Intermediate;
0071     QTest::newRow("1234:1234:1234:1234:1234") << "1234:1234:1234:1234:1234" << QValidator::Intermediate;
0072     QTest::newRow("1234:1234:1234:1234:1234:") << "1234:1234:1234:1234:1234:" << QValidator::Intermediate;
0073     QTest::newRow("1234:1234:1234:1234:1234:1") << "1234:1234:1234:1234:1234:1" << QValidator::Intermediate;
0074     QTest::newRow("1234:1234:1234:1234:1234:12") << "1234:1234:1234:1234:1234:12" << QValidator::Intermediate;
0075     QTest::newRow("1234:1234:1234:1234:1234:123") << "1234:1234:1234:1234:1234:123" << QValidator::Intermediate;
0076     QTest::newRow("1234:1234:1234:1234:1234:1234") << "1234:1234:1234:1234:1234:1234" << QValidator::Intermediate;
0077     QTest::newRow("1234:1234:1234:1234:1234:1234:") << "1234:1234:1234:1234:1234:1234:" << QValidator::Intermediate;
0078     QTest::newRow("1234:1234:1234:1234:1234:1234:1") << "1234:1234:1234:1234:1234:1234:1" << QValidator::Intermediate;
0079     QTest::newRow("1234:1234:1234:1234:1234:1234:12") << "1234:1234:1234:1234:1234:1234:12" << QValidator::Intermediate;
0080     QTest::newRow("1234:1234:1234:1234:1234:1234:123") << "1234:1234:1234:1234:1234:1234:123" << QValidator::Intermediate;
0081     QTest::newRow("1234:1234:1234:1234:1234:1234:1234") << "1234:1234:1234:1234:1234:1234:1234" << QValidator::Intermediate;
0082     QTest::newRow("1234:1234:1234:1234:1234:1234:1234:") << "1234:1234:1234:1234:1234:1234:1234:" << QValidator::Intermediate;
0083     QTest::newRow("1234:1234:1234:1234:1234:1234:1234:1") << "1234:1234:1234:1234:1234:1234:1234:1" << QValidator::Acceptable;
0084     QTest::newRow("1234:1234:1234:1234:1234:1234:1234:12") << "1234:1234:1234:1234:1234:1234:1234:12" << QValidator::Acceptable;
0085     QTest::newRow("1234:1234:1234:1234:1234:1234:1234:123") << "1234:1234:1234:1234:1234:1234:1234:123" << QValidator::Acceptable;
0086     QTest::newRow("1234:1234:1234:1234:1234:1234:1234:1234") << "1234:1234:1234:1234:1234:1234:1234:1234" << QValidator::Acceptable;
0087     QTest::newRow(":") << ":" << QValidator::Intermediate;
0088     QTest::newRow("::") << "::" << QValidator::Acceptable;
0089     QTest::newRow("::1:2:3:4") << "::1:2:3:4" << QValidator::Acceptable;
0090     QTest::newRow("1::2:3:4") << "1::2:3:4" << QValidator::Acceptable;
0091     QTest::newRow("1:2345::6:7") << "1:2345::6:7" << QValidator::Acceptable;
0092     QTest::newRow("1:2:3::1:1:1") << "1:2:3::1:1:1" << QValidator::Acceptable;
0093     QTest::newRow("1:2:3:4::1") << "1:2:3:4::1" << QValidator::Acceptable;
0094     QTest::newRow("1:2:3:4:5::1") << "1:2:3:4:5::1" << QValidator::Acceptable;
0095     QTest::newRow("1:2:3:4:5:6::1") << "1:2:3:4:5:6::1" << QValidator::Acceptable;
0096     QTest::newRow("1:2:3:4:5:6:7::") << "1:2:3:4:5:6:7::" << QValidator::Acceptable;
0097     QTest::newRow("1::") << "1::" << QValidator::Acceptable;
0098     QTest::newRow("::1:2:3:4") << "::1:2:3:4" << QValidator::Acceptable;
0099     QTest::newRow("::1:2:3::4") << "::1:2:3::4" << QValidator::Invalid;
0100     QTest::newRow("1:2::3:4:5:6:7:") << "1:2::3:4:5:6:7:" << QValidator::Invalid;
0101     QTest::newRow("1:2::3:4:5:6:7:8") << "1:2::3:4:5:6:7:8" << QValidator::Invalid;
0102     QTest::newRow(":1") << ":1" << QValidator::Invalid;
0103     QTest::newRow("0123:4567:89ab:cdef:0123:4567:89ab:cdeg") << "0123:4567:89ab:cdef:0123:4567:89ab:cdeg" << QValidator::Invalid;
0104     QTest::newRow("0123:4567:89ab:cdef:0123:4567:89ab:cde.") << "0123:4567:89ab:cdef:0123:4567:89ab:cde." << QValidator::Invalid;
0105     QTest::newRow("0123:4567:89ab:cdef:0123:4567:89ab:cden") << "0123:4567:89ab:cdef:0123:4567:89ab:cden" << QValidator::Invalid;
0106     QTest::newRow("0n") << "0n" << QValidator::Invalid;
0107 }
0108 
0109 void SimpleIpv6Test::baseTest()
0110 {
0111     int pos;
0112 
0113     QFETCH(QString, address);
0114     QFETCH(QValidator::State, result);
0115 
0116     QCOMPARE(m_vb.validate(address, pos), result);
0117 }
0118 
0119 void SimpleIpv6Test::cidrTest_data()
0120 {
0121     QTest::addColumn<QString>("address");
0122     QTest::addColumn<QValidator::State>("result");
0123 
0124     QTest::newRow("1234:2345:3456:4567:5678:6789:789A:89ab/128") << "1234:2345:3456:4567:5678:6789:789A:89ab/128" << QValidator::Acceptable;
0125     QTest::newRow("") << "" << QValidator::Intermediate;
0126     QTest::newRow("1234:2345::6789:789A:89ab/28") << "1234:2345::6789:789A:89ab/28" << QValidator::Acceptable;
0127     QTest::newRow("1234:2345:3456:4567:5678:6789:789A:89ab/129") << "1234:2345:3456:4567:5678:6789:789A:89ab/129" << QValidator::Invalid;
0128     QTest::newRow("1234:2345:3456:4567:5678:6789:789A:89ab/") << "1234:2345:3456:4567:5678:6789:789A:89ab/" << QValidator::Intermediate;
0129     QTest::newRow("1234:2345:3456:4567:5678:6789:789A/") << "1234:2345:3456:4567:5678:6789:789A/" << QValidator::Invalid;
0130     QTest::newRow("1234:2345:/") << "1234:2345:/" << QValidator::Invalid;
0131     QTest::newRow("1234:2345::6789:789A:89ab") << "1234:2345::6789:789A:89ab" << QValidator::Intermediate;
0132     QTest::newRow("::/0") << "::/0" << QValidator::Acceptable;
0133     QTest::newRow("1234:2345::6789:789A:89ab/28/") << "1234:2345::6789:789A:89ab/28/" << QValidator::Invalid;
0134     QTest::newRow("1234:2345::6789:789A:89ab//") << "1234:2345::6789:789A:89ab//" << QValidator::Invalid;
0135 }
0136 
0137 void SimpleIpv6Test::cidrTest()
0138 {
0139     int pos;
0140 
0141     QFETCH(QString, address);
0142     QFETCH(QValidator::State, result);
0143 
0144     QCOMPARE(m_vc.validate(address, pos), result);
0145 }
0146 
0147 void SimpleIpv6Test::portTest_data()
0148 {
0149     QTest::addColumn<QString>("address");
0150     QTest::addColumn<QValidator::State>("result");
0151 
0152     QTest::newRow("") << "" << QValidator::Intermediate;
0153     QTest::newRow("1") << "1" << QValidator::Invalid;
0154     QTest::newRow("[1") << "[1" << QValidator::Intermediate;
0155     QTest::newRow("[1123:22:44:11]") << "[1123:22:44:11]" << QValidator::Invalid;
0156     QTest::newRow("[1234:2345::6789:789A:89ab]") << "[1234:2345::6789:789A:89ab]" << QValidator::Intermediate;
0157     QTest::newRow("[1234:2345::6789:789A:89ab]:") << "[1234:2345::6789:789A:89ab]:" << QValidator::Intermediate;
0158     QTest::newRow("[1234:2345::6789:789A:89ab]:a") << "[1234:2345::6789:789A:89ab]:a" << QValidator::Invalid;
0159     QTest::newRow("[1234:2345::6789:789A:89ab]:12") << "[1234:2345::6789:789A:89ab]:12" << QValidator::Acceptable;
0160     QTest::newRow("[1234:2345::6789:789A:89ab]:65535") << "[1234:2345::6789:789A:89ab]:65535" << QValidator::Acceptable;
0161     QTest::newRow("[1234:2345::6789:789A:89ab]:65536") << "[1234:2345::6789:789A:89ab]:65536" << QValidator::Invalid;
0162 }
0163 
0164 void SimpleIpv6Test::portTest()
0165 {
0166     int pos;
0167 
0168     QFETCH(QString, address);
0169     QFETCH(QValidator::State, result);
0170 
0171     QCOMPARE(m_vp.validate(address, pos), result);
0172 }
0173 
0174 QTEST_GUILESS_MAIN(SimpleIpv6Test)
0175 
0176 #include "simpleipv6test.moc"