~allenap/maas-test/class-fixtures

« back to all changes in this revision

Viewing changes to maastest/cases.py

  • Committer: Gavin Panella
  • Date: 2013-11-27 17:02:02 UTC
  • Revision ID: gavin.panella@canonical.com-20131127170202-7ahbl1lrftzq5puz
Extract into new ClassFixture class.

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
from testtools.testcase import gather_details
31
31
 
32
32
 
 
33
class ClassFixture(Fixture):
 
34
 
 
35
    def __init__(self):
 
36
        super(ClassFixture, self).__init__()
 
37
        self.setUp()
 
38
 
 
39
    def useFixture(self, fixture):
 
40
        """Use the given fixture.
 
41
 
 
42
        If there's an error during fixture set-up, reset all fixtures.
 
43
        """
 
44
        try:
 
45
            super(ClassFixture, self).useFixture(fixture)
 
46
        except:
 
47
            self.reset()
 
48
            raise
 
49
 
 
50
 
33
51
class TestMAAS(testtools.TestCase, testresources.ResourcedTestCase):
34
52
    """Base class for testing machine compatibility with MAAS."""
35
53
 
37
55
    def configure(cls, args):
38
56
        cls.args = args
39
57
 
40
 
    _fixture = Fixture()
41
 
    _fixture.setUp()
42
 
 
43
 
    @classmethod
44
 
    def useClassFixture(cls, fixture):
45
 
        try:
46
 
            cls._fixture.useFixture(fixture)
47
 
        except:
48
 
            cls._fixture.reset()
49
 
            raise
50
 
 
51
 
    proxy = None
52
 
    machine = None
53
 
    maas = None
 
58
    fixtures = ClassFixture()
54
59
 
55
60
    @classmethod
56
61
    def setUpClass(cls):
72
77
            # The default case: start polipo and use that as our caching
73
78
            # proxy.
74
79
            cls.proxy = LocalProxyFixture()
75
 
            cls.useClassFixture(cls.proxy)
 
80
            cls.fixtures.addCleanup(delattr, cls, "proxy")
 
81
            cls.fixtures.useFixture(cls.proxy)
76
82
            proxy_url = cls.proxy.get_url()
77
83
 
78
84
        cls.machine = KVMFixture(
79
85
            series='saucy', architecture=architecture,
80
86
            proxy_url=proxy_url, direct_interface=cls.args.interface)
81
 
        cls.useClassFixture(cls.machine)
 
87
        cls.fixtures.addCleanup(delattr, cls, "machine")
 
88
        cls.fixtures.useFixture(cls.machine)
 
89
 
82
90
        cls.maas = MAASFixture(
83
91
            cls.machine, proxy_url=proxy_url, series=cls.args.series,
84
92
            architecture=cls.args.architecture)
85
 
        cls.useClassFixture(cls.maas)
 
93
        cls.fixtures.addCleanup(delattr, cls, "maas")
 
94
        cls.fixtures.useFixture(cls.maas)
86
95
 
87
96
    @classmethod
88
97
    def tearDownClass(cls):
89
 
        cls.maas = None
90
 
        cls.machine = None
91
 
        cls.proxy = None
92
 
        cls._fixture.reset()
 
98
        cls.fixtures.reset()
93
99
        super(TestMAAS, cls).tearDownClass()
94
100
 
95
101
    def shortDescription(self):