Beispiel #1
0
    def test_should_decorate_directors_tag_with_enabled_directors_in_current_dc(
            self):
        vcl_tag_builder_for_dc2 = VclTagBuilder(self.varnish,
                                                VclRendererInput())
        vcl_tag_builder_for_dc1 = VclTagBuilder(self.varnish_dc1,
                                                VclRendererInput())

        expected_dc2_directors = [
            'first_service', 'second_service', 'third_service',
            'fifth_director_only_cluster1_siteA_test',
            'fourth_director_which_has_a_ridiculously_long_name'
        ]
        expected_dc1_directors = [
            'second_service', 'third_service',
            'fifth_director_only_cluster1_siteA_test',
            'fourth_director_which_has_a_ridiculously_long_name'
        ]

        self.assert_vcl_tag_list_contains_directors_list(
            vcl_tag_builder_for_dc2.get_expanded_tags('DIRECTORS')
            [0].parameters['vcl_directors'], expected_dc2_directors)

        self.assert_vcl_tag_list_contains_directors_list(
            vcl_tag_builder_for_dc1.get_expanded_tags('DIRECTORS')
            [0].parameters['vcl_directors'], expected_dc1_directors)
Beispiel #2
0
 def test_tag_should_be_expanded_from_database(self):
     tag_expander = VclTagExpander('ACL',
                                   'ACL',
                                   VclRendererInput(),
                                   can_overwrite=True)
     assert_equals('## ACL custom content ##',
                   tag_expander.expand(self.vcl_template3))
Beispiel #3
0
    def test_should_comment_unused_tags(self):
        vcl_renderer = VclRenderer()
        vcl_template_with_unused_director = VclTemplate.objects.create(
            name='template-with-unused-director',
            content='<DIRECTOR_first_service/>\n<DIRECTOR_disabled_service/>',
            version='4.0')
        expected_content = '''\
## START director first_service ###
probe first_service_test_probe_1 {
    .url = "/status";
    .expected_response = 200;
    .interval = 3s;
    .timeout = 1.0s;
    .window = 5;
    .threshold = 3;
}

backend first_service_1_dc2_1_1_80 {
    .host = "127.0.1.1";
    .port = "80";
    .max_connections = 1;
    .connect_timeout = 0.50s;
    .first_byte_timeout = 0.10s;
    .between_bytes_timeout = 1.00s;
    .probe = first_service_test_probe_1;
}

## END director first_service ###
#<DIRECTOR_disabled_service/>\
'''

        self.varnish.template = vcl_template_with_unused_director
        vcl = vcl_renderer.render(self.varnish, '1', VclRendererInput())

        assert_equals(expected_content, vcl.content)
Beispiel #4
0
    def test_should_prepare_default_vcl_version4_with_canary_backend(self):
        vcl_renderer = VclRenderer()
        vcl = vcl_renderer.render(self.varnish4_canary, '1',
                                  VclRendererInput())

        assert_equals('new-v4-1', vcl.name[:-10])
        self._assert_vcl_content('expected-vcl-4.0-canary.vcl', vcl.content)
Beispiel #5
0
    def test_should_prepare_default_vcl_version5_with_mesh_service(self):
        vcl_renderer = VclRenderer()
        vcl = vcl_renderer.render(self.varnish5_with_mesh_service, '1',
                                  VclRendererInput())

        assert_equals('new-v4-1', vcl.name[:-10])
        self._assert_vcl_content('expected-vcl-4.0-with-mesh_service.vcl',
                                 vcl.content)
Beispiel #6
0
    def test_should_prepare_default_vcl_version4(self):
        vcl_renderer = VclRenderer()
        vcl = vcl_renderer.render(self.varnish4, '1', VclRendererInput())
        with open(
                os.path.join(os.path.dirname(__file__)) + os.sep +
                'expected-vcl-4.0.vcl', 'r') as f:
            expected_content = f.read()

        assert_equals('new-v4-1', vcl.name[:-10])
        assert_equals(expected_content, vcl.content)
Beispiel #7
0
 def test_should_build_tag_names_based_on_directors_and_dc(self):
     vcl_tag_builder = VclTagBuilder(self.varnish, VclRendererInput())
     tags = vcl_tag_builder.get_expanded_tags(
         'BACKEND_DEFINITION_LIST_{DIRECTOR}_{DC}')
     self.assert_vcl_tag(tags[0], 'third_service', 'dc1')
     self.assert_vcl_tag(
         tags[1], 'fourth_director_which_has_a_ridiculously_long_name',
         'dc1')
     self.assert_vcl_tag(tags[2], 'first_service', 'dc2')
     self.assert_vcl_tag(tags[3], 'second_service', 'dc2')
     self.assert_vcl_tag(tags[4], 'second_service', 'dc1')
     self.assert_vcl_tag(tags[5], 'fifth_director_only_cluster1_siteA_test',
                         'dc1')
