summaryrefslogtreecommitdiffstats
path: root/tests/test_config_generator.py
blob: d8e8789f9732eb1e12f0ea7f7d5b6e0c287193cd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/usr/bin/python
# Copyright 2014 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
#

from plugins import config_generator
from testrunner import PluginsTestCase as TestCaseBase


class TestGlusterNagiosConfManager(TestCaseBase):
    # Method to test the generateNagiosConfigFromGlusterCluster() method
    def testGenerateNagiosConfig(self):
        confManager = self._getGlusterNagiosConfManager()
        clusterData = self._createDummyCluster()
        clusterConfig = confManager.generateNagiosConfig(
            clusterData)
        self._verifyConfig(clusterConfig, clusterData)

    def _verifyConfig(self, clusterConfig, clusterData):
        self.assertTrue(len(clusterConfig), len(clusterData['hosts']) + 1)
        self._verifyClusterConfig(clusterConfig["_hosts"][0], clusterData)
        for index in range(0, len(clusterData['hosts'])):
            self._verifyHostConfig(clusterConfig['_hosts'][index + 1],
                                   clusterData['hosts'][index])

    def _verifyHostConfig(self, hostConfig, hostData):
        self.assertEqual(hostConfig['host_name'], hostData['hostname'])
        self.assertEqual(hostConfig['alias'], hostData['hostname'])
        self.assertEqual(hostConfig['address'], hostData['hostip'])
        self.assertEqual(hostConfig['use'], 'gluster-host')
        self._verifyHostServices(hostConfig, hostData)

    def _verifyHostServices(self, hostConfig, hostData):
        for brick in hostData['bricks']:
            serviceDesc = "Brick Status - %s" % brick['brickpath']
            service = self._findServiceInList(hostConfig['host_services'],
                                              serviceDesc)
            self.assertNotEqual(service, None,
                                "Brick status service is not created")
            serviceDesc = "Brick Utilization - %s" % brick['brickpath']
            service = self._findServiceInList(hostConfig['host_services'],
                                              serviceDesc)
            self.assertNotEqual(service, None,
                                "Brick Utilization service is not created")

    def _verifyClusterConfig(self, config, clusterData):
        self.assertEqual(config['host_name'], clusterData['name'])
        self.assertEqual(config['alias'], clusterData['name'])
        self.assertEqual(config['address'], clusterData['name'])
        self.assertEqual(config.get('check_command'), None)
        self.assertEqual(config['use'], 'gluster-cluster')
        self._verifyClusterServices(config, clusterData)

    def _verifyClusterServices(self, clusterConfig, clusterData):
        self.assertEqual(len(clusterConfig['host_services']), 6)
        for volume in clusterData['volumes']:
            self._verifyVolumeServices(clusterConfig['host_services'], volume)

    def _verifyVolumeServices(self, serviceList, volume):
        serviceDesc = 'Volume Utilization - %s' % (volume['name'])
        service = self._findServiceInList(serviceList, serviceDesc)
        self.assertNotEqual(service, None,
                            "Volume utilization service is not created")
        serviceDesc = 'Volume Status - %s' % (volume['name'])
        service = self._findServiceInList(serviceList, serviceDesc)
        self.assertNotEqual(service, None,
                            "Volume Status service is not created")
        serviceDesc = 'Volume Status Quota - %s' % (volume['name'])
        service = self._findServiceInList(serviceList, serviceDesc)
        self.assertNotEqual(service, None,
                            "Volume Status Quota service is not created")
        if 'Replicate' in volume['type']:
            serviceDesc = 'Volume Self-Heal - %s' % (volume['name'])
            service = self._findServiceInList(serviceList, serviceDesc)
            self.assertNotEqual(service, None,
                                "Volume Self-Heal service is not created")

    def _findServiceInList(self, serviceList, serviceDescription):
        for service in serviceList:
            if service['service_description'] == serviceDescription:
                return service
        return None

    def createBricks(self, count, volume, hostip):
        bricks = []
        for number in range(count):
            brickDir = "/mnt/Brick-%s" % (number + 1)
            bricks.append({'brickpath': brickDir,
                           'volumeName': volume,
                           'hostip': hostip})
        return bricks

    def _createDummyCluster(self):
        cluster = {'name': 'Test-Cluster', 'hosts': [], 'volumes': []}
        cluster['hosts'].append({'hostip': '10.70.43.1',
                                 'hostname': 'host-1',
                                 'bricks': self.createBricks(1, "Volume1",
                                                             '10.70.43.1')})
        cluster['hosts'].append({'hostip': '10.70.43.2',
                                 'hostname': 'host-2',
                                 'bricks': self.createBricks(2, "Volume1",
                                                             '10.70.43.2')})
        cluster['volumes'].append({'name': 'Volume1', "type": "Replicate"})
        return cluster

    def _getGlusterNagiosConfManager(self):
        return config_generator.GlusterNagiosConfManager("/tmp/nagios/gluster")