Esempio n. 1
0
 def test_runs_bootstrap_when_forced(self, lb):
     opts = self.opts._replace(logdog_force=True)
     rv = annotated_run._exec_recipe(self.rt, opts, self.basedir, self.tdir,
                                     self._config(), self.properties)
     self.assertEqual(rv, 0)
     lb.assert_called_once()
     annotated_run._run_command.assert_called_once()
 def test_forwards_error_code(self, lb):
   opts = self.opts._replace(
       logdog_force=True)
   rv = annotated_run._exec_recipe(self.rt, opts, self.basedir, self.tdir,
                                   self._config(), self.properties)
   self.assertEqual(rv, 2)
   lb.assert_called_once()
 def test_runs_bootstrap_when_forced(self, lb):
   opts = self.opts._replace(logdog_force=True)
   rv = annotated_run._exec_recipe(self.rt, opts, self.basedir, self.tdir,
                                   self._config(), self.properties)
   self.assertEqual(rv, 0)
   lb.assert_called_once()
   annotated_run._run_command.assert_called_once()
    def test_runs_directly_if_logdog_error(self, bs_result, bootstrap):
        bootstrap.return_value = logdog_bootstrap.BootstrapState(
            ['logdog_bootstrap'] + self.recipe_args, '/path/to/result.json')
        bs_result.side_effect = logdog_bootstrap.BootstrapError()

        # Return a different error code depending on whether we're bootstrapping so
        # we can assert that specifically the non-bootstrapped error code is the one
        # that is returned.
        def get_error_code(args, **_kw):
            if len(args) > 0 and args[0] == 'logdog_bootstrap':
                return (1, '')
            return (2, '')

        annotated_run._run_command.side_effect = get_error_code

        rv = annotated_run._exec_recipe(self.rt, self.opts, self.basedir,
                                        self.tdir, self.properties)
        self.assertEqual(rv, 2)

        bootstrap.assert_called_once()
        bs_result.assert_called_once()
        annotated_run._run_command.assert_has_calls([
            mock.call(['logdog_bootstrap'] + self.recipe_args, dry_run=False),
            mock.call(self.recipe_args, dry_run=False),
        ])
    def test_exec_with_logdog_bootstrap_fail_raises(self, bootstrap):
        bootstrap.side_effect = logdog_bootstrap.BootstrapError(
            'Bootstrap failed')

        with self.assertRaises(logdog_bootstrap.BootstrapError):
            _ = annotated_run._exec_recipe(self.rt, self.opts, self.stream,
                                           self.basedir, self.tdir,
                                           self.properties)
