예제 #1
0
    def test_http_reuse(self):
        j_cfg = jinja_cfg.JinjaTemplater(base_amp_path='/var/lib/octavia',
                                         base_crt_dir='/var/lib/octavia/certs')

        # With http-reuse
        be = ("backend sample_pool_id_1\n"
              "    mode http\n"
              "    http-reuse safe\n"
              "    balance roundrobin\n"
              "    cookie SRV insert indirect nocache\n"
              "    timeout check 31s\n"
              "    fullconn {maxconn}\n"
              "    option allbackups\n"
              "    timeout connect 5000\n"
              "    timeout server 50000\n"
              "    server sample_member_id_1 10.0.0.99:82 "
              "weight 13 check inter 30s fall 3 rise 2 "
              "cookie sample_member_id_1 send-proxy\n"
              "    server sample_member_id_2 10.0.0.98:82 "
              "weight 13 check inter 30s fall 3 rise 2 "
              "cookie sample_member_id_2 send-proxy\n\n").format(
                  maxconn=constants.HAPROXY_MAX_MAXCONN)
        rendered_obj = j_cfg.build_config(
            sample_configs.sample_amphora_tuple(),
            sample_configs.sample_listener_tuple(be_proto='PROXY'),
            tls_cert=None,
            haproxy_versions=("1", "8", "1"))
        self.assertEqual(
            sample_configs.sample_base_expected_config(backend=be),
            rendered_obj)

        # Without http-reuse
        be = ("backend sample_pool_id_1\n"
              "    mode http\n"
              "    balance roundrobin\n"
              "    cookie SRV insert indirect nocache\n"
              "    timeout check 31s\n"
              "    fullconn {maxconn}\n"
              "    option allbackups\n"
              "    timeout connect 5000\n"
              "    timeout server 50000\n"
              "    server sample_member_id_1 10.0.0.99:82 "
              "weight 13 check inter 30s fall 3 rise 2 "
              "cookie sample_member_id_1 send-proxy\n"
              "    server sample_member_id_2 10.0.0.98:82 "
              "weight 13 check inter 30s fall 3 rise 2 "
              "cookie sample_member_id_2 send-proxy\n\n").format(
                  maxconn=constants.HAPROXY_MAX_MAXCONN)
        rendered_obj = j_cfg.build_config(
            sample_configs.sample_amphora_tuple(),
            sample_configs.sample_listener_tuple(be_proto='PROXY'),
            tls_cert=None,
            haproxy_versions=("1", "5", "18"))
        self.assertEqual(
            sample_configs.sample_base_expected_config(backend=be),
            rendered_obj)
예제 #2
0
 def test_render_template_https(self):
     fe = ("frontend sample_listener_id_1\n"
           "    option tcplog\n"
           "    maxconn 98\n"
           "    bind 10.0.0.2:443\n"
           "    mode tcp\n"
           "    default_backend sample_pool_id_1\n\n")
     be = ("backend sample_pool_id_1\n"
           "    mode tcp\n"
           "    balance roundrobin\n"
           "    cookie SRV insert indirect nocache\n"
           "    timeout check 31\n"
           "    option httpchk GET /index.html\n"
           "    http-check expect rstatus 418\n"
           "    option ssl-hello-chk\n"
           "    server sample_member_id_1 10.0.0.99:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "cookie sample_member_id_1\n"
           "    server sample_member_id_2 10.0.0.98:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "cookie sample_member_id_2\n\n")
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(proto='HTTPS'))
     self.assertEqual(sample_configs.sample_base_expected_config(
         frontend=fe, backend=be), rendered_obj)
예제 #3
0
 def test_render_template_ping_monitor_http(self):
     be = ("backend sample_pool_id_1\n"
           "    mode http\n"
           "    http-reuse safe\n"
           "    balance roundrobin\n"
           "    cookie SRV insert indirect nocache\n"
           "    timeout check 31s\n"
           "    option external-check\n"
           "    external-check command /var/lib/octavia/ping-wrapper.sh\n"
           "    fullconn {maxconn}\n"
           "    option allbackups\n"
           "    timeout connect 5000\n"
           "    timeout server 50000\n"
           "    server sample_member_id_1 10.0.0.99:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "cookie sample_member_id_1\n"
           "    server sample_member_id_2 10.0.0.98:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "cookie sample_member_id_2\n\n").format(
               maxconn=constants.HAPROXY_MAX_MAXCONN)
     go = "    maxconn {maxconn}\n    external-check\n\n".format(
         maxconn=constants.HAPROXY_MAX_MAXCONN)
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(proto='HTTP',
                                              monitor_proto='PING'))
     self.assertEqual(
         sample_configs.sample_base_expected_config(backend=be,
                                                    global_opts=go),
         rendered_obj)
예제 #4
0
 def test_render_template_sourceip_persistence(self):
     be = ("backend sample_pool_id_1\n"
           "    mode http\n"
           "    balance roundrobin\n"
           "    stick-table type ip size 10k\n"
           "    stick on src\n"
           "    timeout check 31s\n"
           "    option httpchk GET /index.html\n"
           "    http-check expect rstatus 418\n"
           "    fullconn {maxconn}\n"
           "    option allbackups\n"
           "    timeout connect 5000\n"
           "    timeout server 50000\n"
           "    server sample_member_id_1 10.0.0.99:82 "
           "weight 13 check inter 30s fall 3 rise 2\n"
           "    server sample_member_id_2 10.0.0.98:82 "
           "weight 13 check inter 30s fall 3 rise 2\n\n").format(
         maxconn=constants.HAPROXY_MAX_MAXCONN)
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(
             persistence_type='SOURCE_IP'))
     self.assertEqual(
         sample_configs.sample_base_expected_config(backend=be),
         rendered_obj)
