Beispiel #1
0
void Repository::requestLibraryList(const QUrl& url) const noexcept {
  NetworkRequest* request = new NetworkRequest(url);
  request->setHeaderField("Accept", "application/json;charset=UTF-8");
  request->setHeaderField("Accept-Charset", "UTF-8");
  connect(request, &NetworkRequest::errored, this,
          &Repository::errorWhileFetchingLibraryList, Qt::QueuedConnection);
  connect(request, &NetworkRequest::dataReceived, this,
          &Repository::requestedDataReceived, Qt::QueuedConnection);
  request->start();
}
TEST_P(NetworkRequestTest, testDownload) {
  const NetworkRequestTestData& data = GetParam();

  // start the request
  NetworkRequest* request = new NetworkRequest(data.url);
  if (!data.accept.isEmpty()) {
    request->setHeaderField("Accept", data.accept);
  }
  QObject::connect(request, &NetworkRequest::progressState, &mSignalReceiver,
                   &NetworkRequestBaseSignalReceiver::progressState);
  QObject::connect(request, &NetworkRequest::progressPercent, &mSignalReceiver,
                   &NetworkRequestBaseSignalReceiver::progressPercent);
  QObject::connect(request, &NetworkRequest::progress, &mSignalReceiver,
                   &NetworkRequestBaseSignalReceiver::progress);
  QObject::connect(request, &NetworkRequest::aborted, &mSignalReceiver,
                   &NetworkRequestBaseSignalReceiver::aborted);
  QObject::connect(request, &NetworkRequest::succeeded, &mSignalReceiver,
                   &NetworkRequestBaseSignalReceiver::succeeded);
  QObject::connect(request, &NetworkRequest::errored, &mSignalReceiver,
                   &NetworkRequestBaseSignalReceiver::errored);
  QObject::connect(request, &NetworkRequest::finished, &mSignalReceiver,
                   &NetworkRequestBaseSignalReceiver::finished);
  QObject::connect(request, &NetworkRequest::dataReceived, &mSignalReceiver,
                   &NetworkRequestBaseSignalReceiver::dataReceived);
  QObject::connect(request, &NetworkRequest::destroyed, &mSignalReceiver,
                   &NetworkRequestBaseSignalReceiver::destroyed);
  request->start();

  // wait until request finished (with timeout)
  qint64 start       = QDateTime::currentDateTime().toMSecsSinceEpoch();
  auto   currentTime = []() {
    return QDateTime::currentDateTime().toMSecsSinceEpoch();
  };
  while ((!mSignalReceiver.mDestroyed) && (currentTime() - start < 30000)) {
    QThread::msleep(100);
    qApp->processEvents();
  }

  // check count and parameters of emited signals
  EXPECT_TRUE(mSignalReceiver.mDestroyed) << "Request timed out!";
  EXPECT_GT(mSignalReceiver.mProgressStateCallCount, 0);
  EXPECT_EQ(mSignalReceiver.mAdvancedProgressCallCount,
            mSignalReceiver.mSimpleProgressCallCount);
  EXPECT_EQ(0, mSignalReceiver.mAbortedCallCount);
  EXPECT_EQ(1, mSignalReceiver.mFinishedCallCount);
  EXPECT_EQ(0, mSignalReceiver.mFileDownloadedCallCount);
  EXPECT_EQ(0, mSignalReceiver.mZipFileExtractedCallCount);
  if (data.success) {
    EXPECT_GE(mSignalReceiver.mSimpleProgressCallCount, 1);
    EXPECT_EQ(1, mSignalReceiver.mSucceededCallCount);
    EXPECT_EQ(0, mSignalReceiver.mErroredCallCount);
    EXPECT_EQ(1, mSignalReceiver.mDataReceivedCallCount);
    EXPECT_TRUE(mSignalReceiver.mErrorMessage.isNull())
        << qPrintable(mSignalReceiver.mErrorMessage);
    EXPECT_TRUE(mSignalReceiver.mFinishedSuccess);
    EXPECT_FALSE(mSignalReceiver.mReceivedData.isEmpty());
  } else {
    EXPECT_GE(mSignalReceiver.mSimpleProgressCallCount, 0);
    EXPECT_EQ(0, mSignalReceiver.mSucceededCallCount);
    EXPECT_EQ(1, mSignalReceiver.mErroredCallCount);
    EXPECT_EQ(0, mSignalReceiver.mDataReceivedCallCount);
    EXPECT_FALSE(mSignalReceiver.mErrorMessage.isEmpty())
        << qPrintable(mSignalReceiver.mErrorMessage);
    EXPECT_FALSE(mSignalReceiver.mFinishedSuccess);
    EXPECT_TRUE(mSignalReceiver.mReceivedData.isEmpty());
  }
  EXPECT_TRUE(
      mSignalReceiver.mReceivedData.trimmed().startsWith(data.contentStart))
      << qPrintable(mSignalReceiver.mReceivedData);
}