Beispiel #8
0
    def test_should_prepare_default_vcl_version5_with_mesh_service_with_attached_backend(
            self):
        vcl_renderer = VclRenderer()
        BackendFactory.create(
            address='127.11.2.10',
            dc=self.dc2,
            director=self.active_active_with_mesh_service_support)
        vcl = vcl_renderer.render(self.varnish5_with_mesh_service, '1',
                                  VclRendererInput())

        assert_equals('new-v4-1', vcl.name[:-10])
        self._assert_vcl_content('expected-vcl-4.0-with-mesh_service.vcl',
                                 vcl.content)
Beispiel #9
0
 def test_should_distribute_backends(self):
     expected_distributed_backends = {
         1: {
             1: [self.backend_dc2_first],
             2: [self.backend_dc2_second]
         },
         2: {
             1: [self.backend_dc1_first],
             2: []
         }
     }
     vcl_renderer_input = VclRendererInput()
     assert_equals(expected_distributed_backends,
                   vcl_renderer_input.distributed_backends)
Beispiel #10
0
    def test_should_decorate_set_backend_tag_with_ordered_director_list_in_second_dc(
            self):
        active_active_director = 'second_service'
        expected_datacenters = ['dc1', 'dc2']

        vcl_tag_builder = VclTagBuilder(self.varnish_dc1, VclRendererInput())
        active_director_datacenters = []
        for tag in vcl_tag_builder.get_expanded_tags('SET_BACKEND_{DIRECTOR}'):
            if tag.parameters['director'].name == active_active_director:
                for vcl_director in tag.parameters['vcl_directors']:
                    active_director_datacenters.append(vcl_director.dc.symbol)
                break

        assert_list_equal(expected_datacenters, active_director_datacenters)
Beispiel #11
0
    def test_should_decorate_directors_tag_with_example_active_active_director(
            self):
        active_active_director = 'second_service'
        expected_datacenters = ['dc2', 'dc1']

        vcl_tag_builder = VclTagBuilder(self.varnish, VclRendererInput())

        active_director_datacenters = []
        for vcl_director in vcl_tag_builder.get_expanded_tags(
                'DIRECTORS')[0].parameters['vcl_directors']:
            if vcl_director.director.name == active_active_director:
                active_director_datacenters.append(vcl_director.dc.symbol)

        assert_list_equal(expected_datacenters, active_director_datacenters)
Beispiel #12
0
    def test_should_decorate_set_backend_tag_with_fallback_service_in_dc1(
            self):

        fallback_director = 'fifth_director_only_cluster1_siteA_test'
        expected_datacenters = ['dc1']

        vcl_tag_builder = VclTagBuilder(self.varnish, VclRendererInput())
        active_director_datacenters = []
        for tag in vcl_tag_builder.get_expanded_tags('SET_BACKEND_{DIRECTOR}'):
            if tag.parameters['director'].name == fallback_director:
                for vcl_director in tag.parameters['vcl_directors']:
                    active_director_datacenters.append(vcl_director.dc.symbol)
                break

        assert_list_equal(expected_datacenters, active_director_datacenters)
Beispiel #13
0
    def test_should_replace_empty_or_disabled_director_with_information_in_error_response_varnish4(
            self):
        vcl_renderer = VclRenderer()
        vcl_template_with_unused_director = VclTemplate.objects.create(
            name='template-with-unused-director',
            content='<SET_BACKEND_ningth_director_without_backends/>',
            version='4.0')
        expected_content = '''\
return(synth(404, "<!--Director ningth_director_without_backends has no backends or is disabled-->"));\
'''

        self.varnish.template = vcl_template_with_unused_director
        vcl = vcl_renderer.render(self.varnish, '1', VclRendererInput())

        assert_equals(expected_content, vcl.content)
Beispiel #14
0
    def test_tag_should_be_expanded_from_file_template(self):
        tag_expander = VclTagExpander('VCL', 'VCL', VclRendererInput())
        expected_v4 = '''\
# Marker to tell the VCL compiler that this VCL has been adapted to the
# new 4.0 format.
vcl 4.0;

import std;
import directors;

<HEADERS/>
<ACL/>
<DIRECTORS/>
<VAAS_STATUS/>
<RECV/>
<OTHER_FUNCTIONS/>
<EMPTY_DIRECTOR_SYNTH/>'''
        assert_equals(expected_v4, tag_expander.expand(self.vcl_template4))
Beispiel #15
0
    def render_vcl_for_servers(self, vcl_name, servers):
        vcl_list = []

        start = time.time()
        render_input = VclRendererInput()
        self.logger.debug("vcl's prepare input data: %f" % (time.time() - start))

        start = time.time()
        with ThreadPoolExecutor(max_workers=self.max_workers) as executor:
            future_results = []
            for server in servers:
                future_results.append(
                    tuple([server, executor.submit(self.renderer.render, server, vcl_name, render_input)])
                )
            for server, future_result in future_results:
                vcl_list.append(tuple([server, future_result.result()]))

        self.logger.debug("vcl's render time: %f" % (time.time() - start))

        return vcl_list
Beispiel #16
0
    def test_should_sort_directors_by_router_priority(self):
        expected_directors_order = [self.second_director, self.first_director]

        vcl_renderer_input = VclRendererInput()
        assert_equals(expected_directors_order, vcl_renderer_input.directors)