Move fourfront from pytest 2.9 to 3.10 (ALT)#1437
Move fourfront from pytest 2.9 to 3.10 (ALT)#1437netsettler wants to merge 70 commits intomasterfrom
Conversation
…tilities level. (Many are unused but may back other code we want to port.) Rename src/encoded/utils.py to src/encoded/util.py so these filenames will align again. Adjust files that import the renamed file. Also adjust test_indexing.py to use meta = MetaData(...); meta.reflect() instead of meta = MetaData(..., reflect=True).
…kibana-start-test and use poetry 1.1.4 in Makefile.
…ile.ZipFile) from cgap-portal version of scr/encoded/xlreader.py
… beause they'd be complicated to fix right now.
…src/encoded/tests/test_access_key.py
…on't special-case GET and HEAD methods.
…iverges. Add a TEST_PREFIX variable for symmetry. Compute the letter pairs needed for accession ids by looking at the schema files.
…CCEPT, which is more like what browsers would do and is needed for some ported changes from cgap-portal. Light PEP8. Remove pytest_plugins setting, which is deprecated; this info is now in pytest.ini. Change pytest.ini to have markers in line with cgap-portal, to use testpaths rather than a --pyargs setting, and to use -p to handle plugins.
…/renderers.py. Some PEP8.
…nge the way commits work to be more incremental.
…broken everywhere, not just on remote testing.
…data showthrough. Fix a backslash bug in test_types_init_collections.py
…test_static_page.py
…for schema_formats.py that check what's declared against what's needed.
| travis-test: # Actually, we don't normally use this. Instead the GA workflow sets up two parallel tests. | ||
| make travis-test-npm | ||
| make travis-test-unit | ||
|
|
There was a problem hiding this comment.
Some of the changes in this file, and this PR in general, are just leveling with cgap-portal to minimize dissonance. But here we also added some criteria for what to use for make.
Note that in spite of all these markers, I still had to mark tests not to run with skip since otherwise if I try to run the file by name with, for example, bin/test -vv -k test_search it wouldn't confuse me by running things marked broken because I hadn't in my by-hand invocation listed all relevant markers.
The sloppy test is presently marking tests that break stuff because they don't manage side-effects well. It's possible that if they were divvied out differently, like with the indexing tests, it would be OK.
| -p encoded.tests deploy.tests | ||
| -p encoded.tests.datafixtures | ||
| -p snovault.tests.serverfixtures | ||
| --instafail |
There was a problem hiding this comment.
The above changes to addopts are what make pycharm work. It will invoke things with pytest, not bin/test and it's critical that all the options that are needed for it to run are correctly specified. In the old form, it worked to add a -k <something> on the command line to run a filtered test, but there was no way to run a single test because it was always going to run encoded.tests and deploy.tests no matter what you did. In the new way, you aren't forcing any tests to run by default. They are chosen as "all" if you specify no specific tests, and they're filtered against the directories specified later in the file (see testpaths below.
Pytest 3.10 also somewhere in there requires that you set the plugins information here on the command line (with -p) rather than inline in conftest.py files by setting pytest_plugins. It wants all that plugin stuff done at startup time, I think so that all the session fixtures go in those files and so it is known at startup which session things are needed to have session scope so it can activate them on first use reliably.
| -p encoded.tests.datafixtures | ||
| -p snovault.tests.serverfixtures | ||
| --instafail | ||
| markers = |
There was a problem hiding this comment.
I imported all the cgap marker names here. They don't create overhead and it makes it easier to copy code back and forth.
| @@ -1,5 +1,60 @@ | |||
| #!/bin/bash | |||
|
|
|||
| docker_kibana_image=docker.elastic.co/kibana/kibana-oss:6.8.9 | |||
There was a problem hiding this comment.
This file is just copied from cgap-portal. No code changes in this PR.
| @@ -0,0 +1,70 @@ | |||
| #!/bin/bash | |||
There was a problem hiding this comment.
Also just copied from cgap-portal without changes.
| assert 'Accession and uuid are automatically assigned during initial posting' in res.json['content'][0]['content'] | ||
| assert res.json['toc'] == posted_help_page['table-of-contents'] | ||
|
|
||
|
|
There was a problem hiding this comment.
I added this test.
| assert 'Accession and uuid are automatically assigned during initial posting' in res.json['content'][0]['content'] | ||
| assert res.json['toc'] == posted_help_page['table-of-contents'] | ||
|
|
||
|
|
There was a problem hiding this comment.
I added this test.
|
|
||
|
|
||
| @pytest.fixture(scope='module') | ||
| def help_page_deleted(testapp, posted_help_page_section, help_page_json_draft): |
There was a problem hiding this comment.
Note that these fixtures were kind of a mess, with the draft json going into the deleted page, etc. I tried to clean that kind of thing up. It may be worth looking at the new file in direct mode, not side-by-side.
| pytest.mark.indexing, | ||
| #pytest.mark.flaky(rerun_filter=customized_delay_rerun(sleep_seconds=10)) | ||
| ] | ||
|
|
There was a problem hiding this comment.
Note: not an indexing test. It uses workbook.
| def check_item_type(client, item_type): | ||
| # This might get a 404 if not enough time has elapsed, so try a few times before giving up. | ||
| return client.get('/%s?limit=all' % item_type, status=[200, 301]).follow() | ||
| class ItemTypeChecker: |
There was a problem hiding this comment.
This is ported in from cgap-portal.
willronchetti
left a comment
There was a problem hiding this comment.
I've added some small comments but the vast majority of these changes look reasonable to me and are unlikely to cause issues - I would consider deploying this somewhere to be sure prior to merging.
| configure: # does any pre-requisite installs | ||
| pip install --upgrade pip | ||
| pip install poetry==1.0.10 # pinned to avoid build problems we cannot fix in pyproject.toml | ||
| pip install poetry==1.1.4 # poetry latest as of 1/25/2021 seemed to work but apparantly does not |
There was a problem hiding this comment.
This comment is actually out of date now, 1.1.4 is latest and didn't work without the fix-dist-info step, which we now have so we're good.
| # TODO: CGAP does this differently. If port 443 is used, Will says use_ssl is implied and can be omitted here. | ||
| # Need to verify that and then make both systems agree here. -kmp 16-Feb-2021 |
There was a problem hiding this comment.
Port 443 is specified by the server URL, so it is not needed here as well.
| "indexer": settings.get("indexer"), | ||
| "index_server": settings.get("index_server"), |
There was a problem hiding this comment.
Shouldn't this have stayed the same?
| # notice_pytest_fixtures(app_settings, app, workbook) | ||
|
|
||
| pytestmark = [pytest.mark.indexing, pytest.mark.flaky(rerun_filter=delay_rerun)] | ||
| pytestmark = [pytest.mark.flaky(rerun_filter=delay_rerun), pytest.mark.triage] |
There was a problem hiding this comment.
I think the answer to this is "not working".
Substantive changes and bug fixes:
In
src/encoded/authentication.pyGETandHEADmethods.pyproject.tomlpytestto version 3.10 and related libraries in some ways.awscli,boto3,botocore,netaddr,boto3-stubs.In
src/encoded/schema_formats.pyandsrc/encoded/server_defaults.py:ACCESSION_PREFIXvariable to minimize number of places code diverges.TEST_PREFIXvariable for symmetry. Compute the letter pairs needed for accession ids by looking at the schema files.src/encoded/loadxl.pypost_only=argument forload_allandload_all_gen.src/encoded/renderers.pysrc/encoded/tests/conftest.pyhtmltestappandanonhtmltestappto passHTTP_ACCEPT, which is more like what browsers would do, and which is needed for changes ported from CGAP.pytest_pluginssetting, which is deprecated. This info is now inpytest.ini.pytest.initestpathsrather than a--pyargsargument being added.-pto handle plugins, in lieu of settingpytest_plugins.src/encoded/tests/test_indexing.pymeta = MetaData(...); meta.reflect()to instead bemeta = MetaData(..., reflect=True).Makefile:scripts/kibana-startandscripts/psql-startscripts to support targetskibana-start-testandpsql-test, respectively.poetry 1.1.4conftest.pytempfile.tempdirto'/tmp'.src/encoded/commands/purge_item_type.pyMigrate the es_testapps to
src/encoded/tests/conftest.pyfromsrc/encoded/tests/workbook.py,and update the following tests to use that test_app:
test_validation_errors.pytest_purge_item_type.pytest_static_page.pytest_indexing.pytest_aggregation.pytest_batch_download.pyAdjust
Makefiletargettestto split indexing and non-indexing cases the way CGAP does.Simple changes and small bug fixes (mostly found by better warnings):
Mark
test_index_data_workbookas skip in test_search.py.Use
strin place ofbasestringinsrc/encoded/loadxl.pyandsrc/encoded/tests/test_loadxl.py.Port new file
src/encoded/tests/test_renderers.pyfrom CGAP.src/encoded/tests/test_static_page.pysrc/encoded/types/page.pysrc/encoded/tests/test_types_biosample.pybiosample_relationas a fixture. It's just a function.Add support for rewriting
"~1.2.3"insetup_eb.py. Add test cases intest_setup_eb.py.src/encoded/commands/spreadsheet_to_json.pyargparse.src/encoded/xlreader.pyzipfile.ZipFile).Relock
poetry.lock.Rename
src/encoded/utils.pyback tosrc/encoded/util.pyfor alignment with cgap-portal, and with history. Bad idea to have renamed it in the first place.Port various utilities that might not be used, just in case they're needed for other ports. We can clean this up later.
Update callers to import from
util:src/encoded/types/file.pysrc/encoded/tests/test_search.pysrc/encoded/tests/test_types_init_collections.pysrc/encoded/tests/test_types_protocol.pysrc/encoded/tests/test_util.py(wastest_utils.py, but renamed as well)src/encoded/tests/test_validation_errors.pysrc/encoded/tests/test_aggregation.pysrc/encoded/tests/test_batch_download.pyMove the definition or
ORDERto `conftest_settiGet rid of unused
configfixture onsrc/encoded/tests/conftest.py.Get rid of unused
motofixture onsrc/encoded/tests/conftest.py.Cosmetic changes:
Change
.encryptto.hashinsrc/encoded/tests/test_access_key.pysrc/encoded/types/access_key.pysrc/encoded/tests/test_edw_hash.pyUse
dcicutils.misc_utils.TestAppinstead ofwebtest.TestAppin:src/encoded/commands/import_data.pysrc/encoded/commands/load_access_keys.py.ebextensions/13_run_npm.config.gitignoresrc/encoded/commands/configure_kibana_index.py{'use_ssl': True}.src/encoded/dev_servers.pyAlso misc PEP8 in various files, including:
src/encoded/root.py