Uploaded image for project: 'Thrift'
  1. Thrift
  2. THRIFT-4976

Docker build: Test failure for `StalenessCheckTest` on MacOS

    XMLWordPrintableJSON

Details

    Description

      `StalenessCheckTest` consists of three python tests, each of which verify whether a thrift file is recompiled after some modification. The test scheme is such as:

      • Compile some thrift files
      • Get the modification timestamp of generated files.
      • Make modification to the thrift files
      • Sleep for 0.1 second, and then recompile
      • Get the modification timestamp of (re)generated files
      • Assert that the second timestamp is bigger than the first

      When running a docker build (with ubuntu-bionic) on MacOS, the assertion fails randomly, because the underlying file system's timestamp is only second-accurate. So the 0.1 second is not enough to make sure that the second timestamp is bigger than the first (both could end up to be round to the same second).

      Example:

      export  SCRIPT="cmake.sh"
      export  BUILD_ARG="-D WITH_C_GLIB=OFF -D WITH_AS3=OFF -D WITH_PYTHON=OFF -D WITH_HASKELL=OFF"
      export  BUILD_ENV="-e CC=gcc -e CXX=g++ -e THRIFT_CROSSTEST_CONCURRENCY=3"
      export  DISTRO=ubuntu-bionic
      export  BUILD_LIBS="CPP JAVA"  # only meaningful for CMake builds
      export  DOCKER_REPO="thrift/thrift-build"
      
      SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
      DOCKER_TAG=$DOCKER_REPO:$DISTRO
      
      docker run --net=host -e BUILD_LIBS="$BUILD_LIBS" $BUILD_ENV -v $(pwd):/thrift/src \
              -it $DOCKER_TAG build/docker/scripts/cmake.sh $BUILD_ARG
      
      ...
      
      test 435
              Start 435: StalenessCheckTest435: Test command: /usr/bin/python "/thrift/src/compiler/cpp/test/compiler/staleness_check.py" "/thrift/src/cmake_build/compiler/cpp/bin/thrift"
      435: Test timeout computed to be: 1500
      435: test_staleness_check_of_included_file (__main__.TestStalenessCheck) ... FAIL
      435: test_staleness_check_of_single_thrift_file_with_changed_output (__main__.TestStalenessCheck) ... ok
      435: test_staleness_check_of_single_thrift_file_without_changed_output (__main__.TestStalenessCheck) ... ok
      435:
      435: ======================================================================
      435: FAIL: test_staleness_check_of_included_file (__main__.TestStalenessCheck)
      435: ----------------------------------------------------------------------
      435: Traceback (most recent call last):
      435:   File "/thrift/src/compiler/cpp/test/compiler/staleness_check.py", line 123, in test_staleness_check_of_included_file
      435:     included_constants_cpp_second_modification_time, included_constants_cpp_first_modification_time)
      435: AssertionError: 1570986553.0 not greater than 1570986553.0
      435:
      435: ----------------------------------------------------------------------
      435: Ran 3 tests in 0.727s
      435:
      435: FAILED (failures=1)
      435/464 Test #435: StalenessCheckTest ...............***Failed    0.85 sec
      
      ...
      
      99% tests passed, 1 tests failed out of 46499% tests passed, 1 tests failed out of 464
      Total Test time (real) = 344.50 sec
      The following tests FAILED: 435 - StalenessCheckTest (Failed)Errors while running CTest

      Attachments

        Issue Links

          Activity

            People

              q.xu Qinghui Xu
              q.xu Qinghui Xu
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 20m
                  20m