agent-credentials-stress.test.mjs
44 lines 1.4 KB
Raw
sha256:e4c529f14a0bb908c1caaaeb3f95f3623a1a82e636e7e3722ca2cd3dc9821263 security: npm audit fix pre-bridge 2026-07-29 Human 39 days ago
1 /**
2 * Phase C — stress: concurrent exchanges must not revoke opaque credential.
3 */
4
5 import { describe, it } from 'node:test';
6 import assert from 'node:assert/strict';
7 import {
8 mintCredential,
9 verifyCredential,
10 } from '../hub/lib/agent-credential-core.mjs';
11
12 describe('Phase C stress — concurrent verify', () => {
13 it('100 sequential verifies leave credential valid (no consume-on-use)', () => {
14 let { records, credential } = mintCredential({}, {
15 sub: 'google:1',
16 name: 'stress',
17 vault_ids: ['default'],
18 scopes: ['propose', 'vault:read'],
19 now: Date.now(),
20 });
21 for (let i = 0; i < 100; i += 1) {
22 const v = verifyCredential(records, credential, { now: Date.now() + i });
23 assert.equal(v.ok, true, `verify ${i} failed`);
24 records = v.records;
25 }
26 const last = verifyCredential(records, credential, { now: Date.now() + 1000 });
27 assert.equal(last.ok, true);
28 });
29
30 it('parallel verify clones do not invent reuse failures', async () => {
31 const { records, credential } = mintCredential({}, {
32 sub: 'google:1',
33 name: 'stress-p',
34 vault_ids: ['default'],
35 scopes: ['propose', 'vault:read'],
36 });
37 const results = await Promise.all(
38 Array.from({ length: 40 }, () =>
39 Promise.resolve(verifyCredential(records, credential))
40 )
41 );
42 assert.ok(results.every((r) => r.ok === true));
43 });
44 });
File History 1 commit
sha256:e4c529f14a0bb908c1caaaeb3f95f3623a1a82e636e7e3722ca2cd3dc9821263 security: npm audit fix pre-bridge 2026-07-29 Human 39 days ago