~rvb/maas/transaction-1.7-bug-1409852

« back to all changes in this revision

Viewing changes to src/maasserver/models/tests/test_tag.py

merged upstream

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright 2012, 2013 Canonical Ltd.  This software is licensed under the
 
1
# Copyright 2012-2014 Canonical Ltd.  This software is licensed under the
2
2
# GNU Affero General Public License version 3 (see the file LICENSE).
3
3
 
4
4
"""Test maasserver models."""
23
23
 
24
24
class TagTest(MAASServerTestCase):
25
25
 
26
 
    def test_factory_make_tag(self):
 
26
    def test_factory_make_Tag(self):
27
27
        """
28
28
        The generated system_id looks good.
29
29
 
30
30
        """
31
 
        tag = factory.make_tag('tag-name', '//node[@id=display]')
 
31
        tag = factory.make_Tag('tag-name', '//node[@id=display]')
32
32
        self.assertEqual('tag-name', tag.name)
33
33
        self.assertEqual('//node[@id=display]', tag.definition)
34
34
        self.assertEqual('', tag.comment)
36
36
        self.assertIsNot(None, tag.updated)
37
37
        self.assertIsNot(None, tag.created)
38
38
 
39
 
    def test_factory_make_tag_with_hardware_details(self):
40
 
        tag = factory.make_tag('a-tag', 'true', kernel_opts="console=ttyS0")
 
39
    def test_factory_make_Tag_with_hardware_details(self):
 
40
        tag = factory.make_Tag('a-tag', 'true', kernel_opts="console=ttyS0")
41
41
        self.assertEqual('a-tag', tag.name)
42
42
        self.assertEqual('true', tag.definition)
43
43
        self.assertEqual('', tag.comment)
46
46
        self.assertIsNot(None, tag.created)
47
47
 
48
48
    def test_add_tag_to_node(self):
49
 
        node = factory.make_node()
50
 
        tag = factory.make_tag()
 
49
        node = factory.make_Node()
 
50
        tag = factory.make_Tag()
51
51
        tag.save()
52
52
        node.tags.add(tag)
53
53
        self.assertEqual([tag.id], [t.id for t in node.tags.all()])
55
55
 
56
56
    def test_valid_tag_names(self):
57
57
        for valid in ['valid-dash', 'under_score', 'long' * 50]:
58
 
            tag = factory.make_tag(name=valid)
 
58
            tag = factory.make_Tag(name=valid)
59
59
            self.assertEqual(valid, tag.name)
60
60
 
61
61
    def test_validate_traps_invalid_tag_name(self):
62
62
        for invalid in ['invalid:name', 'no spaces', 'no\ttabs',
63
63
                        'no&ampersand', 'no!shouting', '',
64
64
                        'too-long' * 33, '\xb5']:
65
 
            self.assertRaises(ValidationError, factory.make_tag, name=invalid)
 
65
            self.assertRaises(ValidationError, factory.make_Tag, name=invalid)
66
66
 
67
67
    def test_applies_tags_to_nodes(self):
68
 
        node1 = factory.make_node()
 
68
        node1 = factory.make_Node()
69
69
        inject_lshw_result(node1, b'<node><child /></node>')
70
 
        node2 = factory.make_node()
 
70
        node2 = factory.make_Node()
71
71
        inject_lshw_result(node2, b'<node />')
72
 
        tag = factory.make_tag(definition='//node/child')
 
72
        tag = factory.make_Tag(definition='//node/child')
73
73
        self.assertItemsEqual([tag.name], node1.tag_names())
74
74
        self.assertItemsEqual([], node2.tag_names())
75
75
 
76
76
    def test_removes_old_values(self):
77
 
        node1 = factory.make_node()
 
77
        node1 = factory.make_Node()
78
78
        inject_lshw_result(node1, b'<node><foo /></node>')
79
 
        node2 = factory.make_node()
 
79
        node2 = factory.make_Node()
80
80
        inject_lshw_result(node2, b'<node><bar /></node>')
81
 
        tag = factory.make_tag(definition='//node/foo')
 
81
        tag = factory.make_Tag(definition='//node/foo')
82
82
        self.assertItemsEqual([tag.name], node1.tag_names())
83
83
        self.assertItemsEqual([], node2.tag_names())
84
84
        tag.definition = '//node/bar'
92
92
        self.assertItemsEqual([], node2.tag_names())
93
93
 
94
94
    def test_doesnt_touch_other_tags(self):
95
 
        node1 = factory.make_node()
 
95
        node1 = factory.make_Node()
96
96
        inject_lshw_result(node1, b'<node><foo /></node>')
97
 
        node2 = factory.make_node()
 
97
        node2 = factory.make_Node()
98
98
        inject_lshw_result(node2, b'<node><bar /></node>')
99
 
        tag1 = factory.make_tag(definition='//node/foo')
 
99
        tag1 = factory.make_Tag(definition='//node/foo')
100
100
        self.assertItemsEqual([tag1.name], node1.tag_names())
101
101
        self.assertItemsEqual([], node2.tag_names())
102
 
        tag2 = factory.make_tag(definition='//node/bar')
 
102
        tag2 = factory.make_Tag(definition='//node/bar')
103
103
        self.assertItemsEqual([tag1.name], node1.tag_names())
104
104
        self.assertItemsEqual([tag2.name], node2.tag_names())
105
105
 
106
106
    def test_rollsback_invalid_xpath(self):
107
 
        node = factory.make_node()
 
107
        node = factory.make_Node()
108
108
        inject_lshw_result(node, b'<node><foo /></node>')
109
 
        tag = factory.make_tag(definition='//node/foo')
 
109
        tag = factory.make_Tag(definition='//node/foo')
110
110
        self.assertItemsEqual([tag.name], node.tag_names())
111
111
        tag.definition = 'invalid::tag'
112
112
        self.assertRaises(ValidationError, tag.save)