tomato42/tlsfuzzer

View on GitHub
.travis.yml

Summary

Maintainability
Test Coverage
# workaround for 3.7 and 3.8 not available in default configuration
# travis-ci/travis-ci#9815
dist: trusty
sudo: false
cache: pip
language: python

addons:
  apt_packages:
    # needed for M2Crypto
    - swig
    - libssl-dev
    # needed for gmpy2
    - libgmp-dev
    - libmpfr-dev
    - libmpc-dev
    # needed for scipy on 3.9
    - gcc
    - gfortran
    - libopenblas-dev
    - liblapack-dev
    - cython
    # needed for test coverage
    - tcpdump

before_cache:
  - rm -f $HOME/.cache/pip/log/debug.log

jobs:
 include:
# ANALYSIS_DEP=EXTRACT_DEP=false
   - python: 2.6
   - python: 2.7
   - python: 3.3
   - python: 3.4
   - python: 3.5
   - python: 3.6
# workaround for 3.7 and 3.8 not available in default configuration
# travis-ci/travis-ci#9815
   - python: 3.7
     dist: xenial
     sudo: true
   - python: 3.8
     dist: xenial
     sudo: true
   - python: 3.9
     dist: xenial
     sudo: true
   - python: nightly
     dist: xenial
     sudo: true
# ANALYSIS_DEP=false EXTRACT_DEP=true
   - python: 2.6
     env: EXTRACT_DEP=true
   - python: 2.7
     env: EXTRACT_DEP=true
   - python: 3.3
     env: EXTRACT_DEP=true
   - python: 3.4
     env: EXTRACT_DEP=true
   - python: 3.5
     env: EXTRACT_DEP=true
   - python: 3.6
     env: EXTRACT_DEP=true
   - python: 3.7
     dist: xenial
     sudo: true
     env: EXTRACT_DEP=true
   - python: 3.8
     dist: xenial
     sudo: true
     env: EXTRACT_DEP=true
   - python: 3.9
     dist: xenial
     sudo: true
     env: EXTRACT_DEP=true
   - python: nightly
     dist: xenial
     sudo: true
     env: EXTRACT_DEP=true
# ANALYSIS_DEP=true EXTRACT_DEP=false
   - python: 3.6
     env: ANALYSIS_DEP=true
   - python: 3.7
     dist: xenial
     sudo: true
     env: ANALYSIS_DEP=true
   - python: 3.8
     dist: xenial
     sudo: true
     env: ANALYSIS_DEP=true
   - python: 3.9
     dist: xenial
     sudo: true
     env: ANALYSIS_DEP=true
   - python: nightly
     dist: xenial
     sudo: true
     env: ANALYSIS_DEP=true
# ANALYSIS_DEP=EXTRACT_DEP=true
   - python: 3.6
     env: ANALYSIS_DEP=true EXTRACT_DEP=true
   - python: 3.7
     dist: xenial
     sudo: true
     env: ANALYSIS_DEP=true EXTRACT_DEP=true
   - python: 3.8
     dist: xenial
     sudo: true
     # Note: CC_REPORT=true can be set in only one environment
     env: ANALYSIS_DEP=true EXTRACT_DEP=true CC_REPORT=true
   - python: 3.9
     dist: xenial
     sudo: true
     env: ANALYSIS_DEP=true EXTRACT_DEP=true
   - python: nightly
     dist: xenial
     sudo: true
     env: ANALYSIS_DEP=true EXTRACT_DEP=true
 allow_failures:
   # lazy-object-proxy fails to build
   - python: nightly
   # scipy fails to build
   - python: 3.9
     env: ANALYSIS_DEP=true
   - python: 3.9
     env: ANALYSIS_DEP=true EXTRACT_DEP=true

branches:
  only:
    - master

before_install:
  - |
       echo -e "TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST\n" \
               "TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG\n" \
               "TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST\n" \
               "TRAVIS_COMMIT=$TRAVIS_COMMIT\n" \
               "TRAVIS_PYTHON_VERSION=$TRAVIS_PYTHON_VERSION"
  - |
       # workaround https://github.com/travis-ci/travis-ci/issues/2666
       if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
         URL="https://github.com/${TRAVIS_REPO_SLUG}/pull/${TRAVIS_PULL_REQUEST}.patch"
         # `--location` makes curl follow redirects
         PR_FIRST=$(curl --silent --show-error --location $URL | head -1 | grep -o -E '\b[0-9a-f]{40}\b' | tr -d '\n')
         TRAVIS_COMMIT_RANGE=$PR_FIRST^..$TRAVIS_COMMIT
       fi
  # sanity check current commit
  - git rev-parse HEAD
  - echo "TRAVIS_COMMIT_RANGE=$TRAVIS_COMMIT_RANGE"
  - git fetch origin master:refs/remotes/origin/master
  - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
  - chmod +x ./cc-test-reporter

