Files
RedisDesktopManager/tests/source/test_response.cpp
T
Igor Malinovskiy 8ce22d4909 Refactored RedisConnectionAbstract:
- Move response processing code to Response class
 - Move command processing code to Command class
2013-10-09 14:04:39 +03:00

105 lines
3.4 KiB
C++

#include "test_response.h"
#include "Response.h"
#include <QtCore>
#include <QTest>
void TestResponse::parseResponse()
{
//given
Response test;
QFETCH(QString, testResponse);
QFETCH(QVariant, validResult);
test.setSource(testResponse);
//when
QVariant actualResult = test.getValue();
//then
QCOMPARE(actualResult, validResult);
}
void TestResponse::parseResponse_data()
{
QTest::addColumn<QString>("testResponse");
QTest::addColumn<QVariant>("validResult");
QTest::newRow("Status") << "+OK\r\n" << QVariant(QString("OK"));
QTest::newRow("Error") << "-ERR unknown command 'foobar'\r\n" << QVariant(QString("ERR unknown command 'foobar'"));
QTest::newRow("Integer") << ":99998\r\n" << QVariant(99998);
QTest::newRow("Bulk") << "$6\r\nfoobar\r\n" << QVariant("foobar");
QTest::newRow("Null Bulk") << "$-1\r\n" << QVariant();
QTest::newRow("Multi Bulk") << "*3\r\n:1\r\n:2\r\n$6\r\nfoobar\r\n" << QVariant(QStringList() << "1" << "2" << "foobar");
QTest::newRow("Multi Bulk with empty item")
<< "*6\r\n$6\r\napp_id\r\n$1\r\n0\r\n$7\r\nkeyword\r\n$0\r\n\r\n$3\r\nurl\r\n$5\r\nnourl\r\n"
<< QVariant(QStringList() << "app_id" << "0" << "keyword" << "" << "url" << "nourl");
QTest::newRow("Multi Bulk with \\r\\n in item")
<< "*6\r\n$6\r\napp_id\r\n$1\r\n0\r\n$7\r\nkeyword\r\n$0\r\n\r\n$3\r\nurl\r\n$5\r\nn\r\nrl\r\n"
<< QVariant(QStringList() << "app_id" << "0" << "keyword" << "" << "url" << "n\r\nrl");
}
void TestResponse::isIntResponseValid()
{
//given
Response test;
//when
bool actualOnValid = test.isIntReplyValid(":10000\r\n");
bool actualOnInvalid = test.isIntReplyValid(":99\n");
bool actualOnInvalid2 = test.isIntReplyValid(":");
bool actualOnInvalid3 = test.isIntReplyValid("");
//then
QCOMPARE(actualOnValid, true);
QCOMPARE(actualOnInvalid, false);
QCOMPARE(actualOnInvalid2, false);
QCOMPARE(actualOnInvalid3, false);
}
void TestResponse::isBulkReplyValid()
{
//given
Response test;
//when
bool actualOnValid = test.isBulkReplyValid("$6\r\nfoobar\r\n");
bool actualOnValid2 = test.isBulkReplyValid("$-1\r\n");
bool actualOnValid3 = test.isBulkReplyValid("$12\r\n# Keyspace\r\n\r\n");
bool actualOnInvalid = test.isBulkReplyValid("$1\r\n");
bool actualOnInvalid2 = test.isBulkReplyValid("$5\r\n\r\n");
bool actualOnInvalid3 = test.isBulkReplyValid("$5\r\nhell\r\n");
bool actualOnInvalid4 = test.isBulkReplyValid("$5\r\n");
//then
QCOMPARE(actualOnValid, true);
QCOMPARE(actualOnValid2, true);
QCOMPARE(actualOnValid3, true);
QCOMPARE(actualOnInvalid, false);
QCOMPARE(actualOnInvalid2, false);
QCOMPARE(actualOnInvalid3, false);
QCOMPARE(actualOnInvalid4, false);
}
void TestResponse::isMultiBulkReplyValid()
{
//given
Response test;
//when
bool actualOnValid = test.isMultiBulkReplyValid("*5\r\n:1\r\n:2\r\n:3\r\n:4\r\n$6\r\nfoobar\r\n");
bool actualOnValid2 = test.isMultiBulkReplyValid("*4\r\n$3\r\nfoo\r\n$3\r\nbar\r\n$5\r\nHello\r\n$5\r\nWorld\r\n");
bool actualOnInvalid = test.isMultiBulkReplyValid("");
bool actualOnInvalid2 = test.isMultiBulkReplyValid("*5\r\n");
bool actualOnInvalid3 = test.isMultiBulkReplyValid("*5\r\n:1\r\n");
bool actualOnInvalid4 = test.isMultiBulkReplyValid("*2\r\n:1\r\n$6\r\nHello\r\n");
//then
QCOMPARE(actualOnValid, true);
QCOMPARE(actualOnValid2, true);
QCOMPARE(actualOnInvalid, false);
QCOMPARE(actualOnInvalid2, false);
QCOMPARE(actualOnInvalid3, false);
QCOMPARE(actualOnInvalid4, false);
}