|
1 | 1 | from unittest.mock import MagicMock
|
2 | 2 |
|
3 | 3 | import auslib.web.public.helpers
|
4 |
| -import auslib.web.public.json |
| 4 | +from auslib.blobs.base import createBlob |
| 5 | +from auslib.global_state import cache, dbo |
5 | 6 |
|
6 | 7 |
|
7 | 8 | def test_get_content_signature_headers(monkeypatch):
|
@@ -32,3 +33,79 @@ def mock_sign_hash(_, key, *__):
|
32 | 33 | assert auslib.web.public.helpers.get_content_signature_headers(content, product) == {"Content-Signature": f"x5u={x5u}; p384ecdsa={ecdsa}"}
|
33 | 34 |
|
34 | 35 | assert mocksign.call_count == 1
|
| 36 | + |
| 37 | + |
| 38 | +def test_warm_caches(db_schema, insert_release, firefox_54_0_1_build1, firefox_67_0_build1, superblob_e8f4a19, hotfix_bug_1548973_1_1_4, timecop_1_0): |
| 39 | + dbo.setDb("sqlite:///:memory:") |
| 40 | + db_schema.create_all(dbo.engine) |
| 41 | + dbo.rules.t.insert().execute( |
| 42 | + rule_id=5, |
| 43 | + priority=90, |
| 44 | + backgroundRate=100, |
| 45 | + mapping="Firefox-67.0-build1", |
| 46 | + fallbackMapping="Firefox-54.0.1-build1", |
| 47 | + update_type="minor", |
| 48 | + product="Firefox", |
| 49 | + mig64=True, |
| 50 | + data_version=1, |
| 51 | + ) |
| 52 | + dbo.rules.t.insert().execute( |
| 53 | + priority=300, |
| 54 | + product="SystemAddons", |
| 55 | + channel="releasesjson", |
| 56 | + mapping="Superblob-e8f4a19cfd695bf0eb66a2115313c31cc23a2369c0dc7b736d2f66d9075d7c66", |
| 57 | + backgroundRate=100, |
| 58 | + update_type="minor", |
| 59 | + data_version=1, |
| 60 | + ) |
| 61 | + dbo.releases.t.insert().execute( |
| 62 | + name="Firefox-54.0.1-build1", |
| 63 | + product="Firefox", |
| 64 | + data_version=1, |
| 65 | + data=createBlob(firefox_54_0_1_build1), |
| 66 | + ) |
| 67 | + insert_release(firefox_67_0_build1, "Firefox", history=False) |
| 68 | + insert_release(superblob_e8f4a19, "SystemAddons", history=False) |
| 69 | + insert_release(hotfix_bug_1548973_1_1_4, "SystemAddons", history=False) |
| 70 | + insert_release(timecop_1_0, "SystemAddons", history=False) |
| 71 | + cache.reset() |
| 72 | + cache.make_cache("blob", 50, 3600) |
| 73 | + cache.make_cache("releases", 50, 3600) |
| 74 | + cache.make_cache("release_assets", 50, 3600) |
| 75 | + |
| 76 | + for cache_name in ("blob", "releases", "release_assets"): |
| 77 | + c = cache.caches[cache_name] |
| 78 | + assert c.lookups == 0, cache_name |
| 79 | + assert c.hits == 0, cache_name |
| 80 | + assert c.misses == 0, cache_name |
| 81 | + |
| 82 | + auslib.web.public.helpers.warm_caches() |
| 83 | + |
| 84 | + # one lookup per release, all misses |
| 85 | + assert cache.caches["blob"].lookups == 1 |
| 86 | + assert cache.caches["blob"].hits == 0 |
| 87 | + assert cache.caches["blob"].misses == 1 |
| 88 | + for cache_name in ("releases", "release_assets"): |
| 89 | + c = cache.caches[cache_name] |
| 90 | + # There are 13 lookups here, which cover the following: |
| 91 | + # - an attempt to look up 54.0.1 in this table (1) |
| 92 | + # - an attempt to look up the 3 releases referenced by 54.0.1 (4) |
| 93 | + # - the superblob (5) |
| 94 | + # - the two releases referenced by the superblob (7) |
| 95 | + # - 67.0 (8) |
| 96 | + # - the 5 releases referenced by 67.0 (13) |
| 97 | + assert c.lookups == 13, cache_name |
| 98 | + assert c.hits == 0, cache_name |
| 99 | + assert c.misses == 13, cache_name |
| 100 | + |
| 101 | + auslib.web.public.helpers.warm_caches() |
| 102 | + |
| 103 | + # another lookup per release, all hits this time |
| 104 | + assert cache.caches["blob"].lookups == 2 |
| 105 | + assert cache.caches["blob"].hits == 1 |
| 106 | + assert cache.caches["blob"].misses == 1 |
| 107 | + for cache_name in ("releases", "release_assets"): |
| 108 | + c = cache.caches[cache_name] |
| 109 | + assert c.lookups == 26, cache_name |
| 110 | + assert c.hits == 13, cache_name |
| 111 | + assert c.misses == 13, cache_name |
0 commit comments