From 127ac75e76ee9f90e9f25efddff55ff1ff18b881 Mon Sep 17 00:00:00 2001 From: Anis Elleuch Date: Tue, 22 Oct 2019 11:58:08 +0100 Subject: [PATCH] tests: More fixes for better support of Github CI 1. Explicity create and pass temporary directories in tests 2. Download Minio binary for both Linux & Windows and avoid testing directly against Play server --- ...honpackage.yml => pythonpackage-linux.yml} | 19 +++++-- .github/workflows/pythonpackage-windows.yml | 52 +++++++++++++++++++ tests/certs/private.key | 28 ++++++++++ tests/certs/public.crt | 19 +++++++ tests/functional/tests.py | 10 ++-- 5 files changed, 122 insertions(+), 6 deletions(-) rename .github/workflows/{pythonpackage.yml => pythonpackage-linux.yml} (58%) create mode 100644 .github/workflows/pythonpackage-windows.yml create mode 100644 tests/certs/private.key create mode 100644 tests/certs/public.crt diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage-linux.yml similarity index 58% rename from .github/workflows/pythonpackage.yml rename to .github/workflows/pythonpackage-linux.yml index 5d05225d..0dfecd3f 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage-linux.yml @@ -13,10 +13,10 @@ jobs: name: Test on python ${{ matrix.python-version }} and ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: - max-parallel: 4 + max-parallel: 3 matrix: python-version: [2.7, 3.6, 3.7] - os: [ubuntu-latest, windows-latest] + os: [ubuntu-latest] steps: - uses: actions/checkout@v1 @@ -36,4 +36,17 @@ jobs: - name: Test with functional tests env: MINT_MODE: full - run: python tests/functional/tests.py + SERVER_ENDPOINT: localhost:9000 + ACCESS_KEY: minio + SECRET_KEY: minio123 + ENABLE_HTTPS: 1 + MINIO_ACCESS_KEY: minio + MINIO_SECRET_KEY: minio123 + SSL_CERT_FILE: /tmp/minio-config/certs/public.crt + run: | + wget -O /tmp/minio https://dl.min.io/server/minio/release/linux-amd64/minio + chmod +x /tmp/minio + mkdir -p /tmp/minio-config/certs/ + cp tests/certs/* /tmp/minio-config/certs/ + /tmp/minio -C /tmp/minio-config server /tmp/fs/ & + python tests/functional/tests.py diff --git a/.github/workflows/pythonpackage-windows.yml b/.github/workflows/pythonpackage-windows.yml new file mode 100644 index 00000000..39812292 --- /dev/null +++ b/.github/workflows/pythonpackage-windows.yml @@ -0,0 +1,52 @@ +name: Python package + +on: + pull_request: + branches: + - master + push: + branches: + - master + +jobs: + build: + name: Test on python ${{ matrix.python-version }} and ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + max-parallel: 3 + matrix: + python-version: [2.7, 3.6, 3.7] + os: [windows-latest] + + steps: + - uses: actions/checkout@v1 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v1 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install urllib3 certifi pytz pyflakes faker nose + - name: Test with nosetests + run: | + $ErrorActionPreference = 'continue' + pyflakes minio/*.py + python setup.py install + python setup.py nosetests + - name: Test with functional tests + env: + MINT_MODE: full + SERVER_ENDPOINT: localhost:9000 + ACCESS_KEY: minio + SECRET_KEY: minio123 + ENABLE_HTTPS: 1 + MINIO_ACCESS_KEY: minio + MINIO_SECRET_KEY: minio123 + run: | + New-Item -ItemType Directory -Path "$env:temp/minio-config/certs/" + Copy-Item -Path tests\certs\* -Destination "$env:temp/minio-config/certs/" + Invoke-WebRequest -Uri https://dl.min.io/server/minio/release/windows-amd64/minio.exe -OutFile $HOME/minio.exe + Start-Process -NoNewWindow -FilePath "$HOME/minio.exe" -ArgumentList "-C", "$env:temp/minio-config", "server", "$env:temp/fs" + $env:SSL_CERT_FILE = "$env:temp/minio-config/certs/public.crt" + python tests/functional/tests.py diff --git a/tests/certs/private.key b/tests/certs/private.key new file mode 100644 index 00000000..9061ede4 --- /dev/null +++ b/tests/certs/private.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC3G9IiC+adjf0p +i/2KYc+4dizeuzUFN7wraSdhiOMdQgCnu9Dc3t2YEsQhNdrARjOTyXd36KeM3TwI +rPJ61dRGQSuN12l+mzngFJQjE0sysZHUJOLQC3rVvIrHSQ57utPg8ifxt/SunlPY +fhcUcq03onMGq44yOfE6mIhoe0Y9wcPQ3RjjNNS44bgmXiXwa+Do0h2hEn6/essq +5KjHL8WW2vGg7G9edpYdxINA/A2fdLtr8BwPNrZhOx84eee2XcUNdBuTtUUxE+0L +9yRqItqddriRxJFwOXb5OPW8xx2WGaV2a0wbE4gB2PTwwDvfo72mo9HXHZUHM1A8 +4TD/RXMbAgMBAAECggEBAJ7r1oUWLyGvinn0tijUm6RNbMQjVvEgXoCO008jr3pF +PqxVpgEMrOa/4tmwFBus0jcCNF4t3r2zhddBw3I5A/O1vEdvHnBz6NdDBQ8sP6fP +1fF50iEe1Y2MBibQkXFxxVMG2QRB1Gt5nuvXA9ELdqtCovK3EsMk5ukkWb/UvjH5 +8hcmQsaSqvzFEF4wJSY2mkeGSGIJTphPhhuA22xbhaBMInQyhZu8EHsn0h6s/Wgy +C4Cp2+4qZTKaaf6x3/ZjJ8CuKiSX+ZsJKjOEv8sqx7j/Y7QFOmJPewInKDhwazr/ +xIK+N0KXPbUzeSEz6ZvExNDTxtR5ZlQP2UrRDg28yQECgYEA4Is1O2BvKVzNFOkj +bTVz25a/bb0Xrcfgi0Y9rdfLzlNdItFjAkxLTVRSW2Hv9ICl0RDDAG+wTlktXRdh +rfvDjwG2CvLQo1VEdMWTTkKVg03SwMEy2hFiWV69lENFGSaY8Y6unZDbia5HQinA +EgSS4sCojS+a2jtzG5FVVHJDKlkCgYEA0MKhMhD4SUhr2y1idPBrmLxuW5mVozuW +8bYaBeSzmfS0BRsN4fP9JGODPBPDdNbfGfGC9ezWLgD/lmCgjIEyBOq8EmqWSsiS +Kihds1+Z7hXtbzGsFGAFJJTIh7blBCsK5QFuyuih2UG0fL9z6K/dy+UUJkzrYqph +vSfKixyM8pMCgYEAmUPLsNyw4325aeV8TeWnUCJERaZFDFQa21W1cfyS2yEhuEtN +llr3JzBACqn9vFk3VU1onNqfb8sE4L696KCpKeqUFEMK0AG6eS4Gzus53Gb5TKJS +kHA/PhshsZp9Bp7G1FJ8s4YVo5N2hh2zQVkn3Wh9Y+kzfHQJrK51nO9lEvkCgYBi +BuKWle1gzAcJdnhDHRoJMIJJtQbVDYhFnBMALXJAmu1lcFzGe0GlMq1PKqCfXr6I +eiXawQmZtJJP1LPPBmOsd2U06KQGHcS00xucvQmVCOrjSdnZ/3SqxsqbH8DOgj+t +ZUzXLwHA+N99rJEK9Hob4kfh7ECjpgobPnIXfKKazQKBgQChAuiXHtf/Qq18hY3u +x48zFWjGgfd6GpOBZYkXOwGdCJgnYjZbE26LZEnYbwPh8ZUA2vp7mgHRJkD5e3Fj +ERuJLCw86WqyYZmLEuBciYGjCZqR5nbavfwsziWD00jeNruds2ZwKxRfFm4V7o2S +WLd/RUatd2Uu9f3B2J78OUdnxg== +-----END PRIVATE KEY----- diff --git a/tests/certs/public.crt b/tests/certs/public.crt new file mode 100644 index 00000000..19f62696 --- /dev/null +++ b/tests/certs/public.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDCzCCAfOgAwIBAgIUaIUOMI78LCu+r1zl0mmFHK8n5/AwDQYJKoZIhvcNAQEL +BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MCAXDTE5MTAyNDE5NTMxOVoYDzIxMTkw +OTMwMTk1MzE5WjAUMRIwEAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQC3G9IiC+adjf0pi/2KYc+4dizeuzUFN7wraSdhiOMd +QgCnu9Dc3t2YEsQhNdrARjOTyXd36KeM3TwIrPJ61dRGQSuN12l+mzngFJQjE0sy +sZHUJOLQC3rVvIrHSQ57utPg8ifxt/SunlPYfhcUcq03onMGq44yOfE6mIhoe0Y9 +wcPQ3RjjNNS44bgmXiXwa+Do0h2hEn6/essq5KjHL8WW2vGg7G9edpYdxINA/A2f +dLtr8BwPNrZhOx84eee2XcUNdBuTtUUxE+0L9yRqItqddriRxJFwOXb5OPW8xx2W +GaV2a0wbE4gB2PTwwDvfo72mo9HXHZUHM1A84TD/RXMbAgMBAAGjUzBRMB0GA1Ud +DgQWBBSEWXQ2JRD+OK7/KTmlD+OW16pGmzAfBgNVHSMEGDAWgBSEWXQ2JRD+OK7/ +KTmlD+OW16pGmzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCF +0zYRaabB3X0jzGI9/Lr3Phrb90GvoL1DFLRuiOuTlDkz0vrm/HrZskwHCgMNrkCj +OTD9Vpas4D1QZBbQbRzfnf3OOoG4bgmcCwLFZl3dy27yIDAhrmbUP++g9l1Jmy4v +vBR/M4lt2scQ8LcZYEPqhEaE5EzFQEjtaxDcKdWDNKY9W1NUzSIABhF9eHiAUNdH +AFNJlYeBlCHxcWIeqgon184Dqp/CsvKtz3z3Ni+rlwPM/zuJCFHh1VF+z++0LJjG +roBCV0Tro4XyiEz9yp7Cb5kQYMaj1KL9TqBG0tZx0pmv7y+lXc4TT6DEllXz6USy +rbIba9/uUet3BqeIMTqj +-----END CERTIFICATE----- diff --git a/tests/functional/tests.py b/tests/functional/tests.py index d1879cf5..ab37c074 100644 --- a/tests/functional/tests.py +++ b/tests/functional/tests.py @@ -22,6 +22,7 @@ import io import csv import sys +import tempfile from sys import exit import uuid @@ -895,22 +896,25 @@ def test_fget_object(client, log_output, sse=None): # default value for log_output.function attribute is; # log_output.function = "fget_object(bucket_name, object_name, file_path, request_headers)" + tmpfd, tmpfile = tempfile.mkstemp() + os.close(tmpfd) + # Get a unique bucket_name and object_name log_output.args['bucket_name'] = bucket_name = generate_bucket_name() log_output.args['object_name'] = object_name = uuid.uuid4().__str__() - log_output.args['file_path'] = newfile_f = 'newfile-f 新' + log_output.args['file_path'] = tmpfile try: MB_1 = 1024*1024 # 1MiB. MB_1_reader = LimitedRandomReader(MB_1) client.make_bucket(bucket_name) client.put_object(bucket_name, object_name, MB_1_reader, MB_1, sse=sse) # Get/Download a full object and save locally at path - client.fget_object(bucket_name, object_name, newfile_f, sse=sse) + client.fget_object(bucket_name, object_name, tmpfile, sse=sse) except Exception as err: raise Exception(err) finally: try: - os.remove(newfile_f) + os.remove(tmpfile) client.remove_object(bucket_name, object_name) client.remove_bucket(bucket_name) except Exception as err: