appmenus: few more tests

QubesOS/qubes-issues#1897
This commit is contained in:
Marek Marczykowski-Górecki 2016-04-20 02:24:10 +02:00
parent 0fbc644fd9
commit aef9aa2dd3
No known key found for this signature in database
GPG Key ID: 063938BA42CFA724

View File

@ -32,10 +32,13 @@ import xdg.DesktopEntry
import qubes import qubes
import qubes.tests import qubes.tests
import qubes.tests.extra import qubes.tests.extra
import qubes.vm.appvm
import qubes.vm.templatevm
import qubesappmenus import qubesappmenus
import qubesappmenus.receive import qubesappmenus.receive
import qubesimgconverter import qubesimgconverter
class TestApp(object): class TestApp(object):
labels = {1: qubes.Label(1, '0xcc0000', 'red')} labels = {1: qubes.Label(1, '0xcc0000', 'red')}
@ -211,6 +214,7 @@ class TC_00_Appmenus(qubes.tests.QubesTestCase):
} }
self.assertEquals(expected_appmenus, appmenus) self.assertEquals(expected_appmenus, appmenus)
class TC_10_AppmenusIntegration(qubes.tests.extra.ExtraTestCase): class TC_10_AppmenusIntegration(qubes.tests.extra.ExtraTestCase):
def setUp(self): def setUp(self):
super(TC_10_AppmenusIntegration, self).setUp() super(TC_10_AppmenusIntegration, self).setUp()
@ -231,26 +235,28 @@ class TC_10_AppmenusIntegration(qubes.tests.extra.ExtraTestCase):
whitelisted = [x.rstrip() for x in f.readlines()] whitelisted = [x.rstrip() for x in f.readlines()]
return whitelisted return whitelisted
def test_000_created(self): def test_000_created(self, vm=None):
whitelist_path = os.path.join(self.vm.dir_path, if vm is None:
vm = self.vm
whitelist_path = os.path.join(vm.dir_path,
qubesappmenus.AppmenusSubdirs.whitelist) qubesappmenus.AppmenusSubdirs.whitelist)
whitelisted = self.get_whitelist(whitelist_path) whitelisted = self.get_whitelist(whitelist_path)
self.assertPathExists(self.appmenus.appmenus_dir(self.vm)) self.assertPathExists(self.appmenus.appmenus_dir(vm))
appmenus = os.listdir(self.appmenus.appmenus_dir(self.vm)) appmenus = os.listdir(self.appmenus.appmenus_dir(vm))
self.assertTrue(all(x.startswith(self.vm.name + '-') for x in appmenus)) self.assertTrue(all(x.startswith(vm.name + '-') for x in appmenus))
appmenus = [x[len(self.vm.name) + 1:] for x in appmenus] appmenus = [x[len(vm.name) + 1:] for x in appmenus]
self.assertIn('vm.directory', appmenus) self.assertIn('vm.directory', appmenus)
appmenus.remove('vm.directory') appmenus.remove('vm.directory')
self.assertIn('qubes-appmenu-select.desktop', appmenus) self.assertIn('qubes-appmenu-select.desktop', appmenus)
appmenus.remove('qubes-appmenu-select.desktop') appmenus.remove('qubes-appmenu-select.desktop')
self.assertEquals(set(whitelisted), set(appmenus)) self.assertEquals(set(whitelisted), set(appmenus))
self.assertPathExists(self.appmenus.icons_dir(self.vm)) self.assertPathExists(self.appmenus.icons_dir(vm))
appicons = os.listdir(self.appmenus.icons_dir(self.vm)) appicons = os.listdir(self.appmenus.icons_dir(vm))
whitelisted_icons = set() whitelisted_icons = set()
for appmenu in whitelisted: for appmenu in whitelisted:
desktop = xdg.DesktopEntry.DesktopEntry( desktop = xdg.DesktopEntry.DesktopEntry(
os.path.join(self.appmenus.appmenus_dir(self.vm), os.path.join(self.appmenus.appmenus_dir(vm),
'-'.join((self.vm.name, appmenu)))) '-'.join((vm.name, appmenu))))
if desktop.getIcon(): if desktop.getIcon():
whitelisted_icons.add(os.path.basename(desktop.getIcon())) whitelisted_icons.add(os.path.basename(desktop.getIcon()))
self.assertEquals(set(whitelisted_icons), set(appicons)) self.assertEquals(set(whitelisted_icons), set(appicons))
@ -289,6 +295,32 @@ class TC_10_AppmenusIntegration(qubes.tests.extra.ExtraTestCase):
xdg.BaseDirectory.xdg_data_home, subdir, xdg.BaseDirectory.xdg_data_home, subdir,
'-'.join([self.vm.name, appmenu]))) '-'.join([self.vm.name, appmenu])))
def test_003_created_template_empty(self):
tpl = self.app.add_new_vm(qubes.vm.templatevm.TemplateVM,
name=self.make_vm_name('tpl'), label='red')
tpl.create_on_disk()
self.assertPathExists(self.appmenus.templates_dir(tpl))
self.assertPathExists(self.appmenus.template_icons_dir(tpl))
def test_004_created_template_from_other(self):
tpl = self.app.add_new_vm(qubes.vm.templatevm.TemplateVM,
name=self.make_vm_name('tpl'), label='red')
tpl.create_on_disk(source_template=self.app.default_template)
self.assertPathExists(self.appmenus.templates_dir(tpl))
self.assertPathExists(self.appmenus.template_icons_dir(tpl))
self.assertPathExists(os.path.join(tpl.dir_path,
qubesappmenus.AppmenusSubdirs.whitelist))
for appmenu in os.listdir(self.appmenus.templates_dir(
self.app.default_template)):
self.assertPathExists(os.path.join(
self.appmenus.templates_dir(tpl), appmenu))
for appicon in os.listdir(self.appmenus.template_icons_dir(
self.app.default_template)):
self.assertPathExists(os.path.join(
self.appmenus.template_icons_dir(tpl), appicon))
def get_image_color(self, path, expected_color): def get_image_color(self, path, expected_color):
"""Return mean color of the image as (r, g, b) in float""" """Return mean color of the image as (r, g, b) in float"""
image = qubesimgconverter.Image.load_from_file(path) image = qubesimgconverter.Image.load_from_file(path)
@ -320,18 +352,29 @@ class TC_10_AppmenusIntegration(qubes.tests.extra.ExtraTestCase):
self.fail( self.fail(
"Icon {} is not colored as {}".format(path, expected_color)) "Icon {} is not colored as {}".format(path, expected_color))
def test_010_icon_color(self): def test_010_icon_color(self, vm=None):
icons_dir = self.appmenus.icons_dir(self.vm) if vm is None:
vm = self.vm
icons_dir = self.appmenus.icons_dir(vm)
appicons = os.listdir(icons_dir) appicons = os.listdir(icons_dir)
for icon in appicons: for icon in appicons:
self.assertIconColor(os.path.join(icons_dir, icon), self.assertIconColor(os.path.join(icons_dir, icon),
self.vm.label.color) vm.label.color)
def test_011_icon_color_label_change(self): def test_011_icon_color_label_change(self):
"""Regression test for #1606""" """Regression test for #1606"""
self.vm.label = 'green' self.vm.label = 'green'
self.test_010_icon_color() self.test_010_icon_color()
def test_020_clone(self):
vm2 = self.app.add_new_vm(qubes.vm.appvm.AppVM,
name=self.make_vm_name('vm2'), label='green')
vm2.clone_properties(self.vm)
vm2.clone_disk_files(self.vm)
self.test_000_created(vm=vm2)
self.test_010_icon_color(vm=vm2)
def list_tests(): def list_tests():
return ( return (