UNPKG

pipe-protocol

Version:

A protocol for large scale Interplanetary Intertool Agent Context

166 lines 7.52 kB
"use strict"; /** * @file IpfsClient Test Suite * @version 1.0.0 * @status IN_DEVELOPMENT * @lastModified 2024-02-03 * * Tests for the IpfsClient implementation */ Object.defineProperty(exports, "__esModule", { value: true }); const vitest_1 = require("vitest"); const ipfsClient_1 = require("../ipfsClient"); (0, vitest_1.describe)('IpfsClient', () => { let client; (0, vitest_1.beforeEach)(() => { client = new ipfsClient_1.IPFSClient({ endpoint: 'http://localhost:5001', timeout: 5000, scope: 'private', pin: true }); // Initialize storage maps client['storedData'] = new Map(); client['pinnedCids'] = new Map([ ['private', new Set()], ['public', new Set()] ]); }); (0, vitest_1.afterEach)(async () => { await client.stop(); client['storedData'].clear(); client['pinnedCids'].get('private')?.clear(); client['pinnedCids'].get('public')?.clear(); }); (0, vitest_1.describe)('Record Management', () => { (0, vitest_1.it)('should handle non-existent CIDs', async () => { const result = await client.fetch('non-existent-cid', 'private'); (0, vitest_1.expect)(result).toBeNull(); }); (0, vitest_1.it)('should store and fetch records', async () => { const record = { type: 'data', content: { message: 'test message' }, scope: 'private', pinned: true, accessPolicy: { hiddenFromLLM: false } }; const cid = await client.store(record); (0, vitest_1.expect)(cid).toBeDefined(); const fetched = await client.fetch(cid, 'private'); (0, vitest_1.expect)(fetched).not.toBeNull(); (0, vitest_1.expect)(fetched?.content).toEqual(record.content); // Test pinning operations await client.pin(cid, 'private'); const pinnedCids = await client.getPinnedCids('private'); (0, vitest_1.expect)(pinnedCids).toContain(cid); await client.unpin(cid, 'private'); const afterUnpinCids = await client.getPinnedCids('private'); (0, vitest_1.expect)(afterUnpinCids).not.toContain(cid); }); }); (0, vitest_1.describe)('Pinning Operations', () => { (0, vitest_1.it)('should pin and unpin records', async () => { const record = { type: 'data', content: { message: 'Pin me!' }, scope: 'private', pinned: true, accessPolicy: { hiddenFromLLM: false } }; const cid = await client.store(record); (0, vitest_1.expect)(cid).toBeDefined(); // Verify it's in pinned records const pinnedBefore = await client.getPinnedCids('private'); (0, vitest_1.expect)(pinnedBefore).toContain(cid); // Unpin and verify await client.unpin(cid, 'private'); const pinnedAfter = await client.getPinnedCids('private'); (0, vitest_1.expect)(pinnedAfter).not.toContain(cid); }); }); (0, vitest_1.describe)('Record Replication', () => { (0, vitest_1.it)('should replicate records between scopes', async () => { const content = { message: 'Test data' }; // Store the initial record const cid = await client.store(content, { scope: 'private' }); // Replicate from private to public const newCid = await client.replicate(cid, 'private', 'public'); // Verify the original record is still in private scope const originalContent = await client.fetch(cid, 'private'); (0, vitest_1.expect)(originalContent).not.toBeNull(); (0, vitest_1.expect)(originalContent).toEqual(content); // Verify the replicated record is in public scope const replicatedContent = await client.fetch(newCid, 'public'); (0, vitest_1.expect)(replicatedContent).not.toBeNull(); (0, vitest_1.expect)(replicatedContent).toEqual(content); }); }); (0, vitest_1.describe)('Storage Metrics', () => { (0, vitest_1.it)('should track pinned records in metrics', async () => { const record = { type: 'data', content: { message: 'Track me!' }, scope: 'private', pinned: true, accessPolicy: { hiddenFromLLM: false } }; const metricsBefore = await client.getStorageMetrics('private'); const cid = await client.store(record); (0, vitest_1.expect)(cid).toBeDefined(); const metricsAfter = await client.getStorageMetrics('private'); (0, vitest_1.expect)(metricsAfter.numObjects).toBe(metricsBefore.numObjects + 1); }); }); (0, vitest_1.describe)('Node Information', () => { (0, vitest_1.it)('should get node status', () => { const status = client.getStatus(); (0, vitest_1.expect)(status).toHaveProperty('localNode'); (0, vitest_1.expect)(status).toHaveProperty('publicNode'); }); (0, vitest_1.it)('should get node info', async () => { const info = await client.getNodeInfo('private'); (0, vitest_1.expect)(info).toBeDefined(); }); (0, vitest_1.it)('should get storage metrics', async () => { const metrics = await client.getStorageMetrics('private'); (0, vitest_1.expect)(metrics).toHaveProperty('totalSize'); (0, vitest_1.expect)(metrics).toHaveProperty('numObjects'); }); }); (0, vitest_1.describe)('Scope Management', () => { (0, vitest_1.it)('should handle different scopes correctly', async () => { const privateRecord = { type: 'data', content: { private: true }, scope: 'private', pinned: false, accessPolicy: { hiddenFromLLM: false } }; const cid = await client.store(privateRecord); (0, vitest_1.expect)(cid).toBeDefined(); const fetchedPrivate = await client.fetch(cid, 'private'); (0, vitest_1.expect)(fetchedPrivate).not.toBeNull(); (0, vitest_1.expect)(fetchedPrivate?.content).toEqual(privateRecord.content); (0, vitest_1.expect)(fetchedPrivate?.scope).toBe('private'); }); (0, vitest_1.it)('should prevent cross-scope access', async () => { const record = { type: 'data', content: { test: 'data' }, scope: 'private', pinned: false, accessPolicy: { hiddenFromLLM: false } }; const cid = await client.store(record); (0, vitest_1.expect)(cid).toBeDefined(); const fetchedPrivate = await client.fetch(cid, 'private'); (0, vitest_1.expect)(fetchedPrivate).not.toBeNull(); (0, vitest_1.expect)(fetchedPrivate?.content).toEqual(record.content); (0, vitest_1.expect)(fetchedPrivate?.scope).toBe('private'); const fetchedPublic = await client.fetch(cid, 'public'); (0, vitest_1.expect)(fetchedPublic).toBeNull(); }); }); }); //# sourceMappingURL=ipfsClient.test.js.map