diff --git a/src/amqp_client.cpp b/src/amqp_client.cpp index a1ee157..5c84bee 100644 --- a/src/amqp_client.cpp +++ b/src/amqp_client.cpp @@ -723,6 +723,18 @@ QString Client::customProperty(const QString &name) const return d->customProperties.value(name).toString(); } +Error Client::error() const +{ + Q_D(const Client); + return d->error; +} + +QString Client::errorString() const +{ + Q_D(const Client); + return d->errorString; +} + void Client::connectToHost(const QString &connectionString) { Q_D(Client); diff --git a/src/amqp_client.h b/src/amqp_client.h index 471bca6..aaad61c 100644 --- a/src/amqp_client.h +++ b/src/amqp_client.h @@ -91,7 +91,7 @@ public: Q_SIGNALS: void connected(); void disconnected(); - void error(Error error); + void error(QAMQP::Error error); protected: Client(ClientPrivate *dd, QObject *parent = 0); diff --git a/tests/auto/qamqpexchange/tst_qamqpexchange.cpp b/tests/auto/qamqpexchange/tst_qamqpexchange.cpp index 7694476..b776e30 100644 --- a/tests/auto/qamqpexchange/tst_qamqpexchange.cpp +++ b/tests/auto/qamqpexchange/tst_qamqpexchange.cpp @@ -17,8 +17,10 @@ private Q_SLOTS: void standardTypes_data(); void standardTypes(); - void invalidDeclaration_data(); + void invalidStandardDeclaration_data(); + void invalidStandardDeclaration(); void invalidDeclaration(); + void invalidRedeclaration(); void removeIfUnused(); private: @@ -61,7 +63,7 @@ void tst_QAMQPExchange::standardTypes() QVERIFY(waitForSignal(exchange, SIGNAL(removed()))); } -void tst_QAMQPExchange::invalidDeclaration_data() +void tst_QAMQPExchange::invalidStandardDeclaration_data() { QTest::addColumn("exchangeName"); QTest::addColumn("type"); @@ -76,7 +78,7 @@ void tst_QAMQPExchange::invalidDeclaration_data() QTest::newRow("amq.reserved") << "amq.reserved" << Exchange::Direct << QAMQP::AccessRefusedError; } -void tst_QAMQPExchange::invalidDeclaration() +void tst_QAMQPExchange::invalidStandardDeclaration() { QFETCH(QString, exchangeName); QFETCH(Exchange::ExchangeType, type); @@ -88,6 +90,34 @@ void tst_QAMQPExchange::invalidDeclaration() QCOMPARE(exchange->error(), error); } +void tst_QAMQPExchange::invalidDeclaration() +{ + Exchange *exchange = client->createExchange("test-invalid-declaration"); + exchange->declare("invalidExchangeType"); + QVERIFY(waitForSignal(client.data(), SIGNAL(error(QAMQP::Error)))); + QCOMPARE(client->error(), QAMQP::CommandInvalidError); +} + +void tst_QAMQPExchange::invalidRedeclaration() +{ + Exchange *exchange = client->createExchange("test-invalid-redeclaration"); + exchange->declare(Exchange::Direct); + QVERIFY(waitForSignal(exchange, SIGNAL(declared()))); + + Exchange *redeclared = client->createExchange("test-invalid-redeclaration"); + redeclared->declare(Exchange::FanOut); + QVERIFY(waitForSignal(redeclared, SIGNAL(error(QAMQP::Error)))); + + // this is per spec: + // QCOMPARE(redeclared->error(), QAMQP::NotAllowedError); + // this is for rabbitmq: + QCOMPARE(redeclared->error(), QAMQP::PreconditionFailedError); + + // cleanup + exchange->remove(); + QVERIFY(waitForSignal(exchange, SIGNAL(removed()))); +} + void tst_QAMQPExchange::removeIfUnused() { Exchange *exchange = client->createExchange("test-if-unused-exchange");