1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QSsl>
#include <private/qqmlsslconfiguration_p.h>
class tst_QQmlSslConfiguration : public QObject
{
Q_OBJECT
enum class ConfType : quint8
{
DefaultSsl,
DefaultDtls,
};
private Q_SLOTS:
void sslOptionsInSync_data();
void sslOptionsInSync();
void sslOptionFlags_data();
void sslOptionFlags();
public:
// Keep in sync with QSsl::SslOptions!
static constexpr
std::array<QSsl::SslOption, 8> AllOptions { QSsl::SslOptionDisableEmptyFragments,
QSsl::SslOptionDisableSessionTickets,
QSsl::SslOptionDisableCompression,
QSsl::SslOptionDisableServerNameIndication,
QSsl::SslOptionDisableLegacyRenegotiation,
QSsl::SslOptionDisableSessionSharing,
QSsl::SslOptionDisableSessionPersistence,
QSsl::SslOptionDisableServerCipherPreference };
};
static QList<QSsl::SslOption> getSslOptionsFromConfig(const QSslConfiguration &c)
{
QList<QSsl::SslOption> result;
for (auto opt : tst_QQmlSslConfiguration::AllOptions) {
if (c.testSslOption(opt))
result.append(opt);
}
// return a sorted list
std::sort(result.begin(), result.end());
return result;
}
static QSsl::SslOptions getSslOptionsAsFlags(const QSslConfiguration &c)
{
QSsl::SslOptions options{};
for (auto opt : tst_QQmlSslConfiguration::AllOptions) {
if (c.testSslOption(opt))
options |= opt;
}
return options;
}
void tst_QQmlSslConfiguration::sslOptionsInSync_data()
{
QTest::addColumn<ConfType>("type");
QTest::newRow("DefaultSslConfiguration") << ConfType::DefaultSsl;
QTest::newRow("DefaultDtlsConfiguration") << ConfType::DefaultDtls;
}
void tst_QQmlSslConfiguration::sslOptionsInSync()
{
#if QT_REMOVAL_QT7_DEPRECATED_SINCE(6, 11)
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
QFETCH(ConfType, type);
std::unique_ptr<QQmlSslConfiguration> conf;
if (type == ConfType::DefaultSsl)
conf.reset(new QQmlSslDefaultConfiguration);
else
conf.reset(new QQmlSslDefaultDtlsConfiguration);
// Default config has some options, and originally they're in sync
auto opts = conf->sslOptions();
std::sort(opts.begin(), opts.end());
QCOMPARE_EQ(opts, getSslOptionsFromConfig(conf->configuration()));
// set new options
QList<QSsl::SslOption> newOptions { QSsl::SslOptionDisableCompression,
QSsl::SslOptionDisableServerCipherPreference };
conf->setSslOptions(newOptions);
std::sort(newOptions.begin(), newOptions.end());
opts = conf->sslOptions();
std::sort(opts.begin(), opts.end());
// reading back the correct value
QCOMPARE_EQ(opts, newOptions);
// reading the values from the underlying configuration
QEXPECT_FAIL("", "QTBUG-137900", Continue);
QCOMPARE_EQ(getSslOptionsFromConfig(conf->configuration()), newOptions);
QT_WARNING_POP
#else
QSKIP("This test should be removed in Qt 7!")
#endif // QT_REMOVAL_QT7_DEPRECATED_SINCE(6, 11)
}
void tst_QQmlSslConfiguration::sslOptionFlags_data()
{
QTest::addColumn<ConfType>("type");
QTest::newRow("DefaultSslConfiguration") << ConfType::DefaultSsl;
QTest::newRow("DefaultDtlsConfiguration") << ConfType::DefaultDtls;
}
void tst_QQmlSslConfiguration::sslOptionFlags()
{
QFETCH(const ConfType, type);
std::unique_ptr<QQmlSslConfiguration> conf;
QSsl::SslOptions defaultOptions;
if (type == ConfType::DefaultSsl) {
conf.reset(new QQmlSslDefaultConfiguration);
defaultOptions = getSslOptionsAsFlags(QSslConfiguration::defaultConfiguration());
} else {
conf.reset(new QQmlSslDefaultDtlsConfiguration);
#if QT_CONFIG(dtls)
defaultOptions = getSslOptionsAsFlags(QSslConfiguration::defaultDtlsConfiguration());
#else
defaultOptions = getSslOptionsAsFlags(QSslConfiguration::defaultConfiguration());
#endif // QT_CONFIG(dtls)
}
// check default options
QCOMPARE_EQ(conf->sslOptionFlags(), defaultOptions);
// check the underlying configuration
QCOMPARE_EQ(getSslOptionsAsFlags(conf->configuration()), defaultOptions);
// update to some new value
QSsl::SslOptions options = QSsl::SslOptionDisableCompression
| QSsl::SslOptionDisableServerCipherPreference;
conf->setSslOptionFlags(options);
QCOMPARE_EQ(conf->sslOptionFlags(), options);
// check the underlying configuration
QCOMPARE_EQ(getSslOptionsAsFlags(conf->configuration()), options);
}
QTEST_MAIN(tst_QQmlSslConfiguration)
#include "tst_qqmlsslconfiguration_cpp.moc"
|