~ce-hyperscale/charms/precise/haproxy/arm64-trusty

« back to all changes in this revision

Viewing changes to hooks/tests/test_helpers.py

[jseutter] adds support for the backend service to specify errorfiles in the service configuration. If errorfiles are supplied, the haproxy charm will write them to /var/lib/haproxy/<service_name>/<http status>.html and configure haproxy to use them.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import base64
1
2
import os
2
3
 
3
4
from contextlib import contextmanager
352
353
 
353
354
        self.assertEqual(expected, result)
354
355
 
 
356
    @patch.dict(os.environ, {"JUJU_UNIT_NAME": "haproxy/2"})
 
357
    def test_creates_a_listen_stanza_with_errorfiles(self):
 
358
        service_name = 'some-name'
 
359
        service_ip = '10.11.12.13'
 
360
        service_port = 1234
 
361
        service_options = ('foo', 'bar')
 
362
        server_entries = [
 
363
            ('name-1', 'ip-1', 'port-1', ('foo1', 'bar1')),
 
364
            ('name-2', 'ip-2', 'port-2', ('foo2', 'bar2')),
 
365
        ]
 
366
        content = ("HTTP/1.0 403 Forbidden\r\n"
 
367
                   "Content-Type: text/html\r\n"
 
368
                   "\r\n"
 
369
                   "<html></html>")
 
370
        errorfiles = [{'http_status': 403,
 
371
                       'content': base64.b64encode(content)}]
 
372
 
 
373
        result = hooks.create_listen_stanza(service_name, service_ip,
 
374
                                            service_port, service_options,
 
375
                                            server_entries, errorfiles)
 
376
 
 
377
        expected = '\n'.join((
 
378
            'frontend haproxy-2-1234',
 
379
            '    bind 10.11.12.13:1234',
 
380
            '    default_backend some-name',
 
381
            '',
 
382
            'backend some-name',
 
383
            '    foo',
 
384
            '    bar',
 
385
            '    errorfile 403 /var/lib/haproxy/service_some-name/403.http',
 
386
            '    server name-1 ip-1:port-1 foo1 bar1',
 
387
            '    server name-2 ip-2:port-2 foo2 bar2',
 
388
        ))
 
389
 
 
390
        self.assertEqual(expected, result)
 
391
 
355
392
    def test_doesnt_create_listen_stanza_if_args_not_provided(self):
356
393
        self.assertIsNone(hooks.create_listen_stanza())
357
394