예제 #5
0
 def test_render_template_no_persistence_https(self):
     fe = ("frontend sample_listener_id_1\n"
           "    option tcplog\n"
           "    maxconn {maxconn}\n"
           "    bind 10.0.0.2:443\n"
           "    mode tcp\n"
           "    default_backend sample_pool_id_1\n"
           "    timeout client 50000\n\n").format(
               maxconn=constants.HAPROXY_MAX_MAXCONN)
     be = ("backend sample_pool_id_1\n"
           "    mode tcp\n"
           "    balance roundrobin\n"
           "    fullconn {maxconn}\n"
           "    option allbackups\n"
           "    timeout connect 5000\n"
           "    timeout server 50000\n"
           "    server sample_member_id_1 10.0.0.99:82 weight 13\n"
           "    server sample_member_id_2 10.0.0.98:82 "
           "weight 13\n\n").format(maxconn=constants.HAPROXY_MAX_MAXCONN)
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(proto='HTTPS',
                                              monitor=False,
                                              persistence=False))
     self.assertEqual(
         sample_configs.sample_base_expected_config(frontend=fe,
                                                    backend=be),
         rendered_obj)
예제 #6
0
 def test_render_template_null_timeouts(self):
     fe = ("frontend sample_listener_id_1\n"
           "    option httplog\n"
           "    maxconn {maxconn}\n"
           "    bind 10.0.0.2:80\n"
           "    mode http\n"
           "    default_backend sample_pool_id_1\n"
           "    timeout client 50000\n\n").format(
         maxconn=constants.HAPROXY_MAX_MAXCONN)
     be = ("backend sample_pool_id_1\n"
           "    mode http\n"
           "    balance roundrobin\n"
           "    cookie SRV insert indirect nocache\n"
           "    timeout check 31s\n"
           "    option httpchk GET /index.html\n"
           "    http-check expect rstatus 418\n"
           "    fullconn {maxconn}\n"
           "    option allbackups\n"
           "    timeout connect 5000\n"
           "    timeout server 50000\n"
           "    server sample_member_id_1 10.0.0.99:82 weight 13 "
           "check inter 30s fall 3 rise 2 cookie sample_member_id_1\n"
           "    server sample_member_id_2 10.0.0.98:82 weight 13 "
           "check inter 30s fall 3 rise 2 cookie "
           "sample_member_id_2\n\n").format(
         maxconn=constants.HAPROXY_MAX_MAXCONN)
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(timeout_member_connect=None,
                                              timeout_client_data=None,
                                              timeout_member_data=None))
     self.assertEqual(
         sample_configs.sample_base_expected_config(frontend=fe,
                                                    backend=be),
         rendered_obj)
예제 #7
0
 def test_render_template_member_backup(self):
     be = ("backend sample_pool_id_1\n"
           "    mode http\n"
           "    balance roundrobin\n"
           "    cookie SRV insert indirect nocache\n"
           "    timeout check 31s\n"
           "    option httpchk GET /index.html\n"
           "    http-check expect rstatus 418\n"
           "    fullconn {maxconn}\n"
           "    option allbackups\n"
           "    timeout connect 5000\n"
           "    timeout server 50000\n"
           "    server sample_member_id_1 10.0.0.99:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "addr 192.168.1.1 port 9000 "
           "cookie sample_member_id_1\n"
           "    server sample_member_id_2 10.0.0.98:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "addr 192.168.1.1 port 9000 "
           "cookie sample_member_id_2 backup\n\n").format(
         maxconn=constants.HAPROXY_MAX_MAXCONN)
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(monitor_ip_port=True,
                                              backup_member=True))
     self.assertEqual(
         sample_configs.sample_base_expected_config(backend=be),
         rendered_obj)
예제 #8
0
 def test_render_template_tls_no_sni(self):
     fe = ("frontend sample_listener_id_1\n"
           "    option tcplog\n"
           "    maxconn 98\n"
           "    redirect scheme https if !{ ssl_fc }\n"
           "    bind 10.0.0.2:443 "
           "ssl crt /var/lib/octavia/certs/"
           "sample_listener_id_1/FakeCN.pem\n"
           "    mode http\n"
           "    default_backend sample_pool_id_1\n\n")
     be = ("backend sample_pool_id_1\n"
           "    mode http\n"
           "    balance roundrobin\n"
           "    cookie SRV insert indirect nocache\n"
           "    timeout check 31\n"
           "    option httpchk GET /index.html\n"
           "    http-check expect rstatus 418\n"
           "    server sample_member_id_1 10.0.0.99:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "cookie sample_member_id_1\n"
           "    server sample_member_id_2 10.0.0.98:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "cookie sample_member_id_2\n\n")
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(
             proto='TERMINATED_HTTPS', tls=True),
         tls_cert=sample_configs.sample_tls_container_tuple(
             certificate='ImAalsdkfjCert',
             private_key='ImAsdlfksdjPrivateKey',
             primary_cn="FakeCN"))
     self.assertEqual(
         sample_configs.sample_base_expected_config(
             frontend=fe, backend=be),
         rendered_obj)
