pipe-protocol
Version:
A protocol for large scale Interplanetary Intertool Agent Context
166 lines • 7.52 kB
JavaScript
;
/**
* @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