Skip to content

Commit

Permalink
project tests: Also regen before building
Browse files Browse the repository at this point in the history
This actually caught a cached-dependency related bug for me that the
test-time regen did not. I also increased the ninja wait time to
1 second because that's actually how long you need to sleep to be
guaranteed that a change will be detected.

Must poke upstream about ninja-build/ninja#371
  • Loading branch information
nirbheek committed May 9, 2017
1 parent 41f51f5 commit 1570a90
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 12 deletions.
10 changes: 7 additions & 3 deletions run_project_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import re

from run_tests import get_backend_commands, get_backend_args_for_dir, Backend
from run_tests import ensure_backend_detects_changes


class BuildStep(Enum):
Expand Down Expand Up @@ -342,6 +343,10 @@ def _run_test(testdir, test_build_dir, install_dir, extra_args, compiler, backen
return TestResult('Test that should have failed succeeded', BuildStep.configure, stdo, stde, mesonlog, gen_time)
if returncode != 0:
return TestResult('Generating the build system failed.', BuildStep.configure, stdo, stde, mesonlog, gen_time)
# Touch the meson.build file to force a regenerate so we can test that
# regeneration works before a build is run.
ensure_backend_detects_changes(backend)
os.utime(os.path.join(testdir, 'meson.build'))
# Build with subprocess
dir_args = get_backend_args_for_dir(backend, test_build_dir)
build_start = time.time()
Expand All @@ -356,9 +361,8 @@ def _run_test(testdir, test_build_dir, install_dir, extra_args, compiler, backen
if pc.returncode != 0:
return TestResult('Compiling source code failed.', BuildStep.build, stdo, stde, mesonlog, gen_time, build_time)
# Touch the meson.build file to force a regenerate so we can test that
# regeneration works. We need to sleep for 0.2s because Ninja tracks mtimes
# at a low resolution: https://github.com/ninja-build/ninja/issues/371
time.sleep(0.2)
# regeneration works after a build is complete.
ensure_backend_detects_changes(backend)
os.utime(os.path.join(testdir, 'meson.build'))
test_start = time.time()
# Test in-process
Expand Down
8 changes: 8 additions & 0 deletions run_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

import os
import sys
import time
import shutil
import subprocess
import platform
Expand Down Expand Up @@ -98,6 +99,13 @@ def get_backend_commands(backend, debug=False):
raise AssertionError('Unknown backend: {!r}'.format(backend))
return cmd, clean_cmd, test_cmd, install_cmd, uninstall_cmd

def ensure_backend_detects_changes(backend):
# This is needed to increase the difference between build.ninja's
# timestamp and the timestamp of whatever you changed due to a Ninja
# bug: https://github.com/ninja-build/ninja/issues/371
if backend is Backend.ninja:
time.sleep(1)

def get_fake_options(prefix):
import argparse
opts = argparse.Namespace()
Expand Down
12 changes: 3 additions & 9 deletions run_unittests.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@

from run_tests import exe_suffix, get_fake_options, FakeEnvironment
from run_tests import get_builddir_target_args, get_backend_commands, Backend
from run_tests import ensure_backend_detects_changes


def get_soname(fname):
Expand Down Expand Up @@ -355,13 +356,6 @@ def setUp(self):
# XCode backend is untested with unit tests, help welcome!
self.no_rebuild_stdout = 'UNKNOWN BACKEND {!r}'.format(self.backend.name)

def ensure_backend_detects_changes(self):
# This is needed to increase the difference between build.ninja's
# timestamp and the timestamp of whatever you changed due to a Ninja
# bug: https://github.com/ninja-build/ninja/issues/371
if self.backend is Backend.ninja:
time.sleep(1)

def _print_meson_log(self):
log = os.path.join(self.logdir, 'meson-log.txt')
if not os.path.isfile(log):
Expand Down Expand Up @@ -439,14 +433,14 @@ def run_target(self, target):

def setconf(self, arg, will_build=True):
if will_build:
self.ensure_backend_detects_changes()
ensure_backend_detects_changes(self.backend)
self._run(self.mconf_command + [arg, self.builddir])

def wipe(self):
shutil.rmtree(self.builddir)

def utime(self, f):
self.ensure_backend_detects_changes()
ensure_backend_detects_changes(self.backend)
os.utime(f)

def get_compdb(self):
Expand Down

0 comments on commit 1570a90

Please sign in to comment.