Beispiel #1
0
    def setUp(self):
        super(TestAmphoraInfo, self).setUp()
        self.osutils_mock = mock.MagicMock()
        self.amp_info = amphora_info.AmphoraInfo(self.osutils_mock)
        self.udp_driver = mock.MagicMock()

        # setup a fake haproxy config file
        templater = jinja_cfg.JinjaTemplater(base_amp_path=self.BASE_AMP_PATH,
                                             base_crt_dir=self.BASE_CRT_PATH)
        tls_tupel = {
            'cont_id_1':
            sample_configs_combined.sample_tls_container_tuple(
                id='tls_container_id',
                certificate='imaCert1',
                private_key='imaPrivateKey1',
                primary_cn='FakeCN')
        }
        self.rendered_haproxy_cfg = templater.render_loadbalancer_obj(
            sample_configs_combined.sample_amphora_tuple(), [
                sample_configs_combined.sample_listener_tuple(
                    proto='TERMINATED_HTTPS', tls=True, sni=True)
            ], tls_tupel)
        path = util.config_path(self.LB_ID_1)
        self.useFixture(test_utils.OpenFixture(path,
                                               self.rendered_haproxy_cfg))
Beispiel #2
0
 def test_build_pem(self):
     expected = b'imacert\nimakey\nimainter\nimainter2\n'
     tls_tuple = sample_configs_combined.sample_tls_container_tuple(
         certificate=b'imacert',
         private_key=b'imakey',
         intermediates=[b'imainter', b'imainter2'])
     self.assertEqual(expected, cert_parser.build_pem(tls_tuple))
Beispiel #3
0
    def test_parse_haproxy_config(self):
        # template_tls
        tls_tupe = {
            'cont_id_1':
            sample_configs_combined.sample_tls_container_tuple(
                id='tls_container_id',
                certificate='imaCert1',
                private_key='imaPrivateKey1',
                primary_cn='FakeCN')
        }
        rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
            sample_configs_combined.sample_amphora_tuple(), [
                sample_configs_combined.sample_listener_tuple(
                    proto='TERMINATED_HTTPS', tls=True, sni=True)
            ], tls_tupe)

        path = util.config_path(LISTENER_ID1)
        self.useFixture(test_utils.OpenFixture(path, rendered_obj))

        res = util.parse_haproxy_file(LISTENER_ID1)
        listener_dict = res[1]['sample_listener_id_1']
        self.assertEqual('TERMINATED_HTTPS', listener_dict['mode'])
        self.assertEqual('/var/lib/octavia/sample_loadbalancer_id_1.sock',
                         res[0])
        self.assertEqual(
            '/var/lib/octavia/certs/sample_loadbalancer_id_1/'
            'tls_container_id.pem crt /var/lib/octavia/certs/'
            'sample_loadbalancer_id_1', listener_dict['ssl_crt'])

        # render_template_tls_no_sni
        rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
            sample_configs_combined.sample_amphora_tuple(), [
                sample_configs_combined.sample_listener_tuple(
                    proto='TERMINATED_HTTPS', tls=True)
            ],
            tls_certs={
                'cont_id_1':
                sample_configs_combined.sample_tls_container_tuple(
                    id='tls_container_id',
                    certificate='ImAalsdkfjCert',
                    private_key='ImAsdlfksdjPrivateKey',
                    primary_cn="FakeCN")
            })

        self.useFixture(test_utils.OpenFixture(path, rendered_obj))

        res = util.parse_haproxy_file(LISTENER_ID1)
        listener_dict = res[1]['sample_listener_id_1']
        self.assertEqual('TERMINATED_HTTPS', listener_dict['mode'])
        self.assertEqual(BASE_AMP_PATH + '/sample_loadbalancer_id_1.sock',
                         res[0])
        self.assertEqual(
            BASE_CRT_PATH + '/sample_loadbalancer_id_1/tls_container_id.pem',
            listener_dict['ssl_crt'])

        # render_template_http
        rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
            sample_configs_combined.sample_amphora_tuple(),
            [sample_configs_combined.sample_listener_tuple()])

        self.useFixture(test_utils.OpenFixture(path, rendered_obj))

        res = util.parse_haproxy_file(LISTENER_ID1)
        listener_dict = res[1]['sample_listener_id_1']
        self.assertEqual('HTTP', listener_dict['mode'])
        self.assertEqual(BASE_AMP_PATH + '/sample_loadbalancer_id_1.sock',
                         res[0])
        self.assertIsNone(listener_dict.get('ssl_crt', None))

        # template_https
        rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
            sample_configs_combined.sample_amphora_tuple(),
            [sample_configs_combined.sample_listener_tuple(proto='HTTPS')])
        self.useFixture(test_utils.OpenFixture(path, rendered_obj))

        res = util.parse_haproxy_file(LISTENER_ID1)
        listener_dict = res[1]['sample_listener_id_1']
        self.assertEqual('TCP', listener_dict['mode'])
        self.assertEqual(BASE_AMP_PATH + '/sample_loadbalancer_id_1.sock',
                         res[0])
        self.assertIsNone(listener_dict.get('ssl_crt', None))

        # Bogus format
        self.useFixture(test_utils.OpenFixture(path, 'Bogus'))
        try:
            res = util.parse_haproxy_file(LISTENER_ID1)
            self.fail("No Exception?")
        except util.ParsingError:
            pass

        # Bad listener mode
        fake_cfg = 'stats socket foo\nfrontend {}\nmode\n'.format(LISTENER_ID1)
        self.useFixture(test_utils.OpenFixture(path, fake_cfg))
        self.assertRaises(util.ParsingError, util.parse_haproxy_file,
                          LISTENER_ID1)