Files
RedBear-OS/local/recipes/kde/kf6-attica/source/autotests/providertest.cpp
T
vasilito e8a15d396a fix: KF6Attica recipe, kf6-knewstuff Attica dep, topo-sort cycle error
- Created kf6-attica recipe (minimal core library build providing
  KF6::Attica cmake target, needed by kf6-knewstuff). v6.10.0,
  QML/tests/examples disabled.
- Added kf6-attica to redbear-full.toml config, integrate-redbear.sh
  symlink, and recipes/kde/ symlink.
- Fixed kf6-knewstuff: removed stale find_package(KF6Attica)
  suppression; added kf6-attica as dependency. Now publishes
  to repo (core-only build produces empty package — upstream
  code structure yields no libs with QtQuick/widgets/tools off).
- Cookbook topo-sort: changed cycle fallback from silent
  Ok(recipes) to Err(Recursion) — surfaces dependency graph
  bugs instead of hiding them.
- Fixed stale QtNetwork comment: QtNetwork IS enabled in qtbase
  since 2026-04-29 (relibc DNS resolver hardened).
- Verified: kf6-attica builds, kf6-knewstuff publishes to repo
2026-04-30 01:32:25 +01:00

194 lines
6.3 KiB
C++

/*
This file is part of KDE.
SPDX-FileCopyrightText: 2018 Ralf Habacker <ralf.habacker@freenet.de>
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
*/
#include <QEventLoop>
#include <QTest>
#include <QTimer>
#include <QLoggingCategory>
#include "config.h"
#include "content.h"
#include "providermanager.h"
using namespace Attica;
class ProviderTest : public QObject
{
Q_OBJECT
public:
ProviderTest();
~ProviderTest() override;
private:
void initProvider(const QUrl &url);
private Q_SLOTS:
void testFetchValidProvider();
void testFetchInvalidProvider();
void testSwitchSortOrder();
protected Q_SLOTS:
void providerAdded(Attica::Provider p);
void slotDefaultProvidersLoaded();
void slotConfigResult(Attica::BaseJob *j);
void slotListResult(Attica::BaseJob *j);
void slotList2Result(Attica::BaseJob *j);
void slotTimeout();
private:
Attica::ProviderManager *m_manager;
QEventLoop *m_eventloop;
QTimer m_timer;
bool m_errorReceived = false;
};
ProviderTest::ProviderTest()
: m_manager(nullptr)
, m_eventloop(new QEventLoop)
{
QLoggingCategory::setFilterRules(QStringLiteral("kf.attica.debug=true"));
}
ProviderTest::~ProviderTest()
{
delete m_manager;
delete m_eventloop;
}
void ProviderTest::slotDefaultProvidersLoaded()
{
qDebug() << "default providers loaded";
m_eventloop->exit();
}
void ProviderTest::providerAdded(Attica::Provider p)
{
qDebug() << "got provider" << p.name();
m_eventloop->exit();
}
void ProviderTest::initProvider(const QUrl &url)
{
m_errorReceived = false;
delete m_manager;
m_manager = new Attica::ProviderManager;
m_manager->setAuthenticationSuppressed(true);
connect(m_manager, &ProviderManager::defaultProvidersLoaded, this, &ProviderTest::slotDefaultProvidersLoaded);
connect(m_manager, &ProviderManager::providerAdded, this, &ProviderTest::providerAdded);
m_manager->addProviderFile(url);
connect(m_manager, &Attica::ProviderManager::failedToLoad, this, [this]() {
m_errorReceived = true;
m_eventloop->quit();
});
m_timer.singleShot(30000, this, &ProviderTest::slotTimeout);
m_eventloop->exec();
}
void ProviderTest::testFetchValidProvider()
{
initProvider(QUrl(QLatin1String("https://autoconfig.kde.org/ocs/providers.xml")));
Attica::Provider provider = m_manager->providers().at(0);
ItemJob<Config> *job = provider.requestConfig();
QVERIFY(job);
connect(job, &BaseJob::finished, this, &ProviderTest::slotConfigResult);
job->start();
m_eventloop->exec();
}
void ProviderTest::slotConfigResult(Attica::BaseJob *j)
{
if (j->metadata().error() == Metadata::NoError) {
Attica::ItemJob<Config> *itemJob = static_cast<Attica::ItemJob<Config> *>(j);
Attica::Config p = itemJob->result();
qDebug() << QLatin1String("Config loaded - Server has version") << p.version();
} else if (j->metadata().error() == Metadata::OcsError) {
qDebug() << QString(QLatin1String("OCS Error: %1")).arg(j->metadata().message());
} else if (j->metadata().error() == Metadata::NetworkError) {
qDebug() << QString(QLatin1String("Network Error: %1")).arg(j->metadata().message());
} else {
qDebug() << QString(QLatin1String("Unknown Error: %1")).arg(j->metadata().message());
}
m_eventloop->exit();
m_timer.stop();
QVERIFY(j->metadata().error() == Metadata::NoError);
}
void ProviderTest::testSwitchSortOrder()
{
initProvider(QUrl(QLatin1String("https://autoconfig.kde.org/ocs/providers.xml")));
Attica::Provider provider = m_manager->providers().at(0);
ListJob<Content> *job = provider.searchContents({}, {});
QVERIFY(job);
connect(job, &BaseJob::finished, this, &ProviderTest::slotListResult);
job->start();
m_eventloop->exec();
}
void ProviderTest::slotListResult(Attica::BaseJob *j)
{
if (j->metadata().error() == Metadata::NoError) {
Attica::ListJob<Content> *contentJob = static_cast<Attica::ListJob<Content> *>(j);
Content::List items = contentJob->itemList();
qDebug() << QLatin1String("First list of items loaded, we have the following amount:") << items.count();
} else if (j->metadata().error() == Metadata::OcsError) {
qDebug() << QString(QLatin1String("OCS Error: %1")).arg(j->metadata().message());
} else if (j->metadata().error() == Metadata::NetworkError) {
qDebug() << QString(QLatin1String("Network Error: %1")).arg(j->metadata().message());
} else {
qDebug() << QString(QLatin1String("Unknown Error: %1")).arg(j->metadata().message());
}
m_timer.stop();
QVERIFY(j->metadata().error() == Metadata::NoError);
// Now do the actual switch
Attica::Provider provider = m_manager->providers().at(0);
ListJob<Content> *job = provider.searchContents({}, {}, Provider::Downloads);
QVERIFY(job);
connect(job, &BaseJob::finished, this, &ProviderTest::slotList2Result);
m_timer.singleShot(30000, this, &ProviderTest::slotTimeout);
job->start();
}
void ProviderTest::slotList2Result(Attica::BaseJob *j)
{
if (j->metadata().error() == Metadata::NoError) {
Attica::ListJob<Content> *contentJob = static_cast<Attica::ListJob<Content> *>(j);
Content::List items = contentJob->itemList();
qDebug() << QLatin1String("Second list of items loaded, we have the following amount:") << items.count();
} else if (j->metadata().error() == Metadata::OcsError) {
qDebug() << QString(QLatin1String("OCS Error: %1")).arg(j->metadata().message());
} else if (j->metadata().error() == Metadata::NetworkError) {
qDebug() << QString(QLatin1String("Network Error: %1")).arg(j->metadata().message());
} else {
qDebug() << QString(QLatin1String("Unknown Error: %1")).arg(j->metadata().message());
}
m_eventloop->exit();
m_timer.stop();
QVERIFY(j->metadata().error() == Metadata::NoError);
}
void ProviderTest::slotTimeout()
{
QVERIFY(m_eventloop->isRunning());
m_eventloop->exit();
QFAIL("Timeout fetching provider");
}
void ProviderTest::testFetchInvalidProvider()
{
initProvider(QUrl(QLatin1String("https://invalid-url.org/ocs/providers.xml")));
QVERIFY(m_manager->providers().size() == 0);
QVERIFY(m_errorReceived);
}
QTEST_GUILESS_MAIN(ProviderTest)
#include "providertest.moc"