3
from fixtures import TempDir
4
from testresources import ResourcedTestCase
5
2
from testtools import TestCase
6
from testtools.matchers import (
11
from devportalbinary.database import (
12
AptFilePackageDatabase,
13
get_dependency_database,
18
from devportalbinary.testing import (
21
get_libdep_service_client,
4
from devportalbinary.database import LibdepServiceClient
5
from devportalbinary.testing import get_libdep_service_client
25
7
from libdep_service_client.client import Client
28
class ResultsIn(Matcher):
30
def __init__(self, db, rows):
34
def match(self, query):
35
# XXX: Abstraction violation
36
results = self._db._store.execute(query)
37
return Equals(self._rows).match(list(results))
40
class TestDatabase(TestCase, ResourcedTestCase):
43
('db_fixture', postgres_db_resource),
46
def get_package_db(self):
47
db = PackageDatabase(self.db_fixture.conn)
48
self.addCleanup(db.close)
51
def test_unknown_library(self):
52
db = self.get_package_db()
53
deps = db.get_multiple_dependencies(['libfoo.so.0'], 'i386')
54
self.assertEqual(deps, {})
57
# Test that we can close the package db.
58
db = PackageDatabase(self.db_fixture.conn)
61
def test_close_twice(self):
62
# Test that we can close the package db twice with no exception.
63
db = PackageDatabase(self.db_fixture.conn)
68
class TestDatabaseConfiguration(TestCase):
70
def use_database_config(self, **db_settings):
71
return self.useFixture(ConfigSettings(('database', db_settings)))
73
def test_get_db_info_from_config_sqlite(self):
74
other_tempdir = self.useFixture(TempDir())
75
expected_db_path = os.path.join(other_tempdir.path, 'db')
76
self.use_database_config(db_type='sqlite', path=expected_db_path)
77
options = load_configuration()
78
self.assertRaises(ValueError, PackageDatabase.get_db_info_from_config,
81
def test_default_create_no_config(self):
82
nonexistent = self.getUniqueString()
83
self.useFixture(ConfigFileFixture(nonexistent))
84
self.assertIsInstance(
85
get_dependency_database(), AptFilePackageDatabase)
87
def test_default_create_empty_config(self):
88
self.useFixture(ConfigSettings())
89
self.assertIsInstance(
90
get_dependency_database(), AptFilePackageDatabase)
92
def test_remote_service(self):
93
base_url = 'http://example.com/libdep-service/'
94
self.use_database_config(db_type='libdep-service', base_url=base_url)
95
db = get_dependency_database()
96
self.assertIsInstance(db, LibdepServiceClient)
97
self.assertEqual(base_url, db._client.base_url)
99
def test_get_db_info_from_config_postgres(self):
100
expected_username = self.getUniqueString()
101
expected_password = self.getUniqueString()
102
expected_host = self.getUniqueString()
103
expected_port = self.getUniqueInteger()
104
expected_db_name = self.getUniqueString()
106
self.use_database_config(
108
username=expected_username,
109
password=expected_password,
112
db_name=expected_db_name)
113
options = load_configuration()
114
uri = PackageDatabase.get_db_info_from_config(options)
115
self.assertEqual(expected_db_name, uri.database)
116
self.assertEqual(expected_port, uri.port)
117
self.assertEqual(expected_host, uri.host)
118
self.assertEqual(expected_password, uri.password)
119
self.assertEqual(expected_username, uri.username)
122
10
class TestLibdepServiceClient(TestCase):
124
12
TEST_DATA = [('libfoo', {'i386': {'libfoo': 'libfoo-bin'}})]