예제 #9
0
 def test_post_vip_plug_active_active(self):
     test_lb = sample_configs.sample_loadbalancer_tuple(
         topology=constants.TOPOLOGY_ACTIVE_ACTIVE)
     test_amp = sample_configs.sample_amphora_tuple(
         frontend_ip="10.10.10.6")
     test_subnet_info = {
         'frontend_ip':
         '10.10.10.6',
         'mac_address':
         '123',
         'host_routes': [{
             'destination': '198.51.100.0/24',
             'nexthop': '192.0.2.1'
         }, {
             'destination': '203.0.113.0/24',
             'nexthop': '192.0.2.1'
         }],
         'gateway':
         '10.10.10.1',
         'subnet_cidr':
         '10.10.10.0/24',
         'mtu':
         1450
     }
     amphorae_network_config = mock.MagicMock()
     amphorae_network_config.get().vip_subnet.cidr = FAKE_CIDR
     amphorae_network_config.get().vip_subnet.gateway_ip = FAKE_GATEWAY
     amphorae_network_config.get().vip_subnet.host_routes = self.host_routes
     amphorae_network_config.get().frontend_port = self.port
     amphorae_network_config.get().frontend_subnet = self.subnet
     self.driver.post_vip_plug(test_amp, test_lb, amphorae_network_config)
     self.driver.client.plug_vip.assert_called_once_with(
         test_amp, test_lb.vip.ip_address, test_subnet_info)
예제 #10
0
 def test_render_template_limited_connections(self):
     fe = ("frontend sample_listener_id_1\n"
           "    option tcplog\n"
           "    maxconn 2014\n"
           "    bind 10.0.0.2:443\n"
           "    mode tcp\n"
           "    default_backend sample_pool_id_1\n"
           "    timeout client 50000\n\n")
     be = ("backend sample_pool_id_1\n"
           "    mode tcp\n"
           "    balance roundrobin\n"
           "    cookie SRV insert indirect nocache\n"
           "    fullconn 2014\n"
           "    option allbackups\n"
           "    timeout connect 5000\n"
           "    timeout server 50000\n"
           "    server sample_member_id_1 10.0.0.99:82 weight 13 "
           "cookie sample_member_id_1\n"
           "    server sample_member_id_2 10.0.0.98:82 weight 13 "
           "cookie sample_member_id_2\n\n")
     g_opts = "    maxconn 2014\n\n"
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(proto='HTTPS',
                                              monitor=False,
                                              connection_limit=2014))
     self.assertEqual(
         sample_configs.sample_base_expected_config(frontend=fe,
                                                    backend=be,
                                                    global_opts=g_opts),
         rendered_obj)
예제 #11
0
 def test_render_template_http_xff_xfport(self):
     be = ("backend sample_pool_id_1\n"
           "    mode http\n"
           "    balance roundrobin\n"
           "    cookie SRV insert indirect nocache\n"
           "    timeout check 31s\n"
           "    option httpchk GET /index.html\n"
           "    http-check expect rstatus 418\n"
           "    option forwardfor\n"
           "    http-request set-header X-Forwarded-Port %[dst_port]\n"
           "    fullconn 98\n"
           "    server sample_member_id_1 10.0.0.99:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "cookie sample_member_id_1\n"
           "    server sample_member_id_2 10.0.0.98:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "cookie sample_member_id_2\n\n")
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(
             insert_headers={'X-Forwarded-For': 'true',
                             'X-Forwarded-Port': 'true'}))
     self.assertEqual(
         sample_configs.sample_base_expected_config(backend=be),
         rendered_obj)
예제 #12
0
 def test_render_template_http_xff(self):
     be = ("backend sample_pool_id_1\n"
           "    mode http\n"
           "    http-reuse safe\n"
           "    balance roundrobin\n"
           "    cookie SRV insert indirect nocache\n"
           "    timeout check 31s\n"
           "    option httpchk GET /index.html\n"
           "    http-check expect rstatus 418\n"
           "    option forwardfor\n"
           "    fullconn {maxconn}\n"
           "    option allbackups\n"
           "    timeout connect 5000\n"
           "    timeout server 50000\n"
           "    server sample_member_id_1 10.0.0.99:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "cookie sample_member_id_1\n"
           "    server sample_member_id_2 10.0.0.98:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "cookie sample_member_id_2\n\n").format(
               maxconn=constants.HAPROXY_MAX_MAXCONN)
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(
             insert_headers={'X-Forwarded-For': 'true'}))
     self.assertEqual(
         sample_configs.sample_base_expected_config(backend=be),
         rendered_obj)
예제 #13
0
 def test_render_template_https_hello_monitor(self):
     fe = ("frontend sample_listener_id_1\n"
           "    option tcplog\n"
           "    maxconn 98\n"
           "    bind 10.0.0.2:443\n"
           "    mode tcp\n"
           "    default_backend sample_pool_id_1\n\n")
     be = ("backend sample_pool_id_1\n"
           "    mode tcp\n"
           "    balance roundrobin\n"
           "    cookie SRV insert indirect nocache\n"
           "    timeout check 31s\n"
           "    option ssl-hello-chk\n"
           "    fullconn 98\n"
           "    server sample_member_id_1 10.0.0.99:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "cookie sample_member_id_1\n"
           "    server sample_member_id_2 10.0.0.98:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "cookie sample_member_id_2\n\n")
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(proto='HTTPS',
                                              monitor_proto='TLS-HELLO'))
     self.assertEqual(
         sample_configs.sample_base_expected_config(frontend=fe,
                                                    backend=be),
         rendered_obj)