Esempio n. 6
0
    def test_exec_with_whitelist_builder_runs_logdog(self, service_account,
                                                     isfile):
        self.properties['buildername'] = 'yesbuilder'

        isfile.return_value = True
        butler_path = self._bp('.recipe_logdog_cipd', 'logdog_butler')
        annotee_path = self._bp('.recipe_logdog_cipd', 'logdog_annotee')
        service_account.return_value = 'creds.json'
        annotated_run._run_command.return_value = (0, '')

        self._patch(mock.patch('tempfile.mkdtemp', return_value='foo'))
        config = self._config()
        rv = annotated_run._exec_recipe(self.rt, self.opts, self.basedir,
                                        self.tdir, config, self.properties)
        self.assertEqual(rv, 0)

        streamserver_uri = 'unix:%s' % (os.path.join('foo', 'butler.sock'), )
        service_account.assert_called_once_with(
            self.opts, config.logdog_platform.credential_path)
        annotated_run._run_command.assert_called_with([
            butler_path,
            '-log-level',
            'warning',
            '-prefix',
            'bb/master.some/yesbuilder/1337',
            '-output',
            'pubsub,topic="projects/luci-logdog/topics/logs"',
            '-service-account-json',
            'creds.json',
            '-output-max-buffer-age',
            '15s',
            'run',
            '-stdout',
            'tee=stdout',
            '-stderr',
            'tee=stderr',
            '-streamserver-uri',
            streamserver_uri,
            '--',
            annotee_path,
            '-log-level',
            'warning',
            '-butler-stream-server',
            streamserver_uri,
            '-logdog-host',
            'luci-logdog',
            '-annotate',
            'tee',
            '-name-base',
            'recipes',
            '-print-summary',
            '-tee',
            '-json-args-path',
            self._tp('logdog_annotee_cmd.json'),
        ],
                                                      dry_run=False)
        self._assertRecipeProperties(self.properties)
        self._assertAnnoteeCommand(self.recipe_args)
    def test_runs_directly_if_bootstrap_fails(self, bootstrap):
        annotated_run._run_command.return_value = (123, '')

        rv = annotated_run._exec_recipe(self.rt, self.opts, self.basedir,
                                        self.tdir, self.properties)
        self.assertEqual(rv, 123)

        bootstrap.assert_called_once()
        annotated_run._run_command.assert_called_once_with(self.recipe_args,
                                                           dry_run=False)
  def test_runs_directly_if_bootstrap_fails(self, lb):
    annotated_run._run_command.return_value = (123, '')

    rv = annotated_run._exec_recipe(self.rt, self.opts, self.basedir, self.tdir,
                                    self._config(), self.properties)
    self.assertEqual(rv, 123)

    lb.assert_called_once()
    annotated_run._run_command.assert_called_once_with(self.recipe_args,
                                                       dry_run=False)
  def test_exec_successful(self):
    annotated_run._run_command.return_value = (0, '')

    rv = annotated_run._exec_recipe(self.rt, self.opts, self.basedir, self.tdir,
                                    self._config(), self.properties)
    self.assertEqual(rv, 0)
    self._assertRecipeProperties(self.properties)

    annotated_run._run_command.assert_called_once_with(self.recipe_args,
                                                       dry_run=False)
    def test_exec_successful(self):
        annotated_run._run_command.return_value = (0, '')

        rv = annotated_run._exec_recipe(self.rt, self.opts, self.basedir,
                                        self.tdir, self.properties)
        self.assertEqual(rv, 0)
        self._assertRecipeProperties(self.properties)

        annotated_run._run_command.assert_called_once_with(self.recipe_args,
                                                           dry_run=False)
    def test_exec_with_result_proto(self, bootstrap):
        bootstrap.side_effect = logdog_bootstrap.NotBootstrapped()
        annotated_run._get_engine_flags.return_value = {
            'use_result_proto': True,
        }
        annotated_run._run_command.return_value = (13, '')
        self._writeRecipeResult({})

        rv = annotated_run._exec_recipe(self.rt, self.opts, self.stream,
                                        self.basedir, self.tdir,
                                        self.properties)
        self.assertEqual(rv, 13)
    def test_exec_with_logdog_bootstrap(self, bs_result, bootstrap):
        bootstrap.return_value = logdog_bootstrap.BootstrapState(
            ['logdog_bootstrap'] + self.recipe_args, '/path/to/result.json')
        bootstrap.return_value.get_result.return_value = 13
        annotated_run._run_command.return_value = (13, '')

        rv = annotated_run._exec_recipe(self.rt, self.opts, self.basedir,
                                        self.tdir, self.properties)

        self.assertEqual(rv, 13)
        annotated_run._run_command.assert_called_once_with(
            ['logdog_bootstrap'] + self.recipe_args, dry_run=False)
        self._assertRecipeProperties(self.properties)
