// Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include "grpcclienttestbase.h" #include #include #include using namespace Qt::Literals::StringLiterals; void GrpcClientTestBase::initTestCase_data() { QTest::addColumn("type"); QTest::addColumn>("channel"); if (m_channels.testFlag(Channel::Qt)) { QTest::newRow("Http2Client") << QFlags{ Channel::Qt } << std::shared_ptr(new QGrpcHttp2Channel(QGrpcChannelOptions{ QUrl("http://localhost:50051", QUrl::StrictMode) })); #ifndef Q_OS_WINDOWS QTest::newRow("Http2ClientUnix") << QFlags{ Channel::Qt } << std::shared_ptr(new QGrpcHttp2Channel(QGrpcChannelOptions{ QUrl("unix:///tmp/qtgrpc_test.sock", QUrl::StrictMode) })); #endif } #ifdef TEST_GRPC_SERVER_SUPPORTS_JSON if (m_channels.testFlag(Channel::Json)) { QGrpcMetadata md{ { "content-type"_ba, "application/grpc+json" } }; QTest::newRow("Http2ClientJson") << QFlags{ Channel::Qt } << std::shared_ptr(new QGrpcHttp2Channel(QGrpcChannelOptions{ QUrl("http://localhost:50051", QUrl::StrictMode) } .setMetadata(md))); QTest::newRow("Http2ClientJsonUnix") << QFlags{ Channel::Qt } << std::shared_ptr(new QGrpcHttp2Channel(QGrpcChannelOptions{ QUrl("unix:///tmp/qtgrpc_test.sock", QUrl::StrictMode) } .setMetadata(md))); } #endif #if QT_CONFIG(ssl) if (m_channels.testFlag(Channel::Ssl)) { QFile caCerificateFile(":/assets/cert.pem"); QVERIFY2(caCerificateFile.open(QFile::ReadOnly), "Unable to open ssl ca certificate file"); QSslConfiguration sslConfig; QSslCertificate caCert(caCerificateFile.readAll()); sslConfig.setProtocol(QSsl::TlsV1_2); sslConfig.addCaCertificate(caCert); sslConfig.setAllowedNextProtocols({ QByteArray("h2") }); QTest::newRow("Http2ClientSSL") << QFlags{ Channel::Qt, Channel::Ssl } << std::shared_ptr(new QGrpcHttp2Channel( QGrpcChannelOptions{ QUrl("https://localhost:50052", QUrl::StrictMode) } .withSslConfiguration(sslConfig))); } if (m_channels.testFlag(Channel::SslNoCredentials)) { QSslConfiguration sslConfig; sslConfig.setProtocol(QSsl::TlsV1_2); sslConfig.setAllowedNextProtocols({ QByteArray("h2") }); QGrpcChannelOptions channelOptions(QUrl("https://localhost:50052", QUrl::StrictMode)); channelOptions.withSslConfiguration(sslConfig); QTest::newRow("Http2ClientSSLNoCredentials") << QFlags{ Channel::Qt, Channel::SslNoCredentials } << std::shared_ptr(new QGrpcHttp2Channel(channelOptions)); } #endif if (m_channels.testFlag(Channel::WithChannelDeadline)) { constexpr auto channelTimeout = QGrpcDuration(static_cast(MessageLatency * 0.25)); QTest::newRow("Http2ClientDeadline") << QFlags{ Channel::Qt, Channel::WithChannelDeadline } << std::shared_ptr< QAbstractGrpcChannel>(new QGrpcHttp2Channel(QGrpcChannelOptions{ QUrl("http://localhost:50051", QUrl::StrictMode) } .setDeadline(channelTimeout))); } } void GrpcClientTestBase::init() { QFETCH_GLOBAL(GrpcClientTestBase::Channels, type); m_channelType = type; QFETCH_GLOBAL(std::shared_ptr, channel); m_client = std::make_shared(); m_client->attachChannel(std::move(channel)); if (m_serverProccess.state() != QProcess::ProcessState::Running) { qInfo() << "Restarting server"; m_serverProccess.restart(); QVERIFY2(m_serverProccess.state() == QProcess::ProcessState::Running, "Precondition failed - Server cannot be started."); } } std::shared_ptr GrpcClientTestBase::client() { return m_client; } GrpcClientTestBase::Channels GrpcClientTestBase::channelType() { return m_channelType; }