Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
    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())
Ejemplo n.º 7
0
    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)
Ejemplo n.º 8
0
    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)