VWS-Python / vws-python

Python wrapper for Vuforia Web Services (VWS) API
MIT License
13 stars 7 forks source link

Deleting a target and then immediately querying for its image gives a 500 error in the query endpoint #605

Closed adamtheturtle closed 6 years ago

adamtheturtle commented 6 years ago

Start of tests:

@pytest.mark.usefixtures('verify_mock_vuforia')
class TestDeleted:
    """
    Tests for matching deleted targets.
    """

    def test_deleted(
        self,
        high_quality_image: io.BytesIO,
        vuforia_database_keys: VuforiaDatabaseKeys,
    ) -> None:
        """
        Within approximately 7 seconds of deleting a target, querying for its
        image results in an ``INTERNAL_SERVER_ERROR``.
        """
        image_content = high_quality_image.getvalue()
        image_data_encoded = base64.b64encode(image_content).decode('ascii')
        add_target_data = {
            'name': 'example_name',
            'width': 1,
            'image': image_data_encoded,
        }
        response = add_target_to_vws(
            vuforia_database_keys=vuforia_database_keys,
            data=add_target_data,
        )

        target_id = response.json()['target_id']
        approximate_target_created = calendar.timegm(time.gmtime())

        wait_for_target_processed(
            target_id=target_id,
            vuforia_database_keys=vuforia_database_keys,
        )

        delete_target(
            vuforia_database_keys=vuforia_database_keys,
            target_id=target_id,
        )

        body = {'image': ('image.jpeg', image_content, 'image/jpeg')}

        response = query(
            vuforia_database_keys=vuforia_database_keys,
            body=body,
        )

        # The response text for a 500 response is not consistent.
        # Therefore we only test for consistent features.
        assert 'Error 500 Server Error' in response.text
        assert 'HTTP ERROR 500' in response.text
        assert 'Problem accessing /v1/query' in response.text

        assert_vwq_failure(
            response=response,
            content_type='text/html; charset=ISO-8859-1',
            status_code=codes.INTERNAL_SERVER_ERROR,
        )

    def test_deleted_and_wait(
        self,
        high_quality_image: io.BytesIO,
        vuforia_database_keys: VuforiaDatabaseKeys,
    ) -> None:
        """
        After waiting approximately 7 seconds (we wait more to be safer), a
        deleted target is not found when its image is queried for.
        """
        image_content = high_quality_image.getvalue()
        image_data_encoded = base64.b64encode(image_content).decode('ascii')
        add_target_data = {
            'name': 'example_name',
            'width': 1,
            'image': image_data_encoded,
        }
        response = add_target_to_vws(
            vuforia_database_keys=vuforia_database_keys,
            data=add_target_data,
        )

        target_id = response.json()['target_id']
        approximate_target_created = calendar.timegm(time.gmtime())

        wait_for_target_processed(
            target_id=target_id,
            vuforia_database_keys=vuforia_database_keys,
        )

        response = delete_target(
            vuforia_database_keys=vuforia_database_keys,
            target_id=target_id,
        )

        time.sleep(30)

        body = {'image': ('image.jpeg', image_content, 'image/jpeg')}

        response = query(
            vuforia_database_keys=vuforia_database_keys,
            body=body,
        )

        assert_query_success(response=response)
        assert response.json()['results'] == []