Skip to content
This repository has been archived by the owner on Jan 29, 2025. It is now read-only.

Status of v1 API tests #2128

Open
chartjes opened this issue Mar 5, 2020 · 1 comment
Open

Status of v1 API tests #2128

chartjes opened this issue Mar 5, 2020 · 1 comment

Comments

@chartjes
Copy link
Contributor

chartjes commented Mar 5, 2020

I wanted to know the status of the usefulness of the current v1 API tests. My upcoming PR reorganizes the v1 API tests to have them in their own directory. Here are the v1 tests when run locally against a Dockerized version of Normandy

contract-tests/v1_api/test_api.py::test_expected_action_types SKIPPED                                                                                                                                
contract-tests/v1_api/test_api.py::test_console_log PASSED                                                                                                                                            
contract-tests/v1_api/test_api.py::test_show_heartbeat PASSED                                                                                                                                         
contract-tests/v1_api/test_api.py::test_recipe_signatures SKIPPED                                                                                                                                     
contract-tests/v1_api/test_api.py::test_action_signatures SKIPPED                                                                                                                                     
contract-tests/v1_api/test_api.py::test_recipe_api_is_json PASSED                                                                                                                                     
contract-tests/v1_api/test_api.py::test_recipe_history FAILED                                                                                                                                         
contract-tests/v1_api/test_heartbeat.py::test_heartbeat_is_ok PASSED                                                                                                                                  
contract-tests/v1_api/test_performance.py::TestHotPaths::test_no_redirects[/en-US/repair] PASSED                                                                                                      
contract-tests/v1_api/test_performance.py::TestHotPaths::test_no_redirects[/en-US/repair/] PASSED                                                                                          
contract-tests/v1_api/test_performance.py::TestHotPaths::test_no_redirects[/api/v1/recipe/?enabled=1] PASSED                                                                           
contract-tests/v1_api/test_performance.py::TestHotPaths::test_no_redirects[/api/v1/recipe/signed/?enabled=1] PASSED                                                                                  
contract-tests/v1_api/test_performance.py::TestHotPaths::test_no_redirects[/api/v1/action/] PASSED                                                                                                 
contract-tests/v1_api/test_performance.py::TestHotPaths::test_no_vary_cookie[/en-US/repair] ERROR                                                                                                  
contract-tests/v1_api/test_performance.py::TestHotPaths::test_no_vary_cookie[/en-US/repair/] ERROR                                                                                                 
contract-tests/v1_api/test_performance.py::TestHotPaths::test_no_vary_cookie[/api/v1/recipe/?enabled=1] ERROR                                                                                         
contract-tests/v1_api/test_performance.py::TestHotPaths::test_no_vary_cookie[/api/v1/recipe/signed/?enabled=1] ERROR                                                                                  
contract-tests/v1_api/test_performance.py::TestHotPaths::test_no_vary_cookie[/api/v1/action/] ERROR                                                                                                   
contract-tests/v1_api/test_performance.py::TestHotPaths::test_cache_headers[/en-US/repair] ERROR                                                                                                      
contract-tests/v1_api/test_performance.py::TestHotPaths::test_cache_headers[/en-US/repair/] ERROR                                                                                                     
contract-tests/v1_api/test_performance.py::TestHotPaths::test_cache_headers[/api/v1/recipe/?enabled=1] ERROR                                                                                          
contract-tests/v1_api/test_performance.py::TestHotPaths::test_cache_headers[/api/v1/recipe/signed/?enabled=1] ERROR                                                                                  
contract-tests/v1_api/test_performance.py::TestHotPaths::test_cache_headers[/api/v1/action/] ERROR                                                                                                   
contract-tests/v1_api/test_performance.py::test_static_cache_headers PASSED 

The failures can be grouped as follows:

  • failures because a call to <server>/__version__ fails

  • tests comparing creation dates to current dates for a recipe fails

  def test_recipe_history(conf, requests_session):
        r = requests_session.get(conf.getoption("server") + "/api/v1/recipe/")
        r.raise_for_status()
        data = r.json()

        if len(data) == 0:
            pytest.skip("No recipes found.")

        for item in data:
            endpoint = f'/api/v1/recipe/{item["id"]}/history/'
            r = requests_session.get(conf.getoption("server") + endpoint)
            r.raise_for_status()
            history = r.json()

            last_date = datetime.now()
            for revision in history:
                created = datetime.strptime(revision["date_created"], "%Y-%m-%dT%H:%M:%S.%fZ")
>               assert created < last_date

E               assert datetime.datetime(2020, 3, 5, 15, 4, 22, 861394) < datetime.datetime(2020, 3, 5, 10, 5, 37, 995259)

Are these v1 tests still providing value or would you prefer I rewrite them to be the same kind of schema-validation tests to protect from regressions in the API that I have created for the v3 API?

@mythmon
Copy link
Contributor

mythmon commented Mar 6, 2020

These tests are a part of our CI run and our deploy process, and they are working there. Running the tests against an arbitrary local Docker instance of Normandy isn't what they are currently designed to do. Some of these are important checks that ensure the performance and reliability of Normandy. I'd like to keep them. I don't have any problems with adding more tests though.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants