summaryrefslogtreecommitdiffstats
path: root/tests/auto/qrfcommserver/tst_qrfcommserver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/qrfcommserver/tst_qrfcommserver.cpp')
-rw-r--r--tests/auto/qrfcommserver/tst_qrfcommserver.cpp303
1 files changed, 105 insertions, 198 deletions
diff --git a/tests/auto/qrfcommserver/tst_qrfcommserver.cpp b/tests/auto/qrfcommserver/tst_qrfcommserver.cpp
index cc64826c..068e8fdc 100644
--- a/tests/auto/qrfcommserver/tst_qrfcommserver.cpp
+++ b/tests/auto/qrfcommserver/tst_qrfcommserver.cpp
@@ -49,7 +49,11 @@
QT_USE_NAMESPACE
-Q_DECLARE_METATYPE(QBluetooth::SecurityFlags);
+//same uuid as tests/bttestui
+#define TEST_SERVICE_UUID "e8e10f95-1a70-4b27-9ccf-02010264e9c8"
+
+Q_DECLARE_METATYPE(QBluetooth::SecurityFlags)
+Q_DECLARE_METATYPE(QBluetoothServer::Error)
// Max time to wait for connection
static const int MaxConnectTime = 60 * 1000; // 1 minute in ms
@@ -64,24 +68,18 @@ public:
private slots:
void initTestCase();
+ void cleanupTestCase();
void tst_construction();
- void tst_listen_data();
- void tst_listen();
-
- void tst_secureFlags();
-
- void tst_pendingConnections_data();
- void tst_pendingConnections();
-
void tst_receive_data();
void tst_receive();
- void tst_error();
+ void setHostMode(const QBluetoothAddress &localAdapter, QBluetoothLocalDevice::HostMode newHostMode);
private:
QBluetoothLocalDevice localDevice;
+ QBluetoothLocalDevice::HostMode initialHostMode;
};
tst_QRfcommServer::tst_QRfcommServer()
@@ -92,242 +90,151 @@ tst_QRfcommServer::~tst_QRfcommServer()
{
}
-void tst_QRfcommServer::initTestCase()
+void tst_QRfcommServer::setHostMode(const QBluetoothAddress &localAdapter,
+ QBluetoothLocalDevice::HostMode newHostMode)
{
- qRegisterMetaType<QBluetooth::SecurityFlags>("QBluetooth::SecurityFlags");
+ QBluetoothLocalDevice device(localAdapter);
+ QSignalSpy hostModeSpy(&device, SIGNAL(hostModeStateChanged(QBluetoothLocalDevice::HostMode)));
+
+ if (!device.isValid())
+ return;
+
+ if (device.hostMode() == newHostMode)
+ return;
+
+ //We distinguish powerOn() and setHostMode(HostConnectable) because
+ //Android uses different permission levels, we want to avoid interaction with user
+ //which implies usage of powerOn -> unfortunately powerOn() is not equivalent to HostConnectable
+ //Unfortunately the discoverable mode always requires a user confirmation
+ switch (newHostMode) {
+ case QBluetoothLocalDevice::HostPoweredOff:
+ case QBluetoothLocalDevice::HostDiscoverable:
+ case QBluetoothLocalDevice::HostDiscoverableLimitedInquiry:
+ device.setHostMode(newHostMode);
+ break;
+ case QBluetoothLocalDevice::HostConnectable:
+ device.powerOn();
+ break;
+ }
- if (!QBluetoothLocalDevice::allDevices().count())
- QSKIP("Skipping test due to missing Bluetooth device");
-
- // turn on BT in case it is not on
- if (localDevice.hostMode() == QBluetoothLocalDevice::HostPoweredOff) {
- QSignalSpy hostModeSpy(&localDevice, SIGNAL(hostModeStateChanged(QBluetoothLocalDevice::HostMode)));
- QVERIFY(hostModeSpy.isEmpty());
- localDevice.powerOn();
- int connectTime = 5000; // ms
- while (hostModeSpy.count() < 1 && connectTime > 0) {
- QTest::qWait(500);
- connectTime -= 500;
- }
- QVERIFY(hostModeSpy.count() > 0);
+ int connectTime = 5000; // ms
+ while (hostModeSpy.count() < 1 && connectTime > 0) {
+ QTest::qWait(500);
+ connectTime -= 500;
}
- QBluetoothLocalDevice::HostMode hostMode= localDevice.hostMode();
- QVERIFY(hostMode == QBluetoothLocalDevice::HostConnectable
- || hostMode == QBluetoothLocalDevice::HostDiscoverable
- || hostMode == QBluetoothLocalDevice::HostDiscoverableLimitedInquiry);
}
-void tst_QRfcommServer::tst_construction()
+void tst_QRfcommServer::initTestCase()
{
- {
- QBluetoothServer server(QBluetoothServiceInfo::RfcommProtocol);
+ qRegisterMetaType<QBluetooth::SecurityFlags>("QBluetooth::SecurityFlags");
+ qRegisterMetaType<QBluetoothServer::Error>("QBluetoothServer::Error");
- QVERIFY(!server.isListening());
- QCOMPARE(server.maxPendingConnections(), 1);
- QVERIFY(!server.hasPendingConnections());
- QVERIFY(server.nextPendingConnection() == 0);
- QVERIFY(server.serverAddress().isNull());
- QCOMPARE(server.serverPort(), quint16(0));
- }
-}
+ QBluetoothLocalDevice device;
+ if (!device.isValid())
+ return;
-void tst_QRfcommServer::tst_listen_data()
-{
- QTest::addColumn<QBluetoothAddress>("address");
- QTest::addColumn<quint16>("port");
+ initialHostMode = device.hostMode();
+
+ setHostMode(device.address(), QBluetoothLocalDevice::HostConnectable);
+
+ QBluetoothLocalDevice::HostMode hostMode= localDevice.hostMode();
- QTest::newRow("default") << QBluetoothAddress() << quint16(0);
- QTest::newRow("specified address") << QBluetoothAddress("00:11:B1:08:AD:B8") << quint16(0);
- QTest::newRow("specified port") << QBluetoothAddress() << quint16(10);
- QTest::newRow("specified address/port") << QBluetoothAddress("00:11:B1:08:AD:B8") << quint16(10);
+ QVERIFY(hostMode != QBluetoothLocalDevice::HostPoweredOff);
}
-void tst_QRfcommServer::tst_listen()
+void tst_QRfcommServer::cleanupTestCase()
{
- QFETCH(QBluetoothAddress, address);
- QFETCH(quint16, port);
+ QBluetoothLocalDevice device;
+ setHostMode(device.address(), initialHostMode);
+}
+void tst_QRfcommServer::tst_construction()
+{
{
QBluetoothServer server(QBluetoothServiceInfo::RfcommProtocol);
- qDebug() << "tst_listen() address=" << address.toString() << "port=" << port;
- bool result = server.listen(address, port);
- QTest::qWait(1000);
-
- QVERIFY(result);
- QVERIFY(server.isListening());
-
- if (!address.isNull())
- QCOMPARE(server.serverAddress(), address);
-
- qDebug()<<"Server Port="<<server.serverPort();
- if (port != 0)
- QCOMPARE(server.serverPort(), port);
- else
- QVERIFY(server.serverPort() != 0);
+ QVERIFY(!server.isListening());
QCOMPARE(server.maxPendingConnections(), 1);
-
QVERIFY(!server.hasPendingConnections());
QVERIFY(server.nextPendingConnection() == 0);
+ QCOMPARE(server.error(), QBluetoothServer::NoError);
+ QCOMPARE(server.serverType(), QBluetoothServiceInfo::RfcommProtocol);
+ }
- server.close();
- QTest::qWait(2000);
+ {
+ QBluetoothServer server(QBluetoothServiceInfo::L2capProtocol);
QVERIFY(!server.isListening());
-
- QVERIFY(server.serverAddress().isNull());
- QVERIFY(server.serverPort() == 0);
-
- QVERIFY(server.hasPendingConnections() == false);
+ QCOMPARE(server.maxPendingConnections(), 1);
+ QVERIFY(!server.hasPendingConnections());
QVERIFY(server.nextPendingConnection() == 0);
+ QCOMPARE(server.error(), QBluetoothServer::NoError);
+ QCOMPARE(server.serverType(), QBluetoothServiceInfo::L2capProtocol);
}
}
-void tst_QRfcommServer::tst_pendingConnections_data()
+void tst_QRfcommServer::tst_receive_data()
{
- QTest::addColumn<int>("maxConnections");
-
- QTest::newRow("1 connection") << 1;
- //QTest::newRow("2 connections") << 2;
+ QTest::addColumn<QBluetoothLocalDevice::HostMode>("hostmode");
+ QTest::newRow("offline mode") << QBluetoothLocalDevice::HostPoweredOff;
+ QTest::newRow("online mode") << QBluetoothLocalDevice::HostConnectable;
}
-void tst_QRfcommServer::tst_pendingConnections()
+void tst_QRfcommServer::tst_receive()
{
- QFETCH(int, maxConnections);
+ QFETCH(QBluetoothLocalDevice::HostMode, hostmode);
- QBluetoothServer server(QBluetoothServiceInfo::RfcommProtocol);
QBluetoothLocalDevice localDev;
+ const QBluetoothAddress address = localDev.address();
- QBluetoothAddress address = localDev.address();
- server.setMaxPendingConnections(maxConnections);
- bool result = server.listen(address, 20); // port == 20
- QTest::qWait(1000);
-
- QVERIFY(result);
- QVERIFY(server.isListening());
-
- qDebug() << "tst_pendingConnections() Listening on address " << address.toString() << "RFCOMM channel:" << server.serverPort();
-
- QCOMPARE(server.maxPendingConnections(), maxConnections);
-
- QVERIFY(!server.hasPendingConnections());
- QVERIFY(server.nextPendingConnection() == 0);
-
- /* wait for maxConnections simultaneous connections */
- qDebug() << "Waiting for" << maxConnections << "simultaneous connections.";
+ bool localDeviceAvailable = localDev.isValid();
- QSignalSpy connectionSpy(&server, SIGNAL(newConnection()));
+ if (localDeviceAvailable) {
+ setHostMode(address, hostmode);
- int connectTime = MaxConnectTime;
- while (connectionSpy.count() < maxConnections && connectTime > 0) {
- QTest::qWait(1000);
- connectTime -= 1000;
- }
-
- QList<QBluetoothSocket *> sockets;
- while (server.hasPendingConnections())
- sockets.append(server.nextPendingConnection());
-
- QCOMPARE(connectionSpy.count(), maxConnections);
- QCOMPARE(sockets.count(), maxConnections);
-
- foreach (QBluetoothSocket *socket, sockets) {
- qDebug() << socket->state();
- QVERIFY(socket->state() == QBluetoothSocket::ConnectedState);
- QVERIFY(socket->openMode() == QIODevice::ReadWrite);
- }
-
- QVERIFY(!server.hasPendingConnections());
- QVERIFY(server.nextPendingConnection() == 0);
-
- while (!sockets.isEmpty()) {
- QBluetoothSocket *socket = sockets.takeFirst();
- socket->close();
- delete socket;
+ if (hostmode == QBluetoothLocalDevice::HostPoweredOff)
+ QCOMPARE(localDevice.hostMode(), hostmode);
+ else
+ QVERIFY(localDevice.hostMode() != QBluetoothLocalDevice::HostPoweredOff);
}
-
- server.close();
-}
-
-void tst_QRfcommServer::tst_receive_data()
-{
- QTest::addColumn<QByteArray>("expected");
-
- QTest::newRow("test") << QByteArray("hello\r\n");
-}
-
-void tst_QRfcommServer::tst_receive()
-{
- QFETCH(QByteArray, expected);
-
QBluetoothServer server(QBluetoothServiceInfo::RfcommProtocol);
- QBluetoothLocalDevice localDev;
+ QSignalSpy errorSpy(&server, SIGNAL(error(QBluetoothServer::Error)));
- QBluetoothAddress address = localDev.address();
bool result = server.listen(address, 20); // port == 20
QTest::qWait(1000);
- QVERIFY(result);
- QVERIFY(server.isListening());
-
- qDebug() << "Listening on address " << address.toString() << "RFCOMM channel:" << server.serverPort();
-
- int connectTime = MaxConnectTime;
- while (!server.hasPendingConnections() && connectTime > 0) {
- QTest::qWait(1000);
- connectTime -= 1000;
- }
-
- QVERIFY(server.hasPendingConnections());
-
- qDebug() << "Got connection";
-
- QBluetoothSocket *socket = server.nextPendingConnection();
-
- QVERIFY(socket->state() == QBluetoothSocket::ConnectedState);
- QVERIFY(socket->openMode() == QIODevice::ReadWrite);
-
- QSignalSpy readyReadSpy(socket, SIGNAL(readyRead()));
-
- int readyReadTime = 60000;
- while (readyReadSpy.isEmpty() && readyReadTime > 0) {
- QTest::qWait(1000);
- readyReadTime -= 1000;
+ if (!result) {
+ QCOMPARE(server.serverAddress(), QBluetoothAddress());
+ QCOMPARE(server.serverPort(), quint16(0));
+ QVERIFY(errorSpy.count() > 0);
+ QVERIFY(!server.isListening());
+ if (!localDeviceAvailable) {
+ QVERIFY(server.error() != QBluetoothServer::NoError);
+ } else {
+ //local device but poweredOff
+ QCOMPARE(server.error(), QBluetoothServer::PoweredOffError);
+ }
+ return;
}
- QVERIFY(!readyReadSpy.isEmpty());
-
- const QByteArray data = socket->readAll();
-
- QCOMPARE(data, expected);
-}
-
-void tst_QRfcommServer::tst_secureFlags()
-{
- QBluetoothServer server(QBluetoothServiceInfo::RfcommProtocol);
+ QVERIFY(result);
- server.setSecurityFlags(QBluetooth::NoSecurity);
- QCOMPARE(server.securityFlags(), QBluetooth::NoSecurity);
+ QVERIFY(QBluetoothLocalDevice::allDevices().count());
+ QCOMPARE(server.error(), QBluetoothServer::NoError);
+ QCOMPARE(server.serverAddress(), address);
+ QCOMPARE(server.serverPort(), quint16(20));
+ QVERIFY(server.isListening());
+ QVERIFY(!server.hasPendingConnections());
- server.setSecurityFlags(QBluetooth::Encryption);
- QCOMPARE(server.securityFlags(), QBluetooth::Encryption);
+ server.close();
+ QCOMPARE(server.error(), QBluetoothServer::NoError);
+ QVERIFY(server.serverAddress() == address || server.serverAddress() == QBluetoothAddress());
+ QVERIFY(server.serverPort() == 0);
+ QVERIFY(!server.isListening());
+ QVERIFY(!server.hasPendingConnections());
}
-void tst_QRfcommServer::tst_error()
-{
- QBluetoothServer server(QBluetoothServiceInfo::RfcommProtocol);
- QSignalSpy errorSpy(&server, SIGNAL(error(QBluetoothServer::Error)));
- QCOMPARE(errorSpy.count(), 0);
- const QBluetoothServer::Error e = server.error();
-
- QVERIFY(e != QBluetoothServer::UnknownError
- && e != QBluetoothServer::PoweredOffError
- && e != QBluetoothServer::InputOutputError
- && e != QBluetoothServer::ServiceAlreadyRegisteredError
- && e != QBluetoothServer::UnsupportedProtocolError);
-}
-
QTEST_MAIN(tst_QRfcommServer)
#include "tst_qrfcommserver.moc"