~ubuntu-branches/ubuntu/vivid/ironic/vivid-updates

« back to all changes in this revision

Viewing changes to ironic/tests/db/base.py

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2015-01-05 12:21:37 UTC
  • mfrom: (1.2.4)
  • Revision ID: package-import@ubuntu.com-20150105122137-171bqrdpcxqipunk
Tags: 2015.1~b1-0ubuntu1
* New upstream beta release:
  - d/control: Align version requirements with upstream release.
* d/watch: Update uversionmangle to deal with kilo beta versioning
  changes.
* d/control: Bumped Standards-Version to 3.9.6, no changes.

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
 
16
16
"""Ironic DB test base class."""
17
17
 
18
 
from ironic.openstack.common import context as ironic_context
 
18
import os
 
19
import shutil
 
20
 
 
21
import fixtures
 
22
from oslo.config import cfg
 
23
 
 
24
from ironic.common import paths
 
25
from ironic.db import api as dbapi
 
26
from ironic.db.sqlalchemy import api as sqla_api
 
27
from ironic.db.sqlalchemy import migration
 
28
from ironic.db.sqlalchemy import models
19
29
from ironic.tests import base
20
30
 
21
31
 
 
32
CONF = cfg.CONF
 
33
 
 
34
_DB_CACHE = None
 
35
 
 
36
 
 
37
class Database(fixtures.Fixture):
 
38
 
 
39
    def __init__(self, db_api, db_migrate, sql_connection,
 
40
                    sqlite_db, sqlite_clean_db):
 
41
        self.sql_connection = sql_connection
 
42
        self.sqlite_db = sqlite_db
 
43
        self.sqlite_clean_db = sqlite_clean_db
 
44
 
 
45
        self.engine = db_api.get_engine()
 
46
        self.engine.dispose()
 
47
        conn = self.engine.connect()
 
48
        if sql_connection == "sqlite://":
 
49
            self.setup_sqlite(db_migrate)
 
50
        elif sql_connection.startswith('sqlite:///'):
 
51
            testdb = paths.state_path_rel(sqlite_db)
 
52
            if os.path.exists(testdb):
 
53
                return
 
54
            self.setup_sqlite(db_migrate)
 
55
        else:
 
56
            db_migrate.upgrade('head')
 
57
        self.post_migrations()
 
58
        if sql_connection == "sqlite://":
 
59
            conn = self.engine.connect()
 
60
            self._DB = "".join(line for line in conn.connection.iterdump())
 
61
            self.engine.dispose()
 
62
        else:
 
63
            cleandb = paths.state_path_rel(sqlite_clean_db)
 
64
            shutil.copyfile(testdb, cleandb)
 
65
 
 
66
    def setup_sqlite(self, db_migrate):
 
67
        if db_migrate.version():
 
68
            return
 
69
        models.Base.metadata.create_all(self.engine)
 
70
        db_migrate.stamp('head')
 
71
 
 
72
    def setUp(self):
 
73
        super(Database, self).setUp()
 
74
 
 
75
        if self.sql_connection == "sqlite://":
 
76
            conn = self.engine.connect()
 
77
            conn.connection.executescript(self._DB)
 
78
            self.addCleanup(self.engine.dispose)
 
79
        else:
 
80
            shutil.copyfile(paths.state_path_rel(self.sqlite_clean_db),
 
81
                            paths.state_path_rel(self.sqlite_db))
 
82
            self.addCleanup(os.unlink, self.sqlite_db)
 
83
 
 
84
    def post_migrations(self):
 
85
        """Any addition steps that are needed outside of the migrations."""
 
86
 
 
87
 
22
88
class DbTestCase(base.TestCase):
23
89
 
24
90
    def setUp(self):
25
91
        super(DbTestCase, self).setUp()
26
 
        self.context = ironic_context.get_admin_context()
 
92
 
 
93
        self.dbapi = dbapi.get_instance()
 
94
 
 
95
        global _DB_CACHE
 
96
        if not _DB_CACHE:
 
97
            _DB_CACHE = Database(sqla_api, migration,
 
98
                                 sql_connection=CONF.database.connection,
 
99
                                 sqlite_db=CONF.database.sqlite_db,
 
100
                                 sqlite_clean_db='clean.sqlite')
 
101
        self.useFixture(_DB_CACHE)