Follow-up to #3441, which tracks the rotation itself, and the first instance of #3445, which covers the general class: mock behaviour which has never been observed from real Vuforia and is indistinguishable from behaviour which has. This issue is the work list for after the Model Target Web API credentials in secrets.tar.gpg return a token again, so that the rotation is not the point at which someone has to reconstruct what it unblocks.
Nothing here is actionable until #3441 is done. Rechecked today: the archive still gives 401 {"error":"invalid_client"}, secrets.tar.gpg on main has not changed since #3366, and the only Vuforia GitHub secret is PASSPHRASE_FOR_VUFORIA_SECRETS in the vuforia environment — a passphrase, not the credentials. GitHub Actions secret values cannot be read back, so no amount of updating secrets on GitHub delivers new credentials; only a re-encrypted, committed archive does.
1. Confirm the assumptions the mock currently makes
Each of these is behaviour the mock asserts today which has never been seen from real Vuforia. Each needs one probe, then either a confirmation or a correction to the mock.
2. Convert mock-only tests which the credentials unblock
Move out of TestMockOnlyErrors into a verified fake class, correcting the mock wherever the observed response differs:
These stay mock-only even after rotation, unless the new credentials also carry the advanced and State-Based scopes (#3202):
test_advanced_model_count_exceeds_limit
test_advanced_realistic_appearance_not_in_enum
test_dataset_is_not_visible_to_the_other_dataset_type
test_state_based_dataset and test_invalid_state_based_dataset
And these stay mock-only regardless, because they need a dataset generated on every run or a failure provoked on demand:
test_processing_dataset_cannot_be_downloaded
test_failed_dataset_cannot_be_downloaded (though the status name it asserts should be confirmed — see section 1)
3. Close out the issues which are waiting on observation
4. Update docs/source/differences-to-vws.rst
The Model Target section carries several sentences whose only purpose is to record that something was unverified. Each should be deleted once confirmed, or rewritten to describe a real difference once corrected:
5. Remove the failure mechanism
Definition of done
The real-Vuforia parametrisations of tests/mock_vws/test_model_target_web_api.py report 0 xfailed, every sentence in differences-to-vws.rst describes a difference which is real rather than one which is unobserved, and each remaining mock-only test says which of the two reasons applies to it.
Follow-up to #3441, which tracks the rotation itself, and the first instance of #3445, which covers the general class: mock behaviour which has never been observed from real Vuforia and is indistinguishable from behaviour which has. This issue is the work list for after the Model Target Web API credentials in
secrets.tar.gpgreturn a token again, so that the rotation is not the point at which someone has to reconstruct what it unblocks.Nothing here is actionable until #3441 is done. Rechecked today: the archive still gives
401 {"error":"invalid_client"},secrets.tar.gpgonmainhas not changed since #3366, and the only Vuforia GitHub secret isPASSPHRASE_FOR_VUFORIA_SECRETSin thevuforiaenvironment — a passphrase, not the credentials. GitHub Actions secret values cannot be read back, so no amount of updating secrets on GitHub delivers new credentials; only a re-encrypted, committed archive does.1. Confirm the assumptions the mock currently makes
Each of these is behaviour the mock asserts today which has never been seen from real Vuforia. Each needs one probe, then either a confirmation or a correction to the mock.
/models,/name,/targetSdk). Assumed in A JSON body which is not an object raises an uncaught AttributeError #3391.400/ERROR/Invalid Json: .... Assumed in Reject Model Target request bodies which are not valid UTF-8 #3440.TestMockOnlyErrors::test_oauth2_token_body_not_utf_8.failed != done; the only status observed from real Vuforia isnot-started, for a dataset requested just after creation. Added in Report the failed training status for failed Model Target downloads #3443; currentlyTestMockOnlyErrors::test_failed_dataset_cannot_be_downloaded.Content-Type, and one with an emptyContent-Type, on each dataset route. Currently covered byTestInvalidJson::test_wrong_content_typeagainst the mock only.error.expected.jsstring,error.expected.validenumandelement is requireddetail string asserted byTestErrorResponses::test_invalid_dataset_request. These are the largest block of unverified assertions — 33 parametrisations which currently only assert that the mock agrees with itself.2. Convert mock-only tests which the credentials unblock
Move out of
TestMockOnlyErrorsinto a verified fake class, correcting the mock wherever the observed response differs:test_oauth2_token_body_not_utf_8test_unknown_datasetalready runs against real Vuforia; check theuserId:target format still matches after rotation, since the numeric portion is per-account and the new client may sit on a different account.These stay mock-only even after rotation, unless the new credentials also carry the advanced and State-Based scopes (#3202):
test_advanced_model_count_exceeds_limittest_advanced_realistic_appearance_not_in_enumtest_dataset_is_not_visible_to_the_other_dataset_typetest_state_based_datasetandtest_invalid_state_based_datasetAnd these stay mock-only regardless, because they need a dataset generated on every run or a failure provoked on demand:
test_processing_dataset_cannot_be_downloadedtest_failed_dataset_cannot_be_downloaded(though the status name it asserts should be confirmed — see section 1)3. Close out the issues which are waiting on observation
dataset.json.4. Update
docs/source/differences-to-vws.rstThe Model Target section carries several sentences whose only purpose is to record that something was unverified. Each should be deleted once confirmed, or rewritten to describe a real difference once corrected:
targetisuserId:mock." — keep, but confirm the real format is stilluserId:<numeric>on the new account.5. Remove the failure mechanism
pytest.xfailbranch intests/mock_vws/fixtures/model_target_prepared_requests.py::get_access_token, or replace it with a single loud session-scoped failure. As Every Model Target test which needs an access token is xfailed because the OAuth2 credentials are revoked #3441 notes,xfail_strictdoes not apply to an imperativepytest.xfail(), so this can never XPASS and will silently keep hiding a future revocation.Definition of done
The real-Vuforia parametrisations of
tests/mock_vws/test_model_target_web_api.pyreport 0 xfailed, every sentence indifferences-to-vws.rstdescribes a difference which is real rather than one which is unobserved, and each remaining mock-only test says which of the two reasons applies to it.