예제 #14
0
 def test_render_template_http_xff_xfport(self):
     be = ("backend sample_pool_id_1\n"
           "    mode http\n"
           "    balance roundrobin\n"
           "    cookie SRV insert indirect nocache\n"
           "    timeout check 31s\n"
           "    option httpchk GET /index.html\n"
           "    http-check expect rstatus 418\n"
           "    option forwardfor\n"
           "    http-request set-header X-Forwarded-Port %[dst_port]\n"
           "    fullconn 98\n"
           "    server sample_member_id_1 10.0.0.99:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "cookie sample_member_id_1\n"
           "    server sample_member_id_2 10.0.0.98:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "cookie sample_member_id_2\n\n")
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(insert_headers={
             'X-Forwarded-For': 'true',
             'X-Forwarded-Port': 'true'
         }))
     self.assertEqual(
         sample_configs.sample_base_expected_config(backend=be),
         rendered_obj)
예제 #15
0
 def test_render_template_https_real_monitor(self):
     fe = ("frontend sample_listener_id_1\n"
           "    option tcplog\n"
           "    maxconn {maxconn}\n"
           "    bind 10.0.0.2:443\n"
           "    mode tcp\n"
           "    default_backend sample_pool_id_1\n"
           "    timeout client 50000\n\n").format(
               maxconn=constants.HAPROXY_MAX_MAXCONN)
     be = ("backend sample_pool_id_1\n"
           "    mode tcp\n"
           "    balance roundrobin\n"
           "    cookie SRV insert indirect nocache\n"
           "    timeout check 31s\n"
           "    option httpchk GET /index.html\n"
           "    http-check expect rstatus 418\n"
           "    fullconn {maxconn}\n"
           "    option allbackups\n"
           "    timeout connect 5000\n"
           "    timeout server 50000\n"
           "    server sample_member_id_1 10.0.0.99:82 "
           "weight 13 check check-ssl verify none inter 30s fall 3 rise 2 "
           "cookie sample_member_id_1\n"
           "    server sample_member_id_2 10.0.0.98:82 "
           "weight 13 check check-ssl verify none inter 30s fall 3 rise 2 "
           "cookie sample_member_id_2\n\n").format(
               maxconn=constants.HAPROXY_MAX_MAXCONN)
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(proto='HTTPS'))
     self.assertEqual(
         sample_configs.sample_base_expected_config(frontend=fe,
                                                    backend=be),
         rendered_obj)
예제 #16
0
 def test_render_template_appcookie_persistence(self):
     be = ("backend sample_pool_id_1\n"
           "    mode http\n"
           "    http-reuse safe\n"
           "    balance roundrobin\n"
           "    stick-table type string len 64 size 10k\n"
           "    stick store-response res.cook(JSESSIONID)\n"
           "    stick match req.cook(JSESSIONID)\n"
           "    timeout check 31s\n"
           "    option httpchk GET /index.html\n"
           "    http-check expect rstatus 418\n"
           "    fullconn {maxconn}\n"
           "    option allbackups\n"
           "    timeout connect 5000\n"
           "    timeout server 50000\n"
           "    server sample_member_id_1 10.0.0.99:82 "
           "weight 13 check inter 30s fall 3 rise 2\n"
           "    server sample_member_id_2 10.0.0.98:82 "
           "weight 13 check inter 30s fall 3 rise 2\n\n").format(
               maxconn=constants.HAPROXY_MAX_MAXCONN)
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(
             persistence_type='APP_COOKIE',
             persistence_cookie='JSESSIONID'))
     self.assertEqual(
         sample_configs.sample_base_expected_config(backend=be),
         rendered_obj)
예제 #17
0
 def test_render_template_tls_no_sni(self):
     fe = ("frontend sample_listener_id_1\n"
           "    option tcplog\n"
           "    maxconn 98\n"
           "    redirect scheme https if !{ ssl_fc }\n"
           "    bind 10.0.0.2:443 "
           "ssl crt /var/lib/octavia/certs/"
           "sample_listener_id_1/FakeCN.pem\n"
           "    mode http\n"
           "    default_backend sample_pool_id_1\n\n")
     be = ("backend sample_pool_id_1\n"
           "    mode http\n"
           "    balance roundrobin\n"
           "    cookie SRV insert indirect nocache\n"
           "    timeout check 31\n"
           "    option httpchk GET /index.html\n"
           "    http-check expect rstatus 418\n"
           "    server sample_member_id_1 10.0.0.99:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "cookie sample_member_id_1\n"
           "    server sample_member_id_2 10.0.0.98:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "cookie sample_member_id_2\n\n")
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(proto='TERMINATED_HTTPS',
                                              tls=True),
         tls_cert=sample_configs.sample_tls_container_tuple(
             certificate='ImAalsdkfjCert',
             private_key='ImAsdlfksdjPrivateKey',
             primary_cn="FakeCN"))
     self.assertEqual(
         sample_configs.sample_base_expected_config(frontend=fe,
                                                    backend=be),
         rendered_obj)
예제 #18
0
 def test_transform_loadbalancer_with_l7(self):
     in_amphora = sample_configs.sample_amphora_tuple()
     in_listener = sample_configs.sample_listener_tuple(l7=True)
     ret = self.jinja_cfg._transform_loadbalancer(in_amphora,
                                                  in_listener.load_balancer,
                                                  in_listener, None)
     self.assertEqual(sample_configs.RET_LB_L7, ret)
