65
65
class TestLogsRelation(unittest.TestCase):
67
def patch(self, patch):
69
self.addCleanup(patch.stop)
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',
78
self.mhookenv = self.patch(
79
mock.patch.object(services.helpers, 'hookenv')
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'])}
80
del os.environ['JUJU_HOOK_NAME']
87
self.mock_gethostname = self.patch(mock.patch('socket.gethostname'))
88
self.mock_gethostname.return_value = 'HOSTNAME'
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])
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',
105
self.assertEqual(expected_fields, conf["files"][0]["fields"])
90
106
host.service_restart.assert_called_once_with('logstash-forwarder')
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()
111
'file1': {'type': 'type1'},
112
'file2': {'type': 'type2'},
114
self.assertEqual(expected, data)
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',
123
data = hooks.logs_relation()
125
'file1': {'type': 'type1', 'service': 'svc1'},
126
'file2': {'type': 'type2', 'service': 'svc2'},
128
self.assertEqual(expected, data)
130
def test_logs_relation_extra_fewer(self):
131
self.mhookenv.relation_get.side_effect = [
132
{'files': 'file1 file2',
133
'types': 'type1 type2',
137
data = hooks.logs_relation()
139
'file1': {'type': 'type1', 'service': 'svc1'},
140
'file2': {'type': 'type2'},
142
self.assertEqual(expected, data)
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',
151
data = hooks.logs_relation()
153
'file1': {'type': 'type1'},
154
'file2': {'type': 'type2', 'service': 'svc2'},
156
self.assertEqual(expected, data)
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',
165
data = hooks.logs_relation()
167
'file1': {'type': 'type1'},
168
'file2': {'type': 'type2'},
170
self.assertEqual(expected, data)