def test_export_mlab_host_ips(self): # Setup synthetic user, site, and experiment configuration data. experiments = [ model.Slice(name='abc_bar', index=1, attrs=self.attrs, users=self.users, use_initscript=True, ipv6='all') ] # Assign experiments to nodes. for hostname, node in self.sites[0]['nodes'].iteritems(): experiments[0].add_node_address(node) output = StringIO.StringIO() expected_results = [ 'mlab1.abc01.measurement-lab.org,192.168.1.9,2400:1002:4008::9', 'mlab2.abc01.measurement-lab.org,192.168.1.22,2400:1002:4008::22', 'mlab3.abc01.measurement-lab.org,192.168.1.35,2400:1002:4008::35', ('bar.abc.mlab1.abc01.measurement-lab.org,192.168.1.11,' '2400:1002:4008::11'), ('bar.abc.mlab2.abc01.measurement-lab.org,192.168.1.24,' '2400:1002:4008::24'), ('bar.abc.mlab3.abc01.measurement-lab.org,192.168.1.37,' '2400:1002:4008::37'), ] mlabconfig.export_mlab_host_ips(output, self.sites, experiments) results = output.getvalue().split() self.assertItemsEqual(results, expected_results)
def test_export_experiment_records(self): output = StringIO.StringIO() experiments = [ model.Slice(name='abc_bar', index=1, attrs=self.attrs, users=self.users, use_initscript=True, ipv6='all') ] expected_results = [ mlabconfig.format_a_record('bar.abc.abc01', '192.168.1.11'), mlabconfig.format_a_record('bar.abc.mlab2.abc01', '192.168.1.24'), mlabconfig.format_a_record('bar.abcv4.abc01', '192.168.1.11'), mlabconfig.format_a_record('bar.abc.mlab2v4.abc01', '192.168.1.24'), mlabconfig.format_aaaa_record('bar.abc.abc01', '2400:1002:4008::11'), mlabconfig.format_aaaa_record('bar.abc.abc01', '2400:1002:4008::37'), mlabconfig.format_aaaa_record('bar.abc.mlab3.abc01', '2400:1002:4008::37'), mlabconfig.format_aaaa_record('bar.abcv6.abc01', '2400:1002:4008::11'), mlabconfig.format_aaaa_record('bar.abc.mlab1v6.abc01', '2400:1002:4008::11'), ] mlabconfig.export_experiment_records(output, self.sites, experiments) results = output.getvalue().split('\n') self.assertContainsItems(results, expected_results)
def test_export_scraper_kubernetes_config(self): stdout = StringIO.StringIO() experiments = [ model.Slice(name='abc_foo', index=1, attrs=self.attrs, users=self.users, use_initscript=True, rsync_modules=['test1', 'test2'], ipv6='all') ] for hostname, node in self.sites[0]['nodes'].iteritems(): experiments[0].add_node_address(node) template = textwrap.dedent("""\ host: {rsync_host} site: {site} node: {node} experiment: {experiment} module: {rsync_module} """) mlabconfig.export_scraper_kubernetes_config(stdout, experiments, template) expected_output = textwrap.dedent("""\ host: foo.abc.mlab2.abc01.measurement-lab.org site: abc01 node: mlab2 experiment: abc-foo module: test1 --- host: foo.abc.mlab2.abc01.measurement-lab.org site: abc01 node: mlab2 experiment: abc-foo module: test2 --- host: foo.abc.mlab1.abc01.measurement-lab.org site: abc01 node: mlab1 experiment: abc-foo module: test1 --- host: foo.abc.mlab1.abc01.measurement-lab.org site: abc01 node: mlab1 experiment: abc-foo module: test2 --- host: foo.abc.mlab3.abc01.measurement-lab.org site: abc01 node: mlab3 experiment: abc-foo module: test1 --- host: foo.abc.mlab3.abc01.measurement-lab.org site: abc01 node: mlab3 experiment: abc-foo module: test2 """) self.assertEqual(stdout.getvalue(), expected_output)
def test_select_prometheus_experiment_targets_includes_selected(self): # Setup synthetic user, site, and experiment configuration data. experiments = [ model.Slice(name='abc_bar', index=1, attrs=self.attrs, users=self.users, use_initscript=True, ipv6='all') ] # Assign experiments to nodes. for hostname, node in self.sites[0]['nodes'].iteritems(): experiments[0].add_node_address(node) output = StringIO.StringIO() expected_targets = [{ 'labels': { 'machine': 'mlab2.abc01.measurement-lab.org', 'experiment': 'bar.abc' }, 'targets': ['bar.abc.mlab2.abc01.measurement-lab.org:9090'] }] actual_targets = mlabconfig.select_prometheus_experiment_targets( experiments, "bar.abc.mlab2.*", '{{hostname}}:9090', {}, False) self.assertEqual(len(actual_targets), 1) self.assertItemsEqual(expected_targets, actual_targets)
def test_select_prometheus_experiment_targets_flattens_names(self): # Setup synthetic user, site, and experiment configuration data. experiments = [ model.Slice(name='abc_bar', index=1, attrs=self.attrs, users=self.users, use_initscript=True, ipv6='all') ] # Assign experiments to nodes. for node in self.sites[0]['nodes'].values(): experiments[0].add_node_address(node) expected_targets = [{ 'labels': { 'machine': 'mlab2.abc01.measurement-lab.org', 'experiment': 'bar.abc' }, 'targets': ['bar-abc-mlab2-abc01.measurement-lab.org:9090'] }] actual_targets = legacyconfig.select_prometheus_experiment_targets( experiments, "bar.abc.mlab2.*", ['{{hostname}}:9090'], {}, False, True, '') self.assertEqual(len(actual_targets), 1) self.assertItemsEqual(expected_targets, actual_targets)
def test_export_scraper_kubernetes_config_subset(self, mock_open): virtual_output_files = {} def create_new_fake_file(*args): virtual_output_files[args[0]] = StringIO.StringIO() return OpenStringIO(virtual_output_files[args[0]]) mock_open.side_effect = create_new_fake_file experiments = [ model.Slice(name='abc_foo', index=1, attrs=self.attrs, users=self.users, use_initscript=True, rsync_modules=['test1', 'test2'], ipv6='all') ] for hostname, node in self.sites[0]['nodes'].iteritems(): experiments[0].add_node_address(node) output_template = textwrap.dedent("""\ machine: {{machine}} host: {{rsync_host}} site: {{site}} node: {{node}} experiment: {{experiment}} module: {{rsync_module}} """) filename_template = ('deployment/{{site}}-{{node}}-' '{{experiment_safe}}-{{rsync_module}}.yml') mlabconfig.export_scraper_kubernetes_config(filename_template, experiments, output_template, ".*mlab3.*") expected_output = { 'deployment/abc01-mlab3-foo-abc-test1.yml': textwrap.dedent("""\ machine: mlab3.abc01.measurement-lab.org host: foo.abc.mlab3.abc01.measurement-lab.org site: abc01 node: mlab3 experiment: foo.abc module: test1"""), 'deployment/abc01-mlab3-foo-abc-test2.yml': textwrap.dedent("""\ machine: mlab3.abc01.measurement-lab.org host: foo.abc.mlab3.abc01.measurement-lab.org site: abc01 node: mlab3 experiment: foo.abc module: test2""") } self.assertEqual(set(expected_output.keys()), set(virtual_output_files.keys())) for fname, contents in expected_output.items(): self.assertIn(fname, virtual_output_files) self.assertEqual(contents.strip(), virtual_output_files[fname].getvalue().strip())
def test_export_mlab_host_ips(self): # Setup synthetic user, site, and experiment configuration data. experiments = [ model.Slice(name='abc_bar', index=1, attrs=self.attrs, users=self.users, use_initscript=True, ipv6='all') ] # Assign experiments to nodes. for node in self.sites[0]['nodes'].values(): experiments[0].add_node_address(node) expected_results = [ { 'hostname': 'mlab1.abc01.measurement-lab.org', 'ipv4': '192.168.1.9', 'ipv6': '2400:1002:4008::9' }, { 'hostname': 'mlab2.abc01.measurement-lab.org', 'ipv4': '192.168.1.22', 'ipv6': '2400:1002:4008::22' }, { 'hostname': 'mlab3.abc01.measurement-lab.org', 'ipv4': '192.168.1.35', 'ipv6': '2400:1002:4008::35' }, { 'hostname': 'bar.abc.mlab1.abc01.measurement-lab.org', 'ipv4': '192.168.1.11', 'ipv6': '2400:1002:4008::11' }, { 'hostname': 'bar.abc.mlab2.abc01.measurement-lab.org', 'ipv4': '192.168.1.24', 'ipv6': '2400:1002:4008::24' }, { 'hostname': 'bar.abc.mlab3.abc01.measurement-lab.org', 'ipv4': '192.168.1.37', 'ipv6': '2400:1002:4008::37' }, ] results = legacyconfig.export_mlab_host_ips(self.sites, experiments) self.assertItemsEqual(results, expected_results)
def test_export_experiment_records_flattened(self): output = StringIO.StringIO() experiments = [ model.Slice(name='abc_foo', index=1, attrs=self.attrs, users=self.users, use_initscript=True, ipv6='all') ] expected_results = [ legacyconfig.format_a_record('foo-abc-mlab2-abc01', '192.168.1.24'), legacyconfig.format_a_record('foo-abc-mlab2v4-abc01', '192.168.1.24'), legacyconfig.format_aaaa_record('foo-abc-mlab3-abc01', '2400:1002:4008::37'), legacyconfig.format_aaaa_record('foo-abc-mlab1v6-abc01', '2400:1002:4008::11'), ] unexpected_results = [ legacyconfig.format_a_record('foo-abc-abc01', '192.168.1.24'), legacyconfig.format_a_record('foo-abcv4-abc01', '192.168.1.24'), legacyconfig.format_aaaa_record('foo-abc-abc01', '2400:1002:4008::37'), legacyconfig.format_aaaa_record('foo-abcv6-abc01', '2400:1002:4008::11'), ] legacyconfig.SSL_EXPERIMENTS = ['abc_foo'] legacyconfig.export_experiment_records(output, self.sites, experiments) results = output.getvalue().split('\n') # We are using custom functions here because of the size of the results # list. The results list will contain 50+ items. Using the built-in # assertItemsEqual() would require creating a very large, unwieldy # expected_results list. Using the custom functions allows us to not # have to verify the entirety of results, but simply assert that certain # key items are in the results. This is likely sufficient because most # of the items in results are redundant in form. self.assertContainsItems(results, expected_results) self.assertDoesNotContainsItems(results, unexpected_results)