~verterok/charms/trusty/logstash-forwarder/focal-support

« back to all changes in this revision

Viewing changes to hooks/test_hooks.py

  • Committer: Chris Stratford
  • Date: 2017-03-07 11:33:07 UTC
  • mfrom: (16.1.7 logstash-forwarder)
  • Revision ID: chris.stratford@canonical.com-20170307113307-81peil2w2td9mwbq
[bloodearnest,r=chriss] Fix logs relation so it actually does something, and add some default juju fields.  Also, extend that something to support arbitrary fields the app can add to it's logs.

Show diffs side-by-side

added added

removed removed

Lines of Context:
64
64
 
65
65
class TestLogsRelation(unittest.TestCase):
66
66
 
 
67
    def patch(self, patch):
 
68
        m = patch.start()
 
69
        self.addCleanup(patch.stop)
 
70
        return m
 
71
 
67
72
    def setUp(self):
68
 
        os.environ['JUJU_HOOK_NAME'] = 'logs-relation-joined'
69
 
        self.phookenv = mock.patch.object(services.helpers, 'hookenv')
70
 
        self.mhookenv = self.phookenv.start()
 
73
        self.patch(mock.patch.dict(os.environ, {
 
74
            'JUJU_HOOK_NAME': 'logs-relation-joined',
 
75
            'JUJU_MODEL_NAME': 'test-model',
 
76
        }))
 
77
 
 
78
        self.mhookenv = self.patch(
 
79
            mock.patch.object(services.helpers, 'hookenv')
 
80
        )
71
81
        self.mhookenv.relation_ids.return_value = ['baz']
72
82
        self.mhookenv.related_units.side_effect = lambda i: [i + '/0']
73
83
        self.mhookenv.relation_get.side_effect = [
74
84
            {'files': '\n'.join(['file1', 'file2']),
75
85
             'types': '\n'.join(['type1', 'type2'])}
76
86
        ]
77
 
 
78
 
    def tearDown(self):
79
 
        self.phookenv.stop()
80
 
        del os.environ['JUJU_HOOK_NAME']
 
87
        self.mock_gethostname = self.patch(mock.patch('socket.gethostname'))
 
88
        self.mock_gethostname.return_value = 'HOSTNAME'
81
89
 
82
90
    def test_logs_hooks(self):
83
91
        conf_path = hookenv.config("config_dir") + "/logstash_forwarder.conf"
87
95
        self.assertEqual(conf_path, host.write_file.call_args[0][0])
88
96
        conf = json.loads(host.write_file.call_args[0][1])
89
97
        self.assertEqual("file1", conf["files"][0]["paths"][0])
 
98
        expected_fields = {
 
99
            u'juju_service': u'logstash-forwarder',
 
100
            u'juju_unit': u'logstash-forwarder-0',
 
101
            u'juju_model': u'test-model',
 
102
            u'hostname': u'HOSTNAME',
 
103
            u'type': u'type1',
 
104
        }
 
105
        self.assertEqual(expected_fields, conf["files"][0]["fields"])
90
106
        host.service_restart.assert_called_once_with('logstash-forwarder')
91
107
 
92
 
    def test_logs_realtion(self):
93
 
        data = hooks.logs_relation()
94
 
        self.assertEqual([('type1', 'file1'), ('type2', 'file2')], data)
 
108
    def test_logs_relation_simple(self):
 
109
        data = hooks.logs_relation()
 
110
        expected = {
 
111
            'file1': {'type': 'type1'},
 
112
            'file2': {'type': 'type2'},
 
113
        }
 
114
        self.assertEqual(expected, data)
 
115
 
 
116
    def test_logs_relation_extra(self):
 
117
        self.mhookenv.relation_get.side_effect = [
 
118
            {'files': 'file1 file2',
 
119
             'types': 'type1 type2',
 
120
             'service': 'svc1 svc2',
 
121
            }
 
122
        ]
 
123
        data = hooks.logs_relation()
 
124
        expected = {
 
125
            'file1': {'type': 'type1', 'service': 'svc1'},
 
126
            'file2': {'type': 'type2', 'service': 'svc2'},
 
127
        }
 
128
        self.assertEqual(expected, data)
 
129
 
 
130
    def test_logs_relation_extra_fewer(self):
 
131
        self.mhookenv.relation_get.side_effect = [
 
132
            {'files': 'file1 file2',
 
133
             'types': 'type1 type2',
 
134
             'service': 'svc1',
 
135
            }
 
136
        ]
 
137
        data = hooks.logs_relation()
 
138
        expected = {
 
139
            'file1': {'type': 'type1', 'service': 'svc1'},
 
140
            'file2': {'type': 'type2'},
 
141
        }
 
142
        self.assertEqual(expected, data)
 
143
 
 
144
    def test_logs_relation_extra_skip(self):
 
145
        self.mhookenv.relation_get.side_effect = [
 
146
            {'files': 'file1 file2',
 
147
             'types': 'type1 type2',
 
148
             'service': 'SKIP svc2',
 
149
            }
 
150
        ]
 
151
        data = hooks.logs_relation()
 
152
        expected = {
 
153
            'file1': {'type': 'type1'},
 
154
            'file2': {'type': 'type2', 'service': 'svc2'},
 
155
        }
 
156
        self.assertEqual(expected, data)
 
157
 
 
158
    def test_logs_relation_extra_no_private_address(self):
 
159
        self.mhookenv.relation_get.side_effect = [
 
160
            {'files': 'file1 file2',
 
161
             'types': 'type1 type2',
 
162
             'private-address': '1.2.3.4',
 
163
            }
 
164
        ]
 
165
        data = hooks.logs_relation()
 
166
        expected = {
 
167
            'file1': {'type': 'type1'},
 
168
            'file2': {'type': 'type2'},
 
169
        }
 
170
        self.assertEqual(expected, data)
 
171
 
 
172
 
 
173
 
 
174