예제 #19
0
 def test_render_template_l7policies(self):
     fe = ("frontend sample_listener_id_1\n"
           "    option httplog\n"
           "    maxconn {maxconn}\n"
           "    bind 10.0.0.2:80\n"
           "    mode http\n"
           "        acl sample_l7rule_id_1 path -m beg /api\n"
           "    use_backend sample_pool_id_2 if sample_l7rule_id_1\n"
           "        acl sample_l7rule_id_2 req.hdr(Some-header) -m sub "
           "This\\ string\\\\\\ with\\ stuff\n"
           "        acl sample_l7rule_id_3 req.cook(some-cookie) -m reg "
           "this.*|that\n"
           "    redirect location http://www.example.com if "
           "!sample_l7rule_id_2 sample_l7rule_id_3\n"
           "        acl sample_l7rule_id_4 path_end -m str jpg\n"
           "        acl sample_l7rule_id_5 req.hdr(host) -i -m end "
           ".example.com\n"
           "    http-request deny if sample_l7rule_id_4 "
           "sample_l7rule_id_5\n"
           "    default_backend sample_pool_id_1\n"
           "    timeout client 50000\n\n").format(
               maxconn=constants.HAPROXY_MAX_MAXCONN)
     be = ("backend sample_pool_id_1\n"
           "    mode http\n"
           "    balance roundrobin\n"
           "    cookie SRV insert indirect nocache\n"
           "    timeout check 31s\n"
           "    option httpchk GET /index.html\n"
           "    http-check expect rstatus 418\n"
           "    fullconn {maxconn}\n"
           "    option allbackups\n"
           "    timeout connect 5000\n"
           "    timeout server 50000\n"
           "    server sample_member_id_1 10.0.0.99:82 weight 13 check "
           "inter 30s fall 3 rise 2 cookie sample_member_id_1\n"
           "    server sample_member_id_2 10.0.0.98:82 weight 13 check "
           "inter 30s fall 3 rise 2 cookie sample_member_id_2\n"
           "\n"
           "backend sample_pool_id_2\n"
           "    mode http\n"
           "    balance roundrobin\n"
           "    cookie SRV insert indirect nocache\n"
           "    timeout check 31s\n"
           "    option httpchk GET /healthmon.html\n"
           "    http-check expect rstatus 418\n"
           "    fullconn {maxconn}\n"
           "    option allbackups\n"
           "    timeout connect 5000\n"
           "    timeout server 50000\n"
           "    server sample_member_id_3 10.0.0.97:82 weight 13 check "
           "inter 30s fall 3 rise 2 cookie sample_member_id_3\n\n").format(
               maxconn=constants.HAPROXY_MAX_MAXCONN)
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(l7=True))
     self.assertEqual(
         sample_configs.sample_base_expected_config(frontend=fe,
                                                    backend=be),
         rendered_obj)
예제 #20
0
 def test_render_template_no_persistence_http(self):
     be = ("backend sample_pool_id_1\n"
           "    mode http\n"
           "    balance roundrobin\n"
           "    server sample_member_id_1 10.0.0.99:82 weight 13\n"
           "    server sample_member_id_2 10.0.0.98:82 weight 13\n\n")
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(proto='HTTP', monitor=False,
                                              persistence=False))
     self.assertEqual(sample_configs.sample_base_expected_config(
         backend=be), rendered_obj)
예제 #21
0
 def test_render_template_no_persistence_http(self):
     be = ("backend sample_pool_id_1\n"
           "    mode http\n"
           "    balance roundrobin\n"
           "    fullconn 98\n"
           "    server sample_member_id_1 10.0.0.99:82 weight 13\n"
           "    server sample_member_id_2 10.0.0.98:82 weight 13\n\n")
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(proto='HTTP', monitor=False,
                                              persistence=False))
     self.assertEqual(sample_configs.sample_base_expected_config(
         backend=be), rendered_obj)
예제 #22
0
 def test_render_template_no_log(self):
     j_cfg = jinja_cfg.JinjaTemplater(base_amp_path='/var/lib/octavia',
                                      base_crt_dir='/var/lib/octavia/certs',
                                      connection_logging=False)
     defaults = ("defaults\n"
                 "    no log\n"
                 "    retries 3\n"
                 "    option redispatch\n\n")
     rendered_obj = j_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple())
     self.assertEqual(
         sample_configs.sample_base_expected_config(defaults=defaults),
         rendered_obj)
예제 #23
0
 def test_render_template_l7policies(self):
     fe = ("frontend sample_listener_id_1\n"
           "    option httplog\n"
           "    maxconn 98\n"
           "    bind 10.0.0.2:80\n"
           "    mode http\n"
           "        acl sample_l7rule_id_1 path -m beg /api\n"
           "    use_backend sample_pool_id_2 if sample_l7rule_id_1\n"
           "        acl sample_l7rule_id_2 req.hdr(Some-header) -m sub "
           "This\\ string\\\\\\ with\\ stuff\n"
           "        acl sample_l7rule_id_3 req.cook(some-cookie) -m reg "
           "this.*|that\n"
           "    redirect location http://www.example.com if "
           "!sample_l7rule_id_2 sample_l7rule_id_3\n"
           "        acl sample_l7rule_id_4 path_end -m str jpg\n"
           "        acl sample_l7rule_id_5 req.hdr(host) -i -m end "
           ".example.com\n"
           "    http-request deny if sample_l7rule_id_4 "
           "sample_l7rule_id_5\n"
           "    default_backend sample_pool_id_1\n\n")
     be = ("backend sample_pool_id_1\n"
           "    mode http\n"
           "    balance roundrobin\n"
           "    cookie SRV insert indirect nocache\n"
           "    timeout check 31s\n"
           "    option httpchk GET /index.html\n"
           "    http-check expect rstatus 418\n"
           "    fullconn 98\n"
           "    server sample_member_id_1 10.0.0.99:82 weight 13 check "
           "inter 30s fall 3 rise 2 cookie sample_member_id_1\n"
           "    server sample_member_id_2 10.0.0.98:82 weight 13 check "
           "inter 30s fall 3 rise 2 cookie sample_member_id_2\n"
           "\n"
           "backend sample_pool_id_2\n"
           "    mode http\n"
           "    balance roundrobin\n"
           "    cookie SRV insert indirect nocache\n"
           "    timeout check 31s\n"
           "    option httpchk GET /healthmon.html\n"
           "    http-check expect rstatus 418\n"
           "    fullconn 98\n"
           "    server sample_member_id_3 10.0.0.97:82 weight 13 check "
           "inter 30s fall 3 rise 2 cookie sample_member_id_3\n\n")
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(l7=True))
     self.assertEqual(sample_configs.sample_base_expected_config(
         frontend=fe, backend=be), rendered_obj)
