KWin
Loading...
Searching...
No Matches
test_utils.cpp
Go to the documentation of this file.
1/*
2 KWin - the KDE window manager
3 This file is part of the KDE project.
4
5 SPDX-FileCopyrightText: 2022 MBition GmbH
6 SPDX-FileContributor: Kai Uwe Broulik <kai_uwe.broulik@mbition.io>
7
8 SPDX-License-Identifier: GPL-2.0-or-later
9*/
10
11#include <config-kwin.h>
12
13#include <sys/mman.h>
14#include <unistd.h>
15
16#include "utils/ramfile.h"
17
18#include <QTest>
19
20using namespace KWin;
21
22class TestUtils : public QObject
23{
24 Q_OBJECT
25private Q_SLOTS:
26 void testRamFile();
27 void testSealedRamFile();
28};
29
30static const QByteArray s_testByteArray = QByteArrayLiteral("Test Data \0\1\2\3");
31static const char s_writeTestArray[] = "test";
32
33void TestUtils::testRamFile()
34{
35 KWin::RamFile file("test", s_testByteArray.constData(), s_testByteArray.size());
36 QVERIFY(file.isValid());
37 QCOMPARE(file.size(), s_testByteArray.size());
38
39 QVERIFY(file.fd() != -1);
40
41 char buf[20];
42 int num = read(file.fd(), buf, sizeof buf);
43 QCOMPARE(num, file.size());
44
45 QCOMPARE(qstrcmp(s_testByteArray.constData(), buf), 0);
46}
47
48void TestUtils::testSealedRamFile()
49{
50#if HAVE_MEMFD
51 KWin::RamFile file("test", s_testByteArray.constData(), s_testByteArray.size(), KWin::RamFile::Flag::SealWrite);
52 QVERIFY(file.isValid());
53 QVERIFY(file.effectiveFlags().testFlag(KWin::RamFile::Flag::SealWrite));
54
55 // Writing should not work.
56 auto written = write(file.fd(), s_writeTestArray, strlen(s_writeTestArray));
57 QCOMPARE(written, -1);
58
59 // Cannot use MAP_SHARED on sealed file descriptor.
60 void *data = mmap(nullptr, file.size(), PROT_WRITE, MAP_SHARED, file.fd(), 0);
61 QCOMPARE(data, MAP_FAILED);
62
63 data = mmap(nullptr, file.size(), PROT_WRITE, MAP_PRIVATE, file.fd(), 0);
64 QVERIFY(data != MAP_FAILED);
65#else
66 QSKIP("Sealing requires memfd suport.");
67#endif
68}
69
71#include "test_utils.moc"
Creates a file in memory.
Definition ramfile.h:47
@ SealWrite
Seal the file descriptor for writing.
QTEST_MAIN(OnScreenNotificationTest)