/****************************************************************************
**
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the test suite of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
** This file contains pre-release code and may not be distributed.
** You may use this file in accordance with the terms and conditions
** contained in the Technology Preview License Agreement accompanying
** this package.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** If you have questions regarding the use of this file, please contact
** Nokia at qt-info@nokia.com.
**
**
**
**
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include <QtTest/QtTest>
#include <q3dns.h>
#include <qapplication.h>
#include <q3socket.h>
//TESTED_CLASS=
//TESTED_FILES=
class tst_Q3Dns : public QObject
{
Q_OBJECT
public:
tst_Q3Dns();
virtual ~tst_Q3Dns();
public slots:
void initTestCase();
void cleanupTestCase();
void init();
void cleanup();
private slots:
void destructor();
void literals();
void txtRecords();
void longTxtRecord();
void simpleLookup();
protected slots:
void txtRecordAnswer();
void longTxtRecordAnswer();
void simpleLookupDone();
};
tst_Q3Dns::tst_Q3Dns()
{
}
tst_Q3Dns::~tst_Q3Dns()
{
}
void tst_Q3Dns::initTestCase()
{
}
void tst_Q3Dns::cleanupTestCase()
{
}
void tst_Q3Dns::init()
{
}
void tst_Q3Dns::cleanup()
{
}
void tst_Q3Dns::destructor()
{
/*
The following small program used to crash because of a bug in the Q3Dns
constructor that should be fixed by change 67978:
#include <qapplication.h>
#include <qsocket.h>
int main( int argc, char **argv )
{
QApplication a( argc, argv );
Q3Socket *s = new Q3Socket( &a );
s->connectToHost( "ftp.qt.nokia.com", 21 );
return 0;
}
*/
int c = 0;
char **v = 0;
QCoreApplication a(c, v);
Q3Socket *s = new Q3Socket(&a);
s->connectToHost("ftp.qt.nokia.com", 21);
// dummy verify since this test only makes shure that it does not crash
QVERIFY( TRUE );
}
void tst_Q3Dns::literals()
{
int c = 0;
char **v = 0;
QCoreApplication a(c, v);
Q3Dns ip4literal1("4.2.2.1", Q3Dns::A);
QCOMPARE((int) ip4literal1.addresses().count(), 1);
QCOMPARE(ip4literal1.addresses().first().toString(), QString("4.2.2.1"));
Q3Dns ip4literal2("4.2.2.1", Q3Dns::Aaaa);
QCOMPARE((int) ip4literal2.addresses().count(), 0);
Q3Dns ip6literal1("::1", Q3Dns::A);
QCOMPARE((int) ip6literal1.addresses().count(), 0);
Q3Dns ip6literal2("::1", Q3Dns::Aaaa);
QCOMPARE(ip6literal2.addresses().first().toString(), QString("0:0:0:0:0:0:0:1"));
QCOMPARE((int) ip6literal2.addresses().count(), 1);
}
void tst_Q3Dns::txtRecords()
{
QSKIP("TXT record support is broken.", SkipAll);
int argc = 0;
char **argv = 0;
QCoreApplication qapp(argc, argv);
Q3Dns dns("Sales._ipp._tcp.dns-sd.org", Q3Dns::Txt);
connect(&dns, SIGNAL(resultsReady()), SLOT(txtRecordAnswer()));
QTestEventLoop::instance().enterLoop(10);
if (QTestEventLoop::instance().timeout())
QFAIL("Timed out while looking up TXT record for Sales._ipp._tcp.dns-sd.org");
QStringList texts = dns.texts();
#if defined Q_OS_DARWIN
QSKIP("TXT records in Q3Dns don't work for Mac OS X.", SkipSingle);
#endif
QVERIFY(!texts.isEmpty());
QCOMPARE(texts.at(0), QString("rp=lpt1"));
}
void tst_Q3Dns::txtRecordAnswer()
{
QTestEventLoop::instance().exitLoop();
}
void tst_Q3Dns::longTxtRecord()
{
QSKIP("Long TXT records in Q3Dns don't work.", SkipSingle);
int c = 0;
char **v = 0;
QCoreApplication a(c, v);
Q3Dns dns(QString::fromLatin1("andreas.hanssen.name"), Q3Dns::Txt);
QObject::connect(&dns, SIGNAL(resultsReady()), this, SLOT(longTxtRecordAnswer()));
QTestEventLoop::instance().enterLoop(30);
if (QTestEventLoop::instance().timeout())
QFAIL("Network operation timed out");
QStringList list = dns.texts();
QCOMPARE(list.count(), 1);
QCOMPARE(list[0], QString::fromLatin1("I have a remarkable solution to Fermat's last theorem, but it doesn't fit into this TXT record"));
}
void tst_Q3Dns::longTxtRecordAnswer()
{
QTestEventLoop::instance().exitLoop();
}
void tst_Q3Dns::simpleLookup()
{
// Stuff
int c = 0;
char **v = 0;
QCoreApplication a(c, v);
Q3Dns dns("qt.nokia.com");
QSignalSpy spy(&dns, SIGNAL(resultsReady()));
connect(&dns, SIGNAL(resultsReady()), this, SLOT(simpleLookupDone()));
QTestEventLoop::instance().enterLoop(5);
if (QTestEventLoop::instance().timeout())
QFAIL("Network operation timed out");
QCOMPARE(spy.count(), 1);
}
void tst_Q3Dns::simpleLookupDone()
{
QTestEventLoop::instance().exitLoop();
}
QTEST_APPLESS_MAIN(tst_Q3Dns)
#include "tst_q3dns.moc"