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)
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))
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)
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)
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)
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)
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')
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)
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)
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)
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)
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)
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)
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))
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
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)