Unify trunk on main: initialization → main #3
@@ -939,20 +939,24 @@ test("a route is a grant: a workload is reached by the name it asked for", {
|
||||
// fails more visibly than a stale grant, so it must not survive the module leaving.
|
||||
await mesh("unassign laptop storefront");
|
||||
await mesh("push");
|
||||
await new Promise((r) => setTimeout(r, 20_000));
|
||||
|
||||
// The provider has to have applied before the file means anything. **The mesh withdrawing a
|
||||
// route and the machine acting on it are different things**, and a test that reads the file
|
||||
// without checking the second reports the first wrongly whenever the machine is behind for any
|
||||
// unrelated reason.
|
||||
const applied = await mesh("status");
|
||||
assert.doesNotMatch(applied, /anchor\s+(failed|refused)/,
|
||||
`the provider did not apply, so what its file says is not what the mesh decided:\n${applied}`);
|
||||
|
||||
const after = await must("anchor", `cat /etc/frontdoor/routes.json`);
|
||||
assert.doesNotMatch(after, /shop\.mesh\.test/,
|
||||
// **Waited for, not slept through.** The mesh withdrawing a route and the machine acting on it
|
||||
// are different things, and a fixed sleep between them tests whichever the clock happened to
|
||||
// land on — this assertion passed twice and failed once on nothing but timing.
|
||||
//
|
||||
// A machine that has not applied yet is also not a machine that failed, so `status` cannot
|
||||
// stand in for this: "not yet" and "never" look identical there, and only one of them is worth
|
||||
// failing over.
|
||||
let after = "";
|
||||
let withdrawn = false;
|
||||
for (let i = 0; i < 20 && !withdrawn; i++) {
|
||||
after = await must("anchor", `cat /etc/frontdoor/routes.json`);
|
||||
withdrawn = !after.includes("shop.mesh.test");
|
||||
if (!withdrawn) await new Promise((r) => setTimeout(r, 3000));
|
||||
}
|
||||
assert.ok(withdrawn,
|
||||
`the route outlived the module that asked for it:\n${after}\n\n` +
|
||||
`what the mesh would send now:\n` +
|
||||
`the machine did apply — this is what the mesh would send now:\n` +
|
||||
`${(await on("anchor", `docker exec mesh-control /mesh-control plan anchor --files`)).out}`);
|
||||
|
||||
let gone = false;
|
||||
|
||||
Reference in New Issue
Block a user