ssu
ssuclitest.cpp
Go to the documentation of this file.
1 
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 
18 typedef QStringList Args; // improve readability
19 
20 void 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 
52 void 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 
72 void 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 
96 void 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 
150 void 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 }
ssuclitest.h
Process
Definition: process.h:13
process.h
Sandbox
Helps to redirect file operations into sandbox directory.
Definition: sandbox_p.h:21
sandbox_p.h