Browse Source

Add async calls tests

- Fix issue in AbstractClient
- Add and update tests
Alexey Edelev 5 years ago
parent
commit
f9f77c102e
2 changed files with 42 additions and 1 deletions
  1. 1 1
      src/grpc/abstractclient.h
  2. 41 0
      tests/test_grpc/clienttest.cpp

+ 1 - 1
src/grpc/abstractclient.h

@@ -55,7 +55,7 @@ protected:
         QByteArray retData;
         if (call(method, arg.serialize(), retData)) {
             try {
-                ret.deserialize(retData.mid(5));
+                ret.deserialize(retData);
             } catch (std::invalid_argument) {
                 qProtoCritical() << "Response deserialization failed invalid field found";
                 return false;

+ 41 - 0
tests/test_grpc/clienttest.cpp

@@ -50,6 +50,7 @@ TEST_F(ClientTest, CheckMethodsGeneration)
     SimpleStringMessage request;
     testClient.testMethod(result, request);
     testClient.testMethod(result);
+    testClient.testMethod(result, &testClient, [](AsyncReply*){});
 }
 
 TEST_F(ClientTest, StringEchoTest)
@@ -64,3 +65,43 @@ TEST_F(ClientTest, StringEchoTest)
     ASSERT_TRUE(testClient.testMethod(request, result));
     ASSERT_STREQ(result.testFieldString().toStdString().c_str(), "Hello beach!");
 }
+
+TEST_F(ClientTest, StringEchoAsyncTest)
+{
+    int argc = 0;
+    QCoreApplication app(argc, nullptr);
+    TestServiceClient testClient;
+    testClient.attachChannel(std::make_shared<Http2Channel>("localhost", 50051));
+    SimpleStringMessage result;
+    SimpleStringMessage request;
+    request.setTestFieldString("Hello beach!");
+    QEventLoop waiter;
+
+    AsyncReply* reply = testClient.testMethod(request);
+    QObject::connect(reply, &AsyncReply::finished, &app, [reply, &result, &waiter]() {
+        result = reply->read<SimpleStringMessage>();
+        waiter.quit();
+    });
+
+    waiter.exec();
+    ASSERT_STREQ(result.testFieldString().toStdString().c_str(), "Hello beach!");
+}
+
+TEST_F(ClientTest, StringEchoAsync2Test)
+{
+    int argc = 0;
+    QCoreApplication app(argc, nullptr);
+    TestServiceClient testClient;
+    testClient.attachChannel(std::make_shared<Http2Channel>("localhost", 50051));
+    SimpleStringMessage result;
+    SimpleStringMessage request;
+    request.setTestFieldString("Hello beach!");
+    QEventLoop waiter;
+    testClient.testMethod(request, &app, [&result, &waiter](AsyncReply *reply) {
+        result = reply->read<SimpleStringMessage>();
+        waiter.quit();
+    });
+
+    waiter.exec();
+    ASSERT_STREQ(result.testFieldString().toStdString().c_str(), "Hello beach!");
+}