예제 #24
0
 def test_render_template_no_monitor_http(self):
     be = ("backend sample_pool_id_1\n"
           "    mode http\n"
           "    balance roundrobin\n"
           "    cookie SRV insert indirect nocache\n"
           "    fullconn 98\n"
           "    option allbackups\n"
           "    server sample_member_id_1 10.0.0.99:82 weight 13 "
           "cookie sample_member_id_1\n"
           "    server sample_member_id_2 10.0.0.98:82 weight 13 "
           "cookie sample_member_id_2\n\n")
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(proto='HTTP', monitor=False))
     self.assertEqual(
         sample_configs.sample_base_expected_config(backend=be),
         rendered_obj)
예제 #25
0
 def test_render_template_tls(self):
     fe = ("frontend sample_listener_id_1\n"
           "    option httplog\n"
           "    maxconn {maxconn}\n"
           "    redirect scheme https if !{{ ssl_fc }}\n"
           "    bind 10.0.0.2:443 "
           "ssl crt /var/lib/octavia/certs/"
           "sample_listener_id_1/tls_container_id.pem "
           "crt /var/lib/octavia/certs/sample_listener_id_1\n"
           "    mode http\n"
           "    default_backend sample_pool_id_1\n"
           "    timeout client 50000\n\n").format(
               maxconn=constants.HAPROXY_MAX_MAXCONN)
     be = ("backend sample_pool_id_1\n"
           "    mode http\n"
           "    http-reuse safe\n"
           "    balance roundrobin\n"
           "    cookie SRV insert indirect nocache\n"
           "    timeout check 31s\n"
           "    option httpchk GET /index.html\n"
           "    http-check expect rstatus 418\n"
           "    fullconn {maxconn}\n"
           "    option allbackups\n"
           "    timeout connect 5000\n"
           "    timeout server 50000\n"
           "    server sample_member_id_1 10.0.0.99:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "cookie sample_member_id_1\n"
           "    server sample_member_id_2 10.0.0.98:82 "
           "weight 13 check inter 30s fall 3 rise 2 cookie "
           "sample_member_id_2\n\n").format(
               maxconn=constants.HAPROXY_MAX_MAXCONN)
     tls_tupe = sample_configs.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.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(proto='TERMINATED_HTTPS',
                                              tls=True,
                                              sni=True), tls_tupe)
     self.assertEqual(
         sample_configs.sample_base_expected_config(frontend=fe,
                                                    backend=be),
         rendered_obj)
예제 #26
0
 def test_render_template_no_persistence_https(self):
     fe = ("frontend sample_listener_id_1\n"
           "    option tcplog\n"
           "    maxconn 98\n"
           "    bind 10.0.0.2:443\n"
           "    mode tcp\n"
           "    default_backend sample_pool_id_1\n\n")
     be = ("backend sample_pool_id_1\n"
           "    mode tcp\n"
           "    balance roundrobin\n"
           "    server sample_member_id_1 10.0.0.99:82 weight 13\n"
           "    server sample_member_id_2 10.0.0.98:82 weight 13\n\n")
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(proto='HTTPS', monitor=False,
                                              persistence=False))
     self.assertEqual(sample_configs.sample_base_expected_config(
         frontend=fe, backend=be), rendered_obj)
예제 #27
0
 def test_render_template_no_persistence_https(self):
     fe = ("frontend sample_listener_id_1\n"
           "    option tcplog\n"
           "    maxconn 98\n"
           "    bind 10.0.0.2:443\n"
           "    mode tcp\n"
           "    default_backend sample_pool_id_1\n\n")
     be = ("backend sample_pool_id_1\n"
           "    mode tcp\n"
           "    balance roundrobin\n"
           "    fullconn 98\n"
           "    server sample_member_id_1 10.0.0.99:82 weight 13\n"
           "    server sample_member_id_2 10.0.0.98:82 weight 13\n\n")
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(proto='HTTPS', monitor=False,
                                              persistence=False))
     self.assertEqual(sample_configs.sample_base_expected_config(
         frontend=fe, backend=be), rendered_obj)
예제 #28
0
 def test_render_template_pool_proxy_protocol(self):
     be = ("backend sample_pool_id_1\n"
           "    mode http\n"
           "    balance roundrobin\n"
           "    cookie SRV insert indirect nocache\n"
           "    timeout check 31s\n"
           "    fullconn 98\n"
           "    server sample_member_id_1 10.0.0.99:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "cookie sample_member_id_1 send-proxy\n"
           "    server sample_member_id_2 10.0.0.98:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "cookie sample_member_id_2 send-proxy\n\n")
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(be_proto='PROXY'))
     self.assertEqual(
         sample_configs.sample_base_expected_config(backend=be),
         rendered_obj)
