docs-oauth-connector-stress.test.mjs
122 lines 3.7 KB
Raw
sha256:700fafdd1afa490919f9515d660ca6e75456bcd5bb67513abcd8757a634c01f6 docs: record AIP-b SD-21 land (KN #308) Human 10 days ago
1 import assert from 'node:assert/strict';
2 import fs from 'node:fs';
3 import os from 'node:os';
4 import path from 'node:path';
5 import test from 'node:test';
6
7 import {
8 createFakeGoogleDriveClient,
9 handleListDocsConnectorFiles,
10 handleSyncDocsConnector,
11 } from '../lib/docs/google-drive-connector.mjs';
12 import { saveConnector } from '../lib/docs/docs-connector-store.mjs';
13 import { writeOAuthTokenVault } from '../lib/docs/oauth-token-vault.mjs';
14
15 test('stress: concurrent sync rejects the second request', async () => {
16 const dataDir = fs.mkdtempSync(path.join(os.tmpdir(), 'kn-docs-stress-data-'));
17 const vaultPath = fs.mkdtempSync(path.join(os.tmpdir(), 'kn-docs-stress-vault-'));
18 const connectorId = 'conn_0123456789abcdef';
19 const env = {
20 GOOGLE_DRIVE_OAUTH_CLIENT_ID: 'client',
21 GOOGLE_DRIVE_OAUTH_CLIENT_SECRET: 'credential',
22 KNOWTATION_DOCS_OAUTH_SECRET: 'x'.repeat(32),
23 DOCS_OAUTH_REDIRECT_URI: 'https://hub.example/callback',
24 };
25 saveConnector(dataDir, 'vault-s', {
26 connector_id: connectorId,
27 provider: 'google-drive',
28 display_name: 'Drive',
29 status: 'connected',
30 oauth_ref: connectorId,
31 account_sub: 'subject',
32 sync_cursor: null,
33 last_sync_at: null,
34 last_sync_error: 'none',
35 file_count: 0,
36 revoked_at: null,
37 oauth_pending: null,
38 });
39 writeOAuthTokenVault(dataDir, connectorId, env.KNOWTATION_DOCS_OAUTH_SECRET, {
40 refresh_token: 'refresh',
41 scope: 'openid https://www.googleapis.com/auth/drive.readonly',
42 token_type: 'Bearer',
43 obtained_at: '2026-08-17T00:00:00Z',
44 account_sub: 'subject',
45 });
46 let release;
47 const blocked = new Promise((resolve) => { release = resolve; });
48 const client = createFakeGoogleDriveClient({
49 filesList: async () => {
50 await blocked;
51 return { files: [] };
52 },
53 });
54 const ctx = {
55 dataDir,
56 vaultPath,
57 vaultId: 'vault-s',
58 connectorId,
59 env,
60 googleClient: client,
61 authorizedOverride: true,
62 now: 100_000,
63 };
64 const first = handleSyncDocsConnector(ctx);
65 await new Promise((resolve) => setImmediate(resolve));
66 const second = await handleSyncDocsConnector(ctx);
67 assert.equal(second.status, 429);
68 assert.equal(second.code, 'RATE_LIMITED');
69 release();
70 assert.equal((await first).ok, true);
71 });
72
73 test('stress: provider rate limiting retries at most three times', async () => {
74 const dataDir = fs.mkdtempSync(path.join(os.tmpdir(), 'kn-docs-rate-data-'));
75 const connectorId = 'conn_fedcba9876543210';
76 const env = {
77 GOOGLE_DRIVE_OAUTH_CLIENT_ID: 'client',
78 GOOGLE_DRIVE_OAUTH_CLIENT_SECRET: 'credential',
79 KNOWTATION_DOCS_OAUTH_SECRET: 'r'.repeat(32),
80 DOCS_OAUTH_REDIRECT_URI: 'https://hub.example/callback',
81 };
82 saveConnector(dataDir, 'vault-r', {
83 connector_id: connectorId,
84 provider: 'google-drive',
85 display_name: 'Drive',
86 status: 'connected',
87 oauth_ref: connectorId,
88 account_sub: 'subject',
89 sync_cursor: null,
90 last_sync_at: null,
91 last_sync_error: 'none',
92 file_count: 0,
93 revoked_at: null,
94 oauth_pending: null,
95 });
96 writeOAuthTokenVault(dataDir, connectorId, env.KNOWTATION_DOCS_OAUTH_SECRET, {
97 refresh_token: 'refresh',
98 scope: 'openid https://www.googleapis.com/auth/drive.readonly',
99 token_type: 'Bearer',
100 obtained_at: '2026-08-17T00:00:00Z',
101 account_sub: 'subject',
102 });
103 let calls = 0;
104 const client = createFakeGoogleDriveClient({
105 filesList: () => {
106 calls += 1;
107 return { status: 429, retryAfterMs: 1 };
108 },
109 });
110 const response = await handleListDocsConnectorFiles({
111 dataDir,
112 vaultId: 'vault-r',
113 connectorId,
114 query: {},
115 env,
116 googleClient: client,
117 authorizedOverride: true,
118 sleepFn: async () => {},
119 });
120 assert.equal(response.code, 'RATE_LIMITED');
121 assert.equal(calls, 3);
122 });
File History 1 commit
sha256:700fafdd1afa490919f9515d660ca6e75456bcd5bb67513abcd8757a634c01f6 docs: record AIP-b SD-21 land (KN #308) Human 10 days ago