test: cover fallback lease for Week replay
This commit is contained in:
parent
e92e476f49
commit
2e8efdb2bb
|
|
@ -2,6 +2,8 @@ import json
|
||||||
import subprocess
|
import subprocess
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
FRONTEND = Path(__file__).parents[1] / "frontend"
|
FRONTEND = Path(__file__).parents[1] / "frontend"
|
||||||
CONTROLLER = FRONTEND / "week-plan.js"
|
CONTROLLER = FRONTEND / "week-plan.js"
|
||||||
|
|
@ -400,16 +402,25 @@ console.log(JSON.stringify({queuedFirst,queuedSecond,resumed,confirmed,delivered
|
||||||
assert result["state"]["revision"] == 9
|
assert result["state"]["revision"] == 9
|
||||||
|
|
||||||
|
|
||||||
def test_week_controller_allows_only_one_tab_to_replay_the_shared_pull_queue():
|
@pytest.mark.parametrize(
|
||||||
result = run_controller("""
|
"coordinator_setup",
|
||||||
const values=new Map(),held=new Set();
|
[
|
||||||
const storage={getItem:key=>values.get(key)||null,setItem:(key,value)=>values.set(key,value),removeItem:key=>values.delete(key)};
|
"""const locks={request:async(name,_options,work)=>{
|
||||||
const locks={request:async(name,_options,work)=>{
|
|
||||||
if(held.has(name))return work(null);
|
if(held.has(name))return work(null);
|
||||||
held.add(name);try{return await work({name});}finally{held.delete(name);}
|
held.add(name);try{return await work({name});}finally{held.delete(name);}
|
||||||
}};
|
}};
|
||||||
const coordinatorA=createOutboxCoordinator({storage,locks,channelFactory:null,tabId:'a'});
|
const coordinatorA=createOutboxCoordinator({storage,locks,channelFactory:null,tabId:'a'});
|
||||||
const coordinatorB=createOutboxCoordinator({storage,locks,channelFactory:null,tabId:'b'});
|
const coordinatorB=createOutboxCoordinator({storage,locks,channelFactory:null,tabId:'b'});""",
|
||||||
|
"""const coordinatorA=createOutboxCoordinator({storage,locks:null,channelFactory:null,tabId:'a',now:()=>100});
|
||||||
|
const coordinatorB=createOutboxCoordinator({storage,locks:null,channelFactory:null,tabId:'b',now:()=>100});""",
|
||||||
|
],
|
||||||
|
ids=["navigator-lock", "storage-lease"],
|
||||||
|
)
|
||||||
|
def test_week_controller_allows_only_one_tab_to_replay_the_shared_pull_queue(coordinator_setup):
|
||||||
|
result = run_controller("""
|
||||||
|
const values=new Map(),held=new Set();
|
||||||
|
const storage={getItem:key=>values.get(key)||null,setItem:(key,value)=>values.set(key,value),removeItem:key=>values.delete(key)};
|
||||||
|
COORDINATOR_SETUP
|
||||||
let offline=true,posts=0,release;
|
let offline=true,posts=0,release;
|
||||||
const gate=new Promise(resolve=>release=resolve);
|
const gate=new Promise(resolve=>release=resolve);
|
||||||
const fetchJson=async(_url,options={})=>{
|
const fetchJson=async(_url,options={})=>{
|
||||||
|
|
@ -431,7 +442,7 @@ const skipped=await second.flushPull();
|
||||||
release();
|
release();
|
||||||
const confirmed=await firstFlush;
|
const confirmed=await firstFlush;
|
||||||
console.log(JSON.stringify({posts,skipped,confirmed,pending:first.pendingPull()}));
|
console.log(JSON.stringify({posts,skipped,confirmed,pending:first.pendingPull()}));
|
||||||
""")
|
""".replace("COORDINATOR_SETUP", coordinator_setup))
|
||||||
|
|
||||||
assert result["posts"] == 1
|
assert result["posts"] == 1
|
||||||
assert result["skipped"]["lease_skipped"] is True
|
assert result["skipped"]["lease_skipped"] is True
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user