Skip to content

Commit

Permalink
tests: use DBusMock template to increase flexibility
Browse files Browse the repository at this point in the history
This allows to run more code on method calls and do more complicated
stuff.

Helps Cogitri#32
  • Loading branch information
pabloyoyoista committed Jun 2, 2022
1 parent 415813f commit 335a775
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 38 deletions.
54 changes: 54 additions & 0 deletions tests/apkpolkit1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# apkpolkit1.py -- apkPolkit1 mock template
#
# Copyright (C) 2022 Pablo Correa Gomez <[email protected]>
#
# SPDX-License-Identifier: GPL-2.0+

import dbus
import dbusmock

import time

BUS_NAME = 'dev.Cogitri.apkPolkit1'
MAIN_OBJ = '/dev/Cogitri/apkPolkit1'
MAIN_IFACE = 'dev.Cogitri.apkPolkit1'
SYSTEM_BUS = True

def load(mock, parameters):
repos = [
(True, "a", "https://alpine.org/alpine/edge/main"),
(False, "b", "https://pmos.org/pmos/master"),
(True, "c", "/home/data/foo/bar/baz"),
]
mock.repos = repos

mock.AddMethods(MAIN_IFACE, [
('UpdateRepositories', '', '', ''),
('AddRepository', 's', '', ''),
('RemoveRepository', 's', '', ''),
('ListUpgradablePackages', '', 'a(ssssssttu)', 'ret = [' +
'("apk-test-app", "0.2.0", "desktop app", "GPL", "0.1.0", "url", 50, 40, 4),' + # 4 = UPGRADABLE
'("b", "0.2.0", "system package", "GPL", "0.3.0", "url", 50, 40, 5),' + # 5 = DOWNGRADABLE
']'),
('UpgradePackage', 's', '', ''),
# We only expect to refine the desktop app for now.
# Ideally, the state should be updated on the different DBus calls
('GetPackageDetails', 's', '(ssssssttu)', 'ret = ' +
'("apk-test-app", "0.2.0", "desktop app", "GPL", "0.1.0", "url", 50, 40, 2)' # 2 = AVAILABLE
),
])


@dbus.service.method(MAIN_IFACE, in_signature='s', out_signature='')
def AddPackage(self, pkg_name):
if (pkg_name == "slow"):
time.sleep(10)

@dbus.service.method(MAIN_IFACE, in_signature='s', out_signature='')
def DeletePackage(self, pkg_name):
if (pkg_name == "slow"):
time.sleep(10)

@dbus.service.method(MAIN_IFACE, in_signature='', out_signature='a(bss)')
def ListRepositories(self):
return self.repos
46 changes: 8 additions & 38 deletions tests/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,48 +15,18 @@ class GsPluginApkTest (DBusTestCase):
@classmethod
def setUpClass(klass):
klass.start_system_bus()
klass.dbus_con = klass.get_dbus(system_bus=True)

def setUp(self):
self.log = open(os.getenv('DBUS_TEST_LOG'), "w")
self.p_mock = self.spawn_server('dev.Cogitri.apkPolkit1',
'/dev/Cogitri/apkPolkit1',
'dev.Cogitri.apkPolkit1',
system_bus=True,
stdout=self.log)

self.apk_polkit_mock = dbus.Interface(self.dbus_con.
get_object('dev.Cogitri.apkPolkit1',
'/dev/Cogitri/apkPolkit1'),
MOCK_IFACE)

self.apk_polkit_mock.AddMethods('', [
('AddPackage', 's', '', ''),
('DeletePackage', 's', '', ''),
('ListRepositories', '', 'a(bss)', 'ret = [' +
'(True, "a", "https://alpine.org/alpine/edge/main"),' +
'(False, "b", "https://pmos.org/pmos/master"),' +
'(True, "c", "/home/data/foo/bar/baz"),' + ']'),
('UpdateRepositories', '', '', ''),
('AddRepository', 's', '', ''),
('RemoveRepository', 's', '', ''),
('ListUpgradablePackages', '', 'a(ssssssttu)', 'ret = [' +
'("apk-test-app", "0.2.0", "desktop app", "GPL", "0.1.0", "url", 50, 40, 4),' + # 4 = UPGRADABLE
'("b", "0.2.0", "system package", "GPL", "0.3.0", "url", 50, 40, 5),' + # 5 = DOWNGRADABLE
']'),
('UpgradePackage', 's', '', ''),
# We only expect to refine the desktop app for now.
# Ideally, the state should be updated on the different DBus calls
('GetPackageDetails', 's', '(ssssssttu)', 'ret = ' +
'("apk-test-app", "0.2.0", "desktop app", "GPL", "0.1.0", "url", 50, 40, 2)' # 2 = AVAILABLE
),
])

self.log = None
if os.getenv('DBUS_TEST_LOG') is not None:
self.log = open(os.getenv('DBUS_TEST_LOG'), "w")
template = os.path.join(os.getenv('G_TEST_SRCDIR'), 'apkpolkit1.py')
(self.p_mock, _) = self.spawn_server_template(template,
stdout=self.log)

def tearDown(self):
self.log.close()
self.p_mock.terminate()
self.p_mock.wait()
if self.log is not None:
self.log.close()

def test_apk(self):
builddir = os.getenv('G_TEST_BUILDDIR')
Expand Down

0 comments on commit 335a775

Please sign in to comment.