view .circleci/config.yml @ 5653:ba67e397f063

Fix string/bytes issues under python 3. 1) cgi/client.py: override cgi.FieldStorage's make_file so that file is always created in binary/byte mode. This means that json (and xml) are bytes not strings. 2) rest.py: try harder to find dicttoxml in roundup directory or on sys.path. This just worked under python 2 but python 3 only searches sys.path by default and does not search relative like python 2. 3) rest.py: replace headers.getheader call removed from python 3 with equivalent code. 4) rest.py: make value returned from dispatch into bytes not string. 5) test/caseinsensitivedict.py, test/test_CaseInsensitiveDict.py: get code from stackoverflow that implements a case insensitive key dict. So dict['foo'], dict['Foo'] are the same entry. Used for looking up headers in mocked http rewuset header array. 6) test/rest_common.py: rework tests for etags and rest to properly supply bytes to the called routines. Calls to s2b and b2s and use of BytesIO and overriding make_file in cgi.FieldStorage to try to make sure it works under python 3.
author John Rouillard <rouilj@ieee.org>
date Sun, 17 Mar 2019 19:28:26 -0400
parents 851d4306300d
children 7017ea98930f
line wrap: on
line source

version: 2
jobs:
  build:
    docker:
      - image: circleci/buildpack-deps:18.04

      - image: circleci/postgres:9.6-alpine-ram

      - image: circleci/mysql:5.7-ram
        environment:
          MYSQL_ALLOW_EMPTY_PASSWORD=true
          MYSQL_ROOT_HOST=%

    working_directory: ~/repo

    steps:
      - checkout

      - run:
          name: install packages
          command: |
            sudo apt-get update
            sudo apt-get install -y libgpgme-dev mysql-client-core-5.7 postgresql-client python3-gpg python3-mysqldb python3-pip python3-psycopg2 python3-pytest python3-pytest-cov python3-tz python3-venv python3-whoosh python3-xapian swig

      - run:
          name: install dependencies
          command: |
            python3 -m venv venv
            . venv/bin/activate
            pip3 install codecov

      - run:
          name: setup databases
          command: |
            psql -d postgresql://root@localhost/circle_test -c "CREATE ROLE rounduptest WITH CREATEDB LOGIN PASSWORD 'rounduptest';"
            mysql -h 127.0.0.1 -u root -e "GRANT ALL ON rounduptest.* TO rounduptest@'127.0.0.1' IDENTIFIED BY \"rounduptest\";"
            # patch host to 127.0.0.1 to force TCP connection to MySQL
            sed -i -e 's/\(config[.]RDBMS_HOST =\) "localhost"/\1 "127.0.0.1"/' test/db_test_base.py
            # HACK: workaround mysql bug: http://bugs.mysql.com/bug.php?id=74901
            #   needed for test_mysql.mysqlDBTest.testFilteringSpecialChars
            sed -i -e 's/CREATE DATABASE \%s/CREATE DATABASE \%s COLLATE utf8_general_ci/' roundup/backends/back_mysql.py

      - run:
          name: run tests
          command: |
            . venv/bin/activate
            py.test-3 -v test/ --cov=roundup
          environment:
            MYSQL_HOST: 127.0.0.1

      - run:
          name: run coverage
          command: |
            codecov

Roundup Issue Tracker: http://roundup-tracker.org/