Esempio n. 13
0
  def test_runs_directly_if_logdog_error(self, service_account, cipd, isfile):
    self.properties['buildername'] = 'yesbuilder'

    # Test Windows builder this time.
    infra_platform.get.return_value = ('win', 64)

    isfile.return_value = True
    cipd.return_value = ('logdog_butler.exe', 'logdog_annotee.exe')
    service_account.return_value = 'creds.json'
    def error_for_logdog(args, **kw):
      if len(args) > 0 and args[0] == 'logdog_butler.exe':
        return (250, '')
      return (4, '')
    annotated_run._run_command.side_effect = error_for_logdog

    config = self._config()

    self._patch(mock.patch('tempfile.mkdtemp', return_value='foo'))
    rv = annotated_run._exec_recipe(self.rt, self.opts, self.basedir, self.tdir,
                                    config, self.properties)
    self.assertEqual(rv, 4)

    streamserver_uri = 'net.pipe:LUCILogDogButler'
    service_account.assert_called_once_with(
        self.opts, config.logdog_platform.credential_path)
    annotated_run._run_command.assert_has_calls([
        mock.call([
            'logdog_butler.exe',
            '-log-level', 'warning',
            '-prefix', 'bb/master.some/yesbuilder/1337',
            '-output', 'pubsub,topic="projects/luci-logdog/topics/logs"',
            '-service-account-json', 'creds.json',
            '-output-max-buffer-age', '15s',
            'run',
            '-stdout', 'tee=stdout',
            '-stderr', 'tee=stderr',
            '-streamserver-uri', streamserver_uri,
            '--',
            'logdog_annotee.exe',
                '-log-level', 'warning',
                '-butler-stream-server', streamserver_uri,
                '-logdog-host', 'luci-logdog',
                '-annotate', 'tee',
                '-name-base', 'recipes',
                '-print-summary',
                '-tee',
                '-json-args-path', self._tp('logdog_annotee_cmd.json'),
        ], dry_run=False),
        mock.call(self.recipe_args, dry_run=False),
    ])
Esempio n. 14
0
  def test_exec_with_whitelist_builder_runs_logdog(self, service_account,
                                                   isfile):
    self.properties['buildername'] = 'yesbuilder'

    isfile.return_value = True
    butler_path = self._bp('.recipe_logdog_cipd', 'logdog_butler')
    annotee_path = self._bp('.recipe_logdog_cipd', 'logdog_annotee')
    service_account.return_value = 'creds.json'
    annotated_run._run_command.return_value = (0, '')

    self._patch(mock.patch('tempfile.mkdtemp', return_value='foo'))
    config = self._config()
    rv = annotated_run._exec_recipe(self.rt, self.opts, self.basedir, self.tdir,
                                    config, self.properties)
    self.assertEqual(rv, 0)

    streamserver_uri = 'unix:%s' % (os.path.join('foo', 'butler.sock'),)
    service_account.assert_called_once_with(
        self.opts, config.logdog_platform.credential_path)
    annotated_run._run_command.assert_called_with(
        [butler_path,
            '-log-level', 'warning',
            '-prefix', 'bb/master.some/yesbuilder/1337',
            '-output', 'pubsub,topic="projects/luci-logdog/topics/logs"',
            '-service-account-json', 'creds.json',
            '-output-max-buffer-age', '15s',
            'run',
            '-stdout', 'tee=stdout',
            '-stderr', 'tee=stderr',
            '-streamserver-uri', streamserver_uri,
            '--',
            annotee_path,
                '-log-level', 'warning',
                '-butler-stream-server', streamserver_uri,
                '-logdog-host', 'luci-logdog',
                '-annotate', 'tee',
                '-name-base', 'recipes',
                '-print-summary',
                '-tee',
                '-json-args-path', self._tp('logdog_annotee_cmd.json'),
        ],
        dry_run=False)
    self._assertRecipeProperties(self.properties)
    self._assertAnnoteeCommand(self.recipe_args)
    def test_exec_with_logdog_bootstrap_logdog_only(self, bs_result,
                                                    bootstrap):
        cfg = self._default_namedtuple(logdog_bootstrap.Config)._replace(
            params=self._default_namedtuple(logdog_bootstrap.Params)._replace(
                project="project", ),
            prefix="prefix",
            host="example.com",
            logdog_only=True,
        )
        bootstrap.return_value = logdog_bootstrap.BootstrapState(
            cfg, ['logdog_bootstrap'] + self.recipe_args,
            '/path/to/result.json')
        bootstrap.return_value.get_result.return_value = 13
        annotated_run._run_command.return_value = (13, '')
        self._writeRecipeResult({})

        rv = annotated_run._exec_recipe(self.rt, self.opts, self.stream,
                                        self.basedir, self.tdir,
                                        self.properties)

        self.assertEqual(rv, 13)
        annotated_run._run_command.assert_called_once_with(
            ['logdog_bootstrap'] + self.recipe_args, dry_run=False)
        self._assertRecipeProperties(self.properties)

        self.assertEqual([
            l for l in self.stream_output.getvalue().splitlines() if l
        ], [
            '@@@SEED_STEP LogDog Bootstrap@@@',
            '@@@STEP_CURSOR LogDog Bootstrap@@@',
            '@@@STEP_STARTED@@@',
            '@@@SET_BUILD_PROPERTY@logdog_project@"project"@@@',
            '@@@SET_BUILD_PROPERTY@logdog_prefix@"prefix"@@@',
            ('@@@SET_BUILD_PROPERTY@log_location@'
             '"logdog://example.com/project/prefix/+/recipes/annotations"@@@'),
            '@@@STEP_CURSOR LogDog Bootstrap@@@',
            '@@@STEP_CLOSED@@@',
        ])