예제 #29
0
 def test_render_template_http(self):
     be = ("backend sample_pool_id_1\n"
           "    mode http\n"
           "    balance roundrobin\n"
           "    cookie SRV insert indirect nocache\n"
           "    timeout check 31\n"
           "    option httpchk GET /index.html\n"
           "    http-check expect rstatus 418\n"
           "    server sample_member_id_1 10.0.0.99:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "cookie sample_member_id_1\n"
           "    server sample_member_id_2 10.0.0.98:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "cookie sample_member_id_2\n\n")
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple())
     self.assertEqual(
         sample_configs.sample_base_expected_config(backend=be),
         rendered_obj)
예제 #30
0
 def test_render_template_http(self):
     be = ("backend sample_pool_id_1\n"
           "    mode http\n"
           "    balance roundrobin\n"
           "    cookie SRV insert indirect nocache\n"
           "    timeout check 31\n"
           "    option httpchk GET /index.html\n"
           "    http-check expect rstatus 418\n"
           "    server sample_member_id_1 10.0.0.99:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "cookie sample_member_id_1\n"
           "    server sample_member_id_2 10.0.0.98:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "cookie sample_member_id_2\n\n")
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple())
     self.assertEqual(
         sample_configs.sample_base_expected_config(backend=be),
         rendered_obj)
예제 #31
0
 def test_render_template_sourceip_persistence(self):
     be = ("backend sample_pool_id_1\n"
           "    mode http\n"
           "    balance roundrobin\n"
           "    stick-table type ip size 10k\n"
           "    stick on src\n"
           "    timeout check 31\n"
           "    option httpchk GET /index.html\n"
           "    http-check expect rstatus 418\n"
           "    server sample_member_id_1 10.0.0.99:82 "
           "weight 13 check inter 30s fall 3 rise 2\n"
           "    server sample_member_id_2 10.0.0.98:82 "
           "weight 13 check inter 30s fall 3 rise 2\n\n")
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(
             persistence_type='SOURCE_IP'))
     self.assertEqual(
         sample_configs.sample_base_expected_config(backend=be),
         rendered_obj)
예제 #32
0
 def test_render_template_disabled_member(self):
     be = ("backend sample_pool_id_1\n"
           "    mode http\n"
           "    balance roundrobin\n"
           "    cookie SRV insert indirect nocache\n"
           "    fullconn {maxconn}\n"
           "    option allbackups\n"
           "    timeout connect 5000\n"
           "    timeout server 50000\n"
           "    server sample_member_id_1 10.0.0.99:82 weight 13 "
           "cookie sample_member_id_1\n"
           "    server sample_member_id_2 10.0.0.98:82 weight 13 "
           "cookie sample_member_id_2 disabled\n\n").format(
         maxconn=constants.HAPROXY_MAX_MAXCONN)
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(proto='HTTP', monitor=False,
                                              disabled_member=True))
     self.assertEqual(sample_configs.sample_base_expected_config(
         backend=be), rendered_obj)
예제 #33
0
 def test_render_template_appcookie_persistence(self):
     be = ("backend sample_pool_id_1\n"
           "    mode http\n"
           "    balance roundrobin\n"
           "    stick-table type string len 64 size 10k\n"
           "    stick store-response res.cook(JSESSIONID)\n"
           "    stick match req.cook(JSESSIONID)\n"
           "    timeout check 31\n"
           "    option httpchk GET /index.html\n"
           "    http-check expect rstatus 418\n"
           "    server sample_member_id_1 10.0.0.99:82 "
           "weight 13 check inter 30s fall 3 rise 2\n"
           "    server sample_member_id_2 10.0.0.98:82 "
           "weight 13 check inter 30s fall 3 rise 2\n\n")
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(
             persistence_type='APP_COOKIE',
             persistence_cookie='JSESSIONID'))
     self.assertEqual(
         sample_configs.sample_base_expected_config(backend=be),
         rendered_obj)
예제 #34
0
 def test_render_template_pool_proxy_protocol(self):
     be = ("backend sample_pool_id_1\n"
           "    mode http\n"
           "    http-reuse safe\n"
           "    balance roundrobin\n"
           "    cookie SRV insert indirect nocache\n"
           "    timeout check 31s\n"
           "    fullconn {maxconn}\n"
           "    option allbackups\n"
           "    timeout connect 5000\n"
           "    timeout server 50000\n"
           "    server sample_member_id_1 10.0.0.99:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "cookie sample_member_id_1 send-proxy\n"
           "    server sample_member_id_2 10.0.0.98:82 "
           "weight 13 check inter 30s fall 3 rise 2 "
           "cookie sample_member_id_2 send-proxy\n\n").format(
               maxconn=constants.HAPROXY_MAX_MAXCONN)
     rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
         sample_configs.sample_amphora_tuple(),
         sample_configs.sample_listener_tuple(be_proto='PROXY'))
     self.assertEqual(
         sample_configs.sample_base_expected_config(backend=be),
         rendered_obj)
예제 #35
0
 def test_transform_amphora(self):
     in_amphora = sample_configs.sample_amphora_tuple()
     ret = self.jinja_cfg._transform_amphora(in_amphora)
     self.assertEqual(sample_configs.RET_AMPHORA, ret)
