~pkgme-binary-dev/pkgme-devportal/trunk

« back to all changes in this revision

Viewing changes to devportalbinary/tests/test_database.py

  • Committer: Tarmac
  • Author(s): Jonathan Lange
  • Date: 2012-11-13 14:55:34 UTC
  • mfrom: (143.1.37 restore-download-file)
  • Revision ID: tarmac-20121113145534-k75x6uqnfp3pkk9a
[r=jml] Add download_file back to devportalbinary.database

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
import os
2
1
 
3
 
from fixtures import TempDir
4
 
from testresources import ResourcedTestCase
5
2
from testtools import TestCase
6
 
from testtools.matchers import (
7
 
    Equals,
8
 
    Matcher,
9
 
    )
10
3
 
11
 
from devportalbinary.database import (
12
 
    AptFilePackageDatabase,
13
 
    get_dependency_database,
14
 
    LibdepServiceClient,
15
 
    load_configuration,
16
 
    PackageDatabase,
17
 
    )
18
 
from devportalbinary.testing import (
19
 
    ConfigFileFixture,
20
 
    ConfigSettings,
21
 
    get_libdep_service_client,
22
 
    postgres_db_resource,
23
 
    )
 
4
from devportalbinary.database import LibdepServiceClient
 
5
from devportalbinary.testing import get_libdep_service_client
24
6
 
25
7
from libdep_service_client.client import Client
26
8
 
27
9
 
28
 
class ResultsIn(Matcher):
29
 
 
30
 
    def __init__(self, db, rows):
31
 
        self._db = db
32
 
        self._rows = rows
33
 
 
34
 
    def match(self, query):
35
 
        # XXX: Abstraction violation
36
 
        results = self._db._store.execute(query)
37
 
        return Equals(self._rows).match(list(results))
38
 
 
39
 
 
40
 
class TestDatabase(TestCase, ResourcedTestCase):
41
 
 
42
 
    resources = [
43
 
            ('db_fixture', postgres_db_resource),
44
 
            ]
45
 
 
46
 
    def get_package_db(self):
47
 
        db = PackageDatabase(self.db_fixture.conn)
48
 
        self.addCleanup(db.close)
49
 
        return db
50
 
 
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, {})
55
 
 
56
 
    def test_close(self):
57
 
        # Test that we can close the package db.
58
 
        db = PackageDatabase(self.db_fixture.conn)
59
 
        db.close()
60
 
 
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)
64
 
        db.close()
65
 
        db.close()
66
 
 
67
 
 
68
 
class TestDatabaseConfiguration(TestCase):
69
 
 
70
 
    def use_database_config(self, **db_settings):
71
 
        return self.useFixture(ConfigSettings(('database', db_settings)))
72
 
 
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,
79
 
                options)
80
 
 
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)
86
 
 
87
 
    def test_default_create_empty_config(self):
88
 
        self.useFixture(ConfigSettings())
89
 
        self.assertIsInstance(
90
 
            get_dependency_database(), AptFilePackageDatabase)
91
 
 
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)
98
 
 
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()
105
 
 
106
 
        self.use_database_config(
107
 
            db_type='postgres',
108
 
            username=expected_username,
109
 
            password=expected_password,
110
 
            host=expected_host,
111
 
            port=expected_port,
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)
120
 
 
121
 
 
122
10
class TestLibdepServiceClient(TestCase):
123
11
 
124
12
    TEST_DATA = [('libfoo', {'i386': {'libfoo': 'libfoo-bin'}})]