Skip to content

Commit f6cc415

Browse files
committed
Merge remote-tracking branch 'origin/pr/447'
* origin/pr/447: update utests make flags a standard column
2 parents 38c79ef + fd70a12 commit f6cc415

2 files changed

Lines changed: 137 additions & 248 deletions

File tree

qubesadmin/tests/tools/qvm_ls.py

Lines changed: 50 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@
2121

2222
# pylint: disable=missing-docstring
2323

24-
import unittest
25-
2624
import qubesadmin
2725
import qubesadmin.vm
2826
import qubesadmin.tools.qvm_ls
@@ -44,34 +42,13 @@ def __init__(self):
4442

4543
class TC_00_Column(qubesadmin.tests.QubesTestCase):
4644
def test_100_init(self):
45+
'''Column registers itself in Column.columns on init.'''
4746
try:
48-
testcolumn = qubesadmin.tools.qvm_ls.Column('TESTCOLUMN')
49-
self.assertEqual(testcolumn.ls_head, 'TESTCOLUMN')
47+
testcolumn = qubesadmin.tools.qvm_ls.Column(
48+
'TESTCOLUMN', attr=lambda vm: None)
49+
self.assertEqual(testcolumn.head, 'TESTCOLUMN')
5050
finally:
51-
try:
52-
qubesadmin.tools.qvm_ls.Column.columns['TESTCOLUMN']
53-
except KeyError:
54-
pass
55-
56-
57-
class TC_10_globals(qubesadmin.tests.QubesTestCase):
58-
def test_100_simple_flag(self):
59-
flag = qubesadmin.tools.qvm_ls.simple_flag(1, 'T', 'internal')
60-
61-
# TODO after serious testing of QubesVM and Qubes app, this should be
62-
# using normal components
63-
vm = TestVM('test-vm', internal=False)
64-
65-
self.assertFalse(flag(None, vm))
66-
vm.internal = True
67-
self.assertTrue(flag(None, vm))
68-
69-
@unittest.skip('column list generated dynamically')
70-
def test_900_formats_columns(self):
71-
for cols in qubesadmin.tools.qvm_ls.formats.values():
72-
for col in cols:
73-
self.assertIn(col.upper(),
74-
qubesadmin.tools.qvm_ls.Column.columns)
51+
del qubesadmin.tools.qvm_ls.Column.columns['TESTCOLUMN']
7552

7653

7754
class TC_50_List(qubesadmin.tests.QubesTestCase):
@@ -228,6 +205,37 @@ def test_110_network_tree(self):
228205
' └─test-vm-3 Running TestVM - - test-vm-proxy\n'
229206
'└─test-vm-4 Running TestVM - - test-vm-net-2\n')
230207

208+
def test_105_flags(self):
209+
'''FLAGS column encodes type, power state and boolean attributes.'''
210+
app = TestApp()
211+
vm = app.domains['test-vm']
212+
vm.klass = 'AppVM'
213+
vm.updateable = True
214+
vm.provides_network = False
215+
vm.installed_by_rpm = False
216+
vm.internal = False
217+
vm.debug = True
218+
vm.autostart = False
219+
with qubesadmin.tests.tools.StdoutBuffer() as stdout:
220+
qubesadmin.tools.qvm_ls.main(['--fields', 'name,flags',
221+
'test-vm'], app=app)
222+
# arU---D-: AppVM, running, updateable, debug
223+
self.assertEqual(stdout.getvalue(),
224+
'NAME FLAGS\n'
225+
'test-vm arU---D-\n')
226+
227+
def test_106_raw_data(self):
228+
'''--raw-data produces pipe-separated values with no header.'''
229+
app = TestApp()
230+
app.domains['test-vm'].klass = 'AppVM'
231+
with qubesadmin.tests.tools.StdoutBuffer() as stdout:
232+
qubesadmin.tools.qvm_ls.main(['--raw-data', '--fields=name,class',
233+
'dom0', 'test-vm'], app=app)
234+
self.assertEqual(stdout.getvalue(),
235+
'dom0|TestVM\n'
236+
'test-vm|AppVM\n')
237+
238+
231239
class TC_70_Tags(qubesadmin.tests.QubesTestCase):
232240
def setUp(self):
233241
self.app = TestApp()
@@ -427,6 +435,7 @@ def setUp(self):
427435
)
428436

429437
def test_101_sort_string(self):
438+
'''--sort with --reverse and --ignore-case sorts case-insensitively.'''
430439
with qubesadmin.tests.tools.StdoutBuffer() as stdout:
431440
qubesadmin.tools.qvm_ls.main(
432441
['--sort', 'NAME', '--reverse', '--ignore-case'], app=self.app)
@@ -438,6 +447,7 @@ def test_101_sort_string(self):
438447
'a Running TestVM red - -\n')
439448

440449
def test_102_sort_numeric(self):
450+
'''Numeric columns are sorted by value, not lexicographically.'''
441451
with qubesadmin.tests.tools.StdoutBuffer() as stdout:
442452
qubesadmin.tools.qvm_ls.main(
443453
['--field', 'NAME,MAXMEM', '--sort', 'MAXMEM'], app=self.app)
@@ -448,6 +458,18 @@ def test_102_sort_numeric(self):
448458
'c 300\n'
449459
'B 1000\n')
450460

461+
def test_103_sort_column_not_in_output(self):
462+
'''--sort on a column absent from output leaves order unchanged.'''
463+
with qubesadmin.tests.tools.StdoutBuffer() as stdout:
464+
qubesadmin.tools.qvm_ls.main(
465+
['--fields', 'NAME,CLASS', '--sort', 'STATE'], app=self.app)
466+
self.assertEqual(stdout.getvalue(),
467+
'NAME CLASS\n'
468+
'B TestVM\n'
469+
'a TestVM\n'
470+
'c TestVM\n'
471+
'dom0 TestVM\n')
472+
451473

452474
class TC_110_Filtering(qubesadmin.tests.QubesTestCase):
453475
def test_111_filter_class(self):

0 commit comments

Comments
 (0)