ssu
Loading...
Searching...
No Matches
ssuclitest.cpp
Go to the documentation of this file.
1
7
8#include "ssuclitest.h"
9
10#include <stdlib.h>
11#include <zypp/media/UrlResolverPlugin.h>
12
13#include <QtTest/QtTest>
14
15#include "libssu/sandbox_p.h"
16#include "testutils/process.h"
17
18typedef QStringList Args; // improve readability
19
20void SsuCliTest::init()
21{
22 Q_ASSERT(m_sandbox == 0);
23
24 m_sandbox = new Sandbox(QString("%1/configroot").arg(LOCATE_DATA_PATH),
25 Sandbox::UseAsSkeleton, Sandbox::ChildProcesses);
26 if (!m_sandbox->activate()) {
27 QFAIL("Failed to activate sandbox");
28 }
29 if (getenv("SSU_SANDBOX_PATH")) {
30 qDebug() << "Using in-tree sandbox";
31 setenv("LD_PRELOAD", getenv("SSU_SANDBOX_PATH"), 1);
32 } else
33 setenv("LD_PRELOAD", SSU_SANDBOX_PATH, 1);
34
35 m_bus = new QProcess(this);
36 m_bus->start("dbus-daemon",
37 Args() << "--session" << "--nofork" << "--nopidfile" << "--print-address");
38 if (!m_bus->waitForReadyRead()) {
39 QFAIL("Failed to run sandboxed D-Bus instance");
40 }
41 const QByteArray busAddress = m_bus->readAllStandardOutput();
42 setenv("DBUS_SESSION_BUS_ADDRESS", busAddress.constData(), 1);
43 setenv("DBUS_SYSTEM_BUS_ADDRESS", busAddress.constData(), 1);
44
45 m_ssud = new QProcess(this);
46 m_ssud->start("ssud");
47 if (!m_ssud->waitForStarted()) {
48 QFAIL("Failed to run sandboxed ssud instance");
49 }
50}
51
52void SsuCliTest::cleanup()
53{
54 if (m_ssud->state() != QProcess::Running) {
55 QFAIL("Sandboxed ssud instance exited unexpectedly");
56 }
57 delete m_ssud;
58 m_ssud = 0;
59
60 if (m_bus->state() != QProcess::Running) {
61 QFAIL("Sandboxed D-Bus instance exited unexpectedly");
62 }
63 unsetenv("DBUS_SESSION_BUS_ADDRESS");
64 unsetenv("DBUS_SYSTEM_BUS_ADDRESS");
65 delete m_bus;
66 m_bus = 0;
67
68 delete m_sandbox;
69 m_sandbox = 0;
70}
71
72void SsuCliTest::testSubcommandFlavour()
73{
74 Process ssu;
75 QString output;
76
77 // set flavour to 'release'
78 ssu.execute("ssu", Args() << "flavour" << "release");
79 QVERIFY2(!ssu.hasError(), qPrintable(ssu.fmtErrorMessage()));
80
81 output = ssu.execute("ssu", Args() << "flavour").trimmed();
82 QVERIFY2(!ssu.hasError(), qPrintable(ssu.fmtErrorMessage()));
83
84 QCOMPARE(output, QString("Device flavour is currently: release"));
85
86 // set flavour to 'testing'
87 ssu.execute("ssu", Args() << "flavour" << "testing");
88 QVERIFY2(!ssu.hasError(), qPrintable(ssu.fmtErrorMessage()));
89
90 output = ssu.execute("ssu", Args() << "flavour").trimmed();
91 QVERIFY2(!ssu.hasError(), qPrintable(ssu.fmtErrorMessage()));
92
93 QCOMPARE(output, QString("Device flavour is currently: testing"));
94}
95
96void SsuCliTest::testSubcommandRelease()
97{
98 Process ssu;
99 QString output;
100
101 // set release to latest
102 ssu.execute("ssu", Args() << "release" << "latest");
103 QVERIFY2(!ssu.hasError(), qPrintable(ssu.fmtErrorMessage()));
104
105 output = ssu.execute("ssu", Args() << "release").trimmed();
106 QVERIFY2(!ssu.hasError(), qPrintable(ssu.fmtErrorMessage()));
107
108 QCOMPARE(output, QString("Device release is currently: latest"));
109
110 // set release to next
111 ssu.execute("ssu", Args() << "release" << "next");
112 QVERIFY2(!ssu.hasError(), qPrintable(ssu.fmtErrorMessage()));
113
114 output = ssu.execute("ssu", Args() << "release").trimmed();
115 QVERIFY2(!ssu.hasError(), qPrintable(ssu.fmtErrorMessage()));
116
117 QCOMPARE(output, QString("Device release is currently: next"));
118
119 // verify the mode is release
120 output = ssu.execute("ssu", Args() << "mode").trimmed();
121 QVERIFY2(!ssu.hasError(), qPrintable(ssu.fmtErrorMessage()));
122
123 QCOMPARE(output, QString("Device mode is: 0 ()"));
124
125 // set RnD release to latest
126 ssu.execute("ssu", Args() << "release" << "-r" << "latest");
127 QVERIFY2(!ssu.hasError(), qPrintable(ssu.fmtErrorMessage()));
128
129 output = ssu.execute("ssu", Args() << "release" << "-r").trimmed();
130 QVERIFY2(!ssu.hasError(), qPrintable(ssu.fmtErrorMessage()));
131
132 QCOMPARE(output, QString("Device release (RnD) is currently: latest"));
133
134 // set RnD release to next
135 ssu.execute("ssu", Args() << "release" << "-r" << "next");
136 QVERIFY2(!ssu.hasError(), qPrintable(ssu.fmtErrorMessage()));
137
138 output = ssu.execute("ssu", Args() << "release" << "-r").trimmed();
139 QVERIFY2(!ssu.hasError(), qPrintable(ssu.fmtErrorMessage()));
140
141 QCOMPARE(output, QString("Device release (RnD) is currently: next"));
142
143 // verify the mode is RnD
144 output = ssu.execute("ssu", Args() << "mode").trimmed();
145 QVERIFY2(!ssu.hasError(), qPrintable(ssu.fmtErrorMessage()));
146
147 QCOMPARE(output, QString("Device mode is: 2 (RndMode)"));
148}
149
150void SsuCliTest::testSubcommandMode()
151{
152 Process ssu;
153 QString output;
154
155 // set release mode
156 ssu.execute("ssu", Args() << "mode" << "0");
157 QVERIFY2(!ssu.hasError(), qPrintable(ssu.fmtErrorMessage()));
158
159 output = ssu.execute("ssu", Args() << "mode").trimmed();
160 QVERIFY2(!ssu.hasError(), qPrintable(ssu.fmtErrorMessage()));
161
162 QCOMPARE(output, QString("Device mode is: 0 ()"));
163
164 // set RnD mode
165 ssu.execute("ssu", Args() << "mode" << "2");
166 QVERIFY2(!ssu.hasError(), qPrintable(ssu.fmtErrorMessage()));
167
168 output = ssu.execute("ssu", Args() << "mode").trimmed();
169 QVERIFY2(!ssu.hasError(), qPrintable(ssu.fmtErrorMessage()));
170
171 QCOMPARE(output, QString("Device mode is: 2 (RndMode)"));
172}