Esempio n. 16
0
 def test_forwards_error_code(self, lb):
     opts = self.opts._replace(logdog_force=True)
     rv = annotated_run._exec_recipe(self.rt, opts, self.basedir, self.tdir,
                                     self._config(), self.properties)
     self.assertEqual(rv, 2)
     lb.assert_called_once()
Esempio n. 17
0
    def test_runs_directly_if_logdog_error(self, service_account, cipd,
                                           isfile):
        self.properties['buildername'] = 'yesbuilder'

        # Test Windows builder this time.
        infra_platform.get.return_value = ('win', 64)

        isfile.return_value = True
        cipd.return_value = ('logdog_butler.exe', 'logdog_annotee.exe')
        service_account.return_value = 'creds.json'

        def error_for_logdog(args, **kw):
            if len(args) > 0 and args[0] == 'logdog_butler.exe':
                return (250, '')
            return (4, '')

        annotated_run._run_command.side_effect = error_for_logdog

        config = self._config()

        self._patch(mock.patch('tempfile.mkdtemp', return_value='foo'))
        rv = annotated_run._exec_recipe(self.rt, self.opts, self.basedir,
                                        self.tdir, config, self.properties)
        self.assertEqual(rv, 4)

        streamserver_uri = 'net.pipe:LUCILogDogButler'
        service_account.assert_called_once_with(
            self.opts, config.logdog_platform.credential_path)
        annotated_run._run_command.assert_has_calls([
            mock.call([
                'logdog_butler.exe',
                '-log-level',
                'warning',
                '-prefix',
                'bb/master.some/yesbuilder/1337',
                '-output',
                'pubsub,topic="projects/luci-logdog/topics/logs"',
                '-service-account-json',
                'creds.json',
                '-output-max-buffer-age',
                '15s',
                'run',
                '-stdout',
                'tee=stdout',
                '-stderr',
                'tee=stderr',
                '-streamserver-uri',
                streamserver_uri,
                '--',
                'logdog_annotee.exe',
                '-log-level',
                'warning',
                '-butler-stream-server',
                streamserver_uri,
                '-logdog-host',
                'luci-logdog',
                '-annotate',
                'tee',
                '-name-base',
                'recipes',
                '-print-summary',
                '-tee',
                '-json-args-path',
                self._tp('logdog_annotee_cmd.json'),
            ],
                      dry_run=False),
            mock.call(self.recipe_args, dry_run=False),
        ])