/**
* Simple test script for DockerClient and Container
*/
import { dockerClient } from './docker/DockerClient.js';
import { Container } from './docker/Container.js';
async function testDocker() {
console.log('๐งช Testing Docker connection...\n');
try {
// 1. Ping Docker
console.log('1๏ธโฃ Pinging Docker...');
const isPingOk = await dockerClient.ping();
console.log(` โ
Docker is ${isPingOk ? 'RUNNING' : 'NOT RUNNING'}\n`);
if (!isPingOk) {
throw new Error('Docker is not running');
}
// 2. Get Docker info
console.log('2๏ธโฃ Getting Docker info...');
const info = await dockerClient.getInfo();
console.log(` โ
Docker version: ${info.ServerVersion}`);
console.log(` โ
Operating system: ${info.OperatingSystem}`);
console.log(` โ
Architecture: ${info.Architecture}\n`);
// 3. Pull Python image
console.log('3๏ธโฃ Pulling python:3.11-slim image (this may take a minute)...');
await dockerClient.pullImage('python:3.11-slim', (progress) => {
if (progress.status === 'Downloading' || progress.status === 'Extracting') {
process.stdout.write(` ๐ฆ ${progress.status}...\r`);
}
});
console.log(' โ
Image pulled successfully\n');
// 4. Create container
console.log('4๏ธโฃ Creating container...');
const dockerContainer = await dockerClient.createContainer({
image: 'python:3.11-slim',
language: 'python',
memory: '256m',
cpus: '0.5',
});
const container = new Container(dockerContainer, 'python');
console.log(` โ
Container created: ${container.id.substring(0, 12)}\n`);
// 5. Start container
console.log('5๏ธโฃ Starting container...');
await container.start();
console.log(' โ
Container started\n');
// 6. Execute simple command
console.log('6๏ธโฃ Executing Python code...');
const result = await container.exec(['python', '-c', 'print("Hello from MCP Sandbox!")']);
console.log(` โ
Exit code: ${result.exitCode}`);
console.log(` โ
Output: ${result.stdout.trim()}`);
console.log(` โ
Duration: ${result.duration}ms\n`);
// 7. Test file operations
console.log('7๏ธโฃ Testing file operations...');
await container.putFile('/tmp/test.txt', 'Hello World!');
const fileContent = await container.getFile('/tmp/test.txt');
console.log(` โ
File written and read: ${fileContent.toString().trim()}\n`);
// 8. Get container stats
console.log('8๏ธโฃ Getting container stats...');
const stats = await container.stats();
console.log(` โ
Memory usage: ${stats.memoryPeakMB.toFixed(2)} MB`);
console.log(` โ
CPU time: ${stats.cpuTimeMs.toFixed(2)} ms\n`);
// 9. Stop container
console.log('9๏ธโฃ Stopping container...');
await container.stop();
console.log(' โ
Container stopped\n');
// 10. Remove container
console.log('๐ Removing container...');
await container.remove();
console.log(' โ
Container removed\n');
console.log('๐ All tests passed!\n');
} catch (error: any) {
console.error('โ Test failed:', error.message);
process.exit(1);
}
}
testDocker();