install:
  - pip list
  - if [[ $TRAVIS_PYTHON_VERSION == '2.6' ]]; then
        curl -o get-pip.py https://bootstrap.pypa.io/2.6/get-pip.py;
        python get-pip.py;
    fi
  - if [[ -e build-requirements-${TRAVIS_PYTHON_VERSION}.txt ]]; then travis_retry pip install -r build-requirements-${TRAVIS_PYTHON_VERSION}.txt; else travis_retry pip install -r build-requirements.txt; fi
  - |
      if [[ $EXTRACT_DEP == 'true' ]]; then
          if [[ $TRAVIS_PYTHON_VERSION == '2.6' ]]; then
              travis_retry pip install "dpkt==1.9.2";
          else
              travis_retry pip install "dpkt>=1.9.2";
          fi
      fi
  # kiwisolver requires new pip for its wheel files so ensure we're running the newest one
  - if [[ $ANALYSIS_DEP == 'true' ]]; then travis_retry pip install --upgrade pip; travis_retry pip install -r build-requirements-analysis.txt; fi
  - travis_retry pip install -r requirements.txt
  # install optional tlslite-ng requirementes to speed up testing
  - |
    if [[ $TRAVIS_PYTHON_VERSION == 3.7 ]] || [[ $TRAVIS_PYTHON_VERSION == 3.8 ]] || [[ $TRAVIS_PYTHON_VERSION == 3.9 ]] ; then
      travis_retry pip install m2crypto
    elif [[ $TRAVIS_PYTHON_VERSION != '3.3' ]]; then
      # M2Crypto 0.37.0 broke compatibility with old OpenSSL
      travis_retry pip install 'm2crypto<0.37'
    fi
  - travis_retry pip install gmpy2
  # codeclimate supports natively just one set of results, so use the most recent python for that
  - if [[ $CC_REPORT == 'true' ]]; then ./cc-test-reporter before-build; fi
  - pip list

script:
  - |
      if [[ $TRAVIS_PYTHON_VERSION == '2.6' ]]; then
          coverage run --branch --source tlsfuzzer -m unittest2 discover;
      else
          coverage run --branch --source tlsfuzzer -m unittest discover;
      fi
  - coverage report -m
  # check if all scripts are included in the json files
  - python tests/verify-scripts-json.py tests/tlslite-ng-random-subset.json tests/tlslite-ng.json
  # the HTTP header includes python version, since "2.7.15" is longer than "2.6.9", the reply itself is longer too
  # more generally, it should be `1845 + len(sys.version.split()[0])`,
  # as http.server uses `sys_version = "Python/" + sys.version.split()[0]`
  # https://github.com/python/cpython/blob/2c050e52f1ccf5db03819e4ed70690521d67e9fa/Lib/http/server.py#L253
  - |
      if [[ $TRAVIS_PYTHON_VERSION == '2.7' ]]; then
        export REPLY_SIZE=1850
      elif [[ $TRAVIS_PYTHON_VERSION == 'nightly' ]]; then
        export REPLY_SIZE=1852  # Server: SimpleHTTP/0.6 Python/3.10.0a0
      else
        export REPLY_SIZE=1849  # Server: SimpleHTTP/0.6 Python/3.7.6
      fi
  - travis_wait 30 python tests/scripts_retention.py tests/tlslite-ng-random-subset.json `which tls.py` $REPLY_SIZE
  # pylint doesn't work on 2.6: https://bitbucket.org/logilab/pylint/issue/390/py26-compatiblity-broken
  - |
      if [[ $TRAVIS_PYTHON_VERSION != '2.6' ]]; then
        pylint --msg-template="{path}:{line}: [{msg_id}({symbol}), {obj}] {msg}" tlsfuzzer > pylint_report.txt || :
        diff-quality --violations=pylint --fail-under=90 pylint_report.txt
      fi
  - |
      if [[ $TRAVIS_PULL_REQUEST != "false" ]]; then
        echo "Will test commits between $TRAVIS_COMMIT_RANGE:"
        git log --oneline --reverse $TRAVIS_COMMIT_RANGE

        for i in $(git log --pretty=format:%H --reverse $TRAVIS_COMMIT_RANGE); do
          git checkout $i
          make clean
          if [[ $TRAVIS_PYTHON_VERSION == '2.6' ]]; then
            unit2 discover || exit 1
          else
            python -m unittest discover || exit 1
          fi
          cd $TRAVIS_BUILD_DIR
        done
      fi

after_success:
 - travis_retry coveralls
 - if [[ $CC_REPORT == 'true' ]]; then coverage xml; ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT; fi