Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix failing AppVeyor Python2.7 tests #985

Merged
merged 2 commits into from
Mar 3, 2020

Commits on Feb 24, 2020

  1. Fix failing AppVeyor Python2.7 tests

    Since theupdateframework#885 the tests in TestUpdater and TestKeyRevocation fail on
    Appveyor Python 2.7 builds. After some live debugging, it turns out
    that the tests fail due to the extra amount of http requests to
    the simple http server (see tests/simple_server.py) that were
    added in theupdateframework#885.
    
    The simple server runs in a subprocess and is re-used for the
    entire TestCase. After a certain amount of requests it becomes
    unresponsive. Note that neither the subprocess exits (ps -W), nor
    does the port get closed (netstat -a). It just doesn't serve the
    request, making it time out and fail the test.
    
    The following script can be used to reproduce the issue (run in
    tests directory):
    
    ```python
    import subprocess
    import requests
    import random
    
    counter = 0
    
    port = random.randint(30000, 45000)
    command = ['python', 'simple_server.py', str(port)]
    server_process = subprocess.Popen(command, stderr=subprocess.PIPE)
    url = 'http://localhost:'+str(port) + '/'
    
    sess = requests.Session()
    
    try:
      while True:
        sess.get(url, timeout=3)
        counter +=1
    
    finally:
      print(counter)
      server_process.kill()
    ```
    
    It fails repeatedly on the 69th request, but only if
    `stderr=subprocess.PIPE` is passed to Popen. Given that for each
    request the simple server writes about ~60 characters to stderr,
    e.g. ...
    ```
    127.0.0.1 - - [24/Feb/2020 12:01:23] "GET / HTTP/1.1" 200 -
    ```
    ... it looks a lot like a full pipe buffer of size 4096. Note that the
    `bufsize` argument to Popen does not change anything.
    
    As a simple work around we silence the test server on
    Windows/Python2 to not fill the buffer.
    
    Signed-off-by: Lukas Puehringer <lukas.puehringer@nyu.edu>
    lukpueh committed Feb 24, 2020
    Configuration menu
    Copy the full SHA
    7dbb30a View commit details
    Browse the repository at this point in the history

Commits on Feb 25, 2020

  1. Remove duplicate testing simple_server.py

    tests/simple_server.py was copied to tuf/scripts/ to "make testing
    easier" (cf84d3f), although with
    the current test setup the original (and recently patched to fix an
    Windows/Py2 test issue) test simple_server.py can be used just as
    well.
    
    This commit:
    - removes tuf/scripts/simple_server.py
      Note: that version slightly differed from the original test
      server, probably due to demands by the linter that is only executed
      on the tuf core code and not on the tests. However, for the testing
      purposes of simple_server.py these changes (i.e., `SystemRandom()`,
      `if __name__ =='__main__':`) are not necessary.
    - updates the tests that used tuf.scripts.simple_server to instead
      use tests.simple_server,
    - updates setup.py to not install the simple_server module as
      script, when installing tuf, as it is only a testing script and
      not meant for end-user usage.
    
    Signed-off-by: Lukas Puehringer <lukas.puehringer@nyu.edu>
    lukpueh committed Feb 25, 2020
    Configuration menu
    Copy the full SHA
    842f843 View commit details
    Browse the repository at this point in the history