예제 #36
0
 def test_transform_loadbalancer_with_l7(self):
     in_amphora = sample_configs.sample_amphora_tuple()
     in_listener = sample_configs.sample_listener_tuple(l7=True)
     ret = self.jinja_cfg._transform_loadbalancer(
         in_amphora, in_listener.load_balancer, in_listener, None)
     self.assertEqual(sample_configs.RET_LB_L7, ret)
예제 #37
0
    def test_parse_haproxy_config(self):
        # template_tls
        tls_tupe = sample_configs.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.sample_amphora_tuple(),
            sample_configs.sample_listener_tuple(proto='TERMINATED_HTTPS',
                                                 tls=True,
                                                 sni=True), tls_tupe)

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

        res = self.test_listener._parse_haproxy_file(LISTENER_ID1)
        self.assertEqual('TERMINATED_HTTPS', res['mode'])
        self.assertEqual('/var/lib/octavia/sample_listener_id_1.sock',
                         res['stats_socket'])
        self.assertEqual(
            '/var/lib/octavia/certs/sample_listener_id_1/tls_container_id.pem',
            res['ssl_crt'])

        # render_template_tls_no_sni
        rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
            sample_configs.sample_amphora_tuple(),
            sample_configs.sample_listener_tuple(proto='TERMINATED_HTTPS',
                                                 tls=True),
            tls_cert=sample_configs.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 = self.test_listener._parse_haproxy_file(LISTENER_ID1)
        self.assertEqual('TERMINATED_HTTPS', res['mode'])
        self.assertEqual(BASE_AMP_PATH + '/sample_listener_id_1.sock',
                         res['stats_socket'])
        self.assertEqual(
            BASE_CRT_PATH + '/sample_listener_id_1/tls_container_id.pem',
            res['ssl_crt'])

        # render_template_http
        rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
            sample_configs.sample_amphora_tuple(),
            sample_configs.sample_listener_tuple())

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

        res = self.test_listener._parse_haproxy_file(LISTENER_ID1)
        self.assertEqual('HTTP', res['mode'])
        self.assertEqual(BASE_AMP_PATH + '/sample_listener_id_1.sock',
                         res['stats_socket'])
        self.assertIsNone(res['ssl_crt'])

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

        res = self.test_listener._parse_haproxy_file(LISTENER_ID1)
        self.assertEqual('TCP', res['mode'])
        self.assertEqual(BASE_AMP_PATH + '/sample_listener_id_1.sock',
                         res['stats_socket'])
        self.assertIsNone(res['ssl_crt'])

        # Bogus format
        self.useFixture(test_utils.OpenFixture(path, 'Bogus'))
        try:
            res = self.test_listener._parse_haproxy_file(LISTENER_ID1)
            self.fail("No Exception?")
        except listener.ParsingError:
            pass
예제 #38
0
 def test_transform_amphora(self):
     in_amphora = sample_configs.sample_amphora_tuple()
     ret = self.jinja_cfg._transform_amphora(in_amphora)
     self.assertEqual(sample_configs.RET_AMPHORA, ret)
예제 #39
0
    def test_parse_haproxy_config(self):
        # template_tls
        tls_tupe = sample_configs.sample_tls_container_tuple(
            certificate='imaCert1', private_key='imaPrivateKey1',
            primary_cn='FakeCN')
        rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
            sample_configs.sample_amphora_tuple(),
            sample_configs.sample_listener_tuple(proto='TERMINATED_HTTPS',
                                                 tls=True, sni=True),
            tls_tupe)

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

        res = listener._parse_haproxy_file(LISTENER_ID1)
        self.assertEqual('TERMINATED_HTTPS', res['mode'])
        self.assertEqual('/var/lib/octavia/sample_listener_id_1.sock',
                         res['stats_socket'])
        self.assertEqual(
            '/var/lib/octavia/certs/sample_listener_id_1/FakeCN.pem',
            res['ssl_crt'])

        # render_template_tls_no_sni
        rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
            sample_configs.sample_amphora_tuple(),
            sample_configs.sample_listener_tuple(
                proto='TERMINATED_HTTPS', tls=True),
            tls_cert=sample_configs.sample_tls_container_tuple(
                certificate='ImAalsdkfjCert',
                private_key='ImAsdlfksdjPrivateKey',
                primary_cn="FakeCN"))

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

        res = listener._parse_haproxy_file(LISTENER_ID1)
        self.assertEqual('TERMINATED_HTTPS', res['mode'])
        self.assertEqual(BASE_AMP_PATH + '/sample_listener_id_1.sock',
                         res['stats_socket'])
        self.assertEqual(
            BASE_CRT_PATH + '/sample_listener_id_1/FakeCN.pem',
            res['ssl_crt'])

        # render_template_http
        rendered_obj = self.jinja_cfg.render_loadbalancer_obj(
            sample_configs.sample_amphora_tuple(),
            sample_configs.sample_listener_tuple())

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

        res = listener._parse_haproxy_file(LISTENER_ID1)
        self.assertEqual('HTTP', res['mode'])
        self.assertEqual(BASE_AMP_PATH + '/sample_listener_id_1.sock',
                         res['stats_socket'])
        self.assertIsNone(res['ssl_crt'])

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

        res = listener._parse_haproxy_file(LISTENER_ID1)
        self.assertEqual('TCP', res['mode'])
        self.assertEqual(BASE_AMP_PATH + '/sample_listener_id_1.sock',
                         res['stats_socket'])
        self.assertIsNone(res['ssl_crt'])

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