~gnuoy/charms/trusty/percona-cluster/use-dc-stable

« back to all changes in this revision

Viewing changes to unit_tests/test_percona_hooks.py

  • Committer: james.page at ubuntu
  • Date: 2015-04-20 10:53:43 UTC
  • mfrom: (51.2.22 percona-cluster)
  • Revision ID: james.page@ubuntu.com-20150420105343-3kljmjdzozpfg5tf
[freyes,r=james-page] Ensure VIP is tied to a good mysqld instance.

Re-license charm as GPL-2 for compatibility with bundled ocf script.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import mock
 
2
import sys
 
3
from test_utils import CharmTestCase
 
4
 
 
5
sys.modules['MySQLdb'] = mock.Mock()
 
6
import percona_hooks as hooks
 
7
 
 
8
TO_PATCH = ['log', 'config',
 
9
            'get_db_helper',
 
10
            'relation_ids',
 
11
            'relation_set']
 
12
 
 
13
 
 
14
class TestHaRelation(CharmTestCase):
 
15
    def setUp(self):
 
16
        CharmTestCase.setUp(self, hooks, TO_PATCH)
 
17
 
 
18
    @mock.patch('sys.exit')
 
19
    def test_relation_not_configured(self, exit_):
 
20
        self.config.return_value = None
 
21
 
 
22
        class MyError(Exception):
 
23
            pass
 
24
 
 
25
        def f(x):
 
26
            raise MyError(x)
 
27
        exit_.side_effect = f
 
28
        self.assertRaises(MyError, hooks.ha_relation_joined)
 
29
 
 
30
    def test_resources(self):
 
31
        self.relation_ids.return_value = ['ha:1']
 
32
        password = 'ubuntu'
 
33
        helper = mock.Mock()
 
34
        attrs = {'get_mysql_password.return_value': password}
 
35
        helper.configure_mock(**attrs)
 
36
        self.get_db_helper.return_value = helper
 
37
        self.test_config.set('vip', '10.0.3.3')
 
38
        self.test_config.set('sst-password', password)
 
39
        def f(k):
 
40
            return self.test_config.get(k)
 
41
 
 
42
        self.config.side_effect = f
 
43
        hooks.ha_relation_joined()
 
44
 
 
45
        resources = {'res_mysql_vip': 'ocf:heartbeat:IPaddr2',
 
46
                     'res_mysql_monitor': 'ocf:percona:mysql_monitor'}
 
47
        resource_params = {'res_mysql_vip': ('params ip="10.0.3.3" '
 
48
                                             'cidr_netmask="24" '
 
49
                                             'nic="eth0"'),
 
50
                           'res_mysql_monitor':
 
51
                               hooks.RES_MONITOR_PARAMS % {'sstpass': 'ubuntu'}}
 
52
        groups = {'grp_percona_cluster': 'res_mysql_vip'}
 
53
 
 
54
        clones = {'cl_mysql_monitor': 'res_mysql_monitor meta interleave=true'}
 
55
 
 
56
        colocations = {'vip_mysqld': 'inf: grp_percona_cluster cl_mysql_monitor'}
 
57
 
 
58
        locations = {'loc_percona_cluster':
 
59
                     'grp_percona_cluster rule inf: writable eq 1'}
 
60
 
 
61
        self.relation_set.assert_called_with(
 
62
            relation_id='ha:1', corosync_bindiface=f('ha-bindiface'),
 
63
            corosync_mcastport=f('ha-mcastport'), resources=resources,
 
64
            resource_params=resource_params, groups=groups,
 
65
            clones=clones, colocations=colocations, locations=locations)