~lutostag/ubuntu/trusty/maas/1.5.4+keystone

« back to all changes in this revision

Viewing changes to src/provisioningserver/utils/tests/test_registry.py

  • Committer: Package Import Robot
  • Author(s): Andres Rodriguez, Andres Rodriguez, Julian Edwards, Dustin Kirkland
  • Date: 2014-03-28 10:43:53 UTC
  • mfrom: (1.2.26)
  • Revision ID: package-import@ubuntu.com-20140328104353-9hj74f1nvl7xis5z
Tags: 1.5+bzr2204-0ubuntu1
* New upstream release (LP: #1281881)

[ Andres Rodriguez ]
* debian/maas-region-controller-min.templates: Set installation note to false
  by default.
* Check rabbitmqctl is present before running commands:
  - debian/maas-region-controller-min.maas-region-celery.upstart.
  - debian/maas-region-controller-min.maas-txlongpoll.upstart.
* make sure maas_longpoll rabbitmq user is created/with correct password on
  a package reconfigure.
* debian/maas-dns.postinst: Fix upgrade setup of named.conf.options.
* debian/maas-cluster-controller.install: Install UEFI templates (LP: #1299143)

[ Julian Edwards ]
* debian/extas/maas: Echo warning to stderr so json stdout is not polluted
* debian/maas-cluster-controller.postinst: Run upgrade-cluster on each
  upgrade
* debian/maas-dns.postinst: Call edit_named_options to add a line in
  /etc/bind/named.conf.options that includes the
  /etc/named/maas/named.conf.options.inside.maas file.
* debian/control:
  - maas-dns depends on python-iscpy
  - maas-cluster-controller depends on python-seamicroclient
* debian/maas-cluster-controller.install: Install bootresources.yaml

[ Dustin Kirkland ]
* debian/control: LP: #1297097
  - clean up package descriptions, modernize, and more clearly/simply
    explain what each package does
  - drop "Ubuntu" in front of MAAS, clean up command line/API description

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright 2014 Canonical Ltd.  This software is licensed under the
 
2
# GNU Affero General Public License version 3 (see the file LICENSE).
 
3
 
 
4
"""Tests for the Registry"""
 
5
 
 
6
from __future__ import (
 
7
    absolute_import,
 
8
    print_function,
 
9
    unicode_literals,
 
10
    )
 
11
 
 
12
str = None
 
13
 
 
14
__metaclass__ = type
 
15
__all__ = []
 
16
 
 
17
from maastesting.testcase import MAASTestCase
 
18
from mock import sentinel
 
19
from provisioningserver.utils.registry import (
 
20
    _registry,
 
21
    Registry,
 
22
    )
 
23
from provisioningserver.utils.testing import RegistryFixture
 
24
 
 
25
 
 
26
class TestRegistry(MAASTestCase):
 
27
 
 
28
    def setUp(self):
 
29
        super(TestRegistry, self).setUp()
 
30
        # Ensure the global registry is empty for each test run.
 
31
        self.useFixture(RegistryFixture())
 
32
 
 
33
    def test_register_and_get_item(self):
 
34
        name = self.getUniqueString()
 
35
        item = self.getUniqueString()
 
36
        Registry.register_item(name, item)
 
37
        self.assertEqual(item, Registry.get_item(name))
 
38
 
 
39
    def test_register_and_unregister_item(self):
 
40
        name = self.getUniqueString()
 
41
        Registry.register_item(name, sentinel.item)
 
42
        Registry.unregister_item(name)
 
43
        self.assertIsNone(Registry.get_item(name))
 
44
        self.assertNotIn(name, Registry)
 
45
 
 
46
    def test_is_singleton_over_multiple_imports(self):
 
47
        Registry.register_item("resource1", sentinel.resource1)
 
48
        from provisioningserver.driver import Registry as Registry2
 
49
        Registry2.register_item("resource2", sentinel.resource2)
 
50
        self.assertItemsEqual(
 
51
            [("resource1", sentinel.resource1),
 
52
             ("resource2", sentinel.resource2)],
 
53
            Registry2)
 
54
 
 
55
    def test___getitem__(self):
 
56
        Registry.register_item("resource", sentinel.resource)
 
57
        self.assertEqual(sentinel.resource, Registry["resource"])
 
58
 
 
59
    def test___getitem__raises_KeyError_when_name_is_not_registered(self):
 
60
        self.assertRaises(KeyError, lambda: Registry["resource"])
 
61
 
 
62
    def test_get_item(self):
 
63
        Registry.register_item("resource", sentinel.resource)
 
64
        self.assertEqual(sentinel.resource, Registry.get_item("resource"))
 
65
 
 
66
    def test_get_item_returns_default_if_value_not_present(self):
 
67
        self.assertEqual(
 
68
            sentinel.default,
 
69
            Registry.get_item("resource", sentinel.default))
 
70
 
 
71
    def test_get_item_returns_None_default(self):
 
72
        self.assertIsNone(Registry.get_item("resource"))
 
73
 
 
74
    def test__contains__(self):
 
75
        Registry.register_item("resource", sentinel.resource)
 
76
        self.assertIn("resource", Registry)
 
77
 
 
78
    def test_registered_items_are_stored_separately_by_registry(self):
 
79
 
 
80
        class RegistryOne(Registry):
 
81
            """A registry distinct from the base `Registry`."""
 
82
 
 
83
        class RegistryTwo(Registry):
 
84
            """A registry distinct from the base `Registry`."""
 
85
 
 
86
        name = self.getUniqueString()
 
87
        Registry.register_item(name, sentinel.item)
 
88
        RegistryOne.register_item(name, sentinel.item_in_one)
 
89
        RegistryTwo.register_item(name, sentinel.item_in_two)
 
90
 
 
91
        # Items stored in separate registries are stored separately;
 
92
        # names do not clash between registries.
 
93
        self.assertEqual(sentinel.item, Registry.get_item(name))
 
94
        self.assertEqual(sentinel.item_in_one, RegistryOne.get_item(name))
 
95
        self.assertEqual(sentinel.item_in_two, RegistryTwo.get_item(name))