Beispiel #1
0
def RunRecipe(test_data):
  stream = annotator.StructuredAnnotationStream(stream=open(os.devnull, 'w'))
  recipe_config_types.ResetTostringFns()
  # TODO(iannucci): Only pass test_data once.
  result = annotated_run.run_steps(stream, test_data.properties,
                                   test_data.properties, test_data)
  return expect_tests.Result([s.step for s in result.steps_ran.itervalues()])
Beispiel #2
0
def RunTest(test_name):
    ret = []
    clock = TestClock()
    origin = TestRepo('origin', clock)
    local = TestRepo('local', clock, origin.repo_path)

    base_repo_path = tempfile.mkdtemp(".gsubtreed.remote_repos")

    enabled_paths = [
        'mirrored_path/subpath', 'mirrored_path', 'exception/path'
    ]
    path_map_exceptions = {'exception/path': 'cool_path'}
    cref = TestConfigRef(origin)
    cref.update(enabled_paths=enabled_paths,
                base_url='file://' + base_repo_path,
                path_map_exceptions=path_map_exceptions)

    mirrors = {}
    for path in enabled_paths + ['extra_mirror']:
        path_in_mirror = path_map_exceptions.get(path, path)
        full_path = os.path.join(base_repo_path, path_in_mirror)
        try:
            os.makedirs(full_path)
        except OSError:
            pass
        mirrors[path_in_mirror] = TestRepo('mirror(%s)' % path_in_mirror,
                                           clock, 'fake')
        mirrors[path_in_mirror]._repo_path = full_path
        mirrors[path_in_mirror].run('init', '--bare')

    class LogFormatter(logging.Formatter):
        def format(self, record):
            s = super(LogFormatter, self).format(record)
            return s.replace(base_repo_path, '[TMPDIR]')

    def checkpoint(message, include_committer=False, include_config=False):
        repos = collections.OrderedDict()
        repos['origin'] = origin.snap(include_committer, include_config)
        for _, mirror in sorted(mirrors.items()):
            repos[mirror.short_name] = mirror.snap(include_committer,
                                                   include_config)
        ret.append([message, repos])

    def run():
        stdout = sys.stdout
        stderr = sys.stderr

        logout = StringIO()
        root_logger = logging.getLogger()
        shandler = logging.StreamHandler(logout)
        shandler.setFormatter(LogFormatter('%(levelname)s: %(message)s'))
        root_logger.addHandler(shandler)
        shandler.setLevel(logging.INFO)

        # Run pusher threads sequentially and deterministically.
        gsubtreed.Pusher.FAKE_THREADING = True

        success = False
        processed = {}
        try:
            with open(os.devnull, 'w') as dn:
                # TODO(iannucci): Let expect_tests absorb stdio
                sys.stderr = sys.stdout = dn
                local.reify()
                success, processed = gsubtreed.inner_loop(local, cref)
        except Exception:  # pragma: no cover
            ret.append(traceback.format_exc().splitlines())
        finally:
            gsubtreed.Pusher.FAKE_THREADING = False

            sys.stdout = stdout
            sys.stderr = stderr

            root_logger.removeHandler(shandler)
            ret.append({'log output': logout.getvalue().splitlines()})

            ret.append({
                'inner_loop success': success,
                'processed': processed,
            })

    gsubtreed_test_definitions.GSUBTREED_TESTS[test_name](
        origin=origin,
        run=run,
        checkpoint=checkpoint,
        mirrors=mirrors,
        config=cref,
        local_origin_repo=local)

    return expect_tests.Result(ret)
Beispiel #3
0
def RunTest(test_name):
    ret = []
    clock = TestClock()
    origin = TestRepo('origin', clock)
    local = TestRepo('local', clock, origin.repo_path)

    cref = TestConfigRef(origin)
    cref.update(enabled_refglobs=['refs/heads/*'], interval=0)

    def checkpoint(message, include_committer=False, include_config=False):
        ret.append([
            message, {
                'origin': origin.snap(include_committer, include_config)
            }
        ])

    def run(include_log=True):
        stdout = sys.stdout
        stderr = sys.stderr

        if include_log:
            logout = StringIO()
            root_logger = logging.getLogger()
            log_level = root_logger.getEffectiveLevel()
            shandler = logging.StreamHandler(logout)
            shandler.setFormatter(
                logging.Formatter('%(levelname)s: %(message)s'))
            root_logger.addHandler(shandler)
            root_logger.setLevel(logging.INFO)

        success = False
        synthesized_commits = []
        try:
            sys.stderr = sys.stdout = open(os.devnull, 'w')
            local.reify()
            success, synthesized_commits = gnumbd.inner_loop(
                local, cref, clock)
        except Exception:  # pragma: no cover
            import traceback
            ret.append(traceback.format_exc().splitlines())
        finally:
            sys.stdout = stdout
            sys.stderr = stderr

            if include_log:
                root_logger.removeHandler(shandler)
                root_logger.setLevel(log_level)
                ret.append({'log output': logout.getvalue().splitlines()})

            ret.append({
                'inner_loop success':
                success,
                'synthesized_commits': [{
                    'commit':
                    c.hsh,
                    'footers':
                    infra_types.thaw(c.data.footers),
                } for c in synthesized_commits],
            })

    gnumbd_test_definitions.GNUMBD_TESTS[test_name](origin, local, cref, run,
                                                    checkpoint)

    return expect_tests.Result(ret)
Beispiel #4
0
def RunTest(test_name):
  context = Context()
  gsubmodd_test_definitions.GSUBMODD_TESTS[test_name](context)
  return expect_tests.Result(context.actual_results)