Introduces src/types.d.ts and test/types.d.ts for Cloudflare Workers and test utilities. Enhances JSDoc comments and type annotations across test files for better type safety and clarity. Updates tsconfig.json to use bundler module resolution and include additional type sources. Minor test logic and assertion improvements for robustness.
218 lines
6.2 KiB
JavaScript
218 lines
6.2 KiB
JavaScript
import { SELF } from 'cloudflare:test';
|
|
import { bench, describe } from 'vitest';
|
|
import { TEST_URLS } from '../helpers/test-utils.js';
|
|
|
|
describe('Performance Benchmarks', () => {
|
|
describe('Request Processing Speed', () => {
|
|
bench('Basic request handling', async () => {
|
|
await SELF.fetch('https://example.com/gh/test/repo/file.txt', {
|
|
method: 'HEAD'
|
|
});
|
|
});
|
|
|
|
bench('GitHub file request', async () => {
|
|
await SELF.fetch(TEST_URLS.github.file, {
|
|
method: 'HEAD'
|
|
});
|
|
});
|
|
|
|
bench('GitLab file request', async () => {
|
|
await SELF.fetch(TEST_URLS.gitlab.file, {
|
|
method: 'HEAD'
|
|
});
|
|
});
|
|
|
|
bench('Hugging Face model request', async () => {
|
|
await SELF.fetch(TEST_URLS.huggingface.model, {
|
|
method: 'HEAD'
|
|
});
|
|
});
|
|
|
|
bench('npm package request', async () => {
|
|
await SELF.fetch(TEST_URLS.npm.package, {
|
|
method: 'HEAD'
|
|
});
|
|
});
|
|
|
|
bench('PyPI package request', async () => {
|
|
await SELF.fetch(TEST_URLS.pypi.simple, {
|
|
method: 'HEAD'
|
|
});
|
|
});
|
|
|
|
bench('conda package request', async () => {
|
|
await SELF.fetch(TEST_URLS.conda.main, {
|
|
method: 'HEAD'
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('Git Protocol Performance', () => {
|
|
bench('Git info/refs request', async () => {
|
|
await SELF.fetch('https://example.com/gh/test/repo.git/info/refs?service=git-upload-pack', {
|
|
headers: {
|
|
'User-Agent': 'git/2.34.1'
|
|
}
|
|
});
|
|
});
|
|
|
|
bench('Git upload-pack request', async () => {
|
|
await SELF.fetch('https://example.com/gh/test/repo.git/git-upload-pack', {
|
|
method: 'POST',
|
|
headers: {
|
|
'User-Agent': 'git/2.34.1',
|
|
'Content-Type': 'application/x-git-upload-pack-request'
|
|
},
|
|
body: '0000'
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('Security Header Processing', () => {
|
|
bench('Security headers addition', async () => {
|
|
const response = await SELF.fetch('https://example.com/gh/test/repo/file.txt');
|
|
|
|
// Verify headers are present (this adds to processing time)
|
|
response.headers.get('Strict-Transport-Security');
|
|
response.headers.get('X-Frame-Options');
|
|
response.headers.get('X-XSS-Protection');
|
|
response.headers.get('Content-Security-Policy');
|
|
response.headers.get('Referrer-Policy');
|
|
});
|
|
});
|
|
|
|
describe('Error Handling Performance', () => {
|
|
bench('404 error handling', async () => {
|
|
await SELF.fetch('https://example.com/gh/nonexistent/repo/file.txt');
|
|
});
|
|
|
|
bench('400 error handling', async () => {
|
|
await SELF.fetch('https://example.com/invalid-platform/test');
|
|
});
|
|
|
|
bench('405 error handling', async () => {
|
|
await SELF.fetch('https://example.com/gh/test/repo/file.txt', {
|
|
method: 'DELETE'
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('Concurrent Request Handling', () => {
|
|
bench('10 concurrent requests', async () => {
|
|
const requests = Array(10)
|
|
.fill(null)
|
|
.map(() =>
|
|
SELF.fetch('https://example.com/gh/test/repo/file.txt', {
|
|
method: 'HEAD'
|
|
})
|
|
);
|
|
|
|
await Promise.all(requests);
|
|
});
|
|
|
|
bench('50 concurrent requests', async () => {
|
|
const requests = Array(50)
|
|
.fill(null)
|
|
.map(() =>
|
|
SELF.fetch('https://example.com/gh/test/repo/file.txt', {
|
|
method: 'HEAD'
|
|
})
|
|
);
|
|
|
|
await Promise.all(requests);
|
|
});
|
|
});
|
|
|
|
describe('Path Processing Performance', () => {
|
|
bench('Short path processing', async () => {
|
|
await SELF.fetch('https://example.com/gh/a/b', {
|
|
method: 'HEAD'
|
|
});
|
|
});
|
|
|
|
bench('Medium path processing', async () => {
|
|
await SELF.fetch('https://example.com/gh/user/repository/path/to/some/file.txt', {
|
|
method: 'HEAD'
|
|
});
|
|
});
|
|
|
|
bench('Long path processing', async () => {
|
|
const longPath = `/gh/user/repo/${'very-long-path-segment/'.repeat(20)}file.txt`;
|
|
await SELF.fetch(`https://example.com${longPath}`, {
|
|
method: 'HEAD'
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('URL Parsing Performance', () => {
|
|
bench('Simple URL parsing', async () => {
|
|
await SELF.fetch('https://example.com/gh/user/repo');
|
|
});
|
|
|
|
bench('URL with query parameters', async () => {
|
|
await SELF.fetch('https://example.com/gh/user/repo/file.txt?ref=main&path=src');
|
|
});
|
|
|
|
bench('URL with fragments', async () => {
|
|
await SELF.fetch('https://example.com/gh/user/repo/README.md#section');
|
|
});
|
|
|
|
bench('Complex URL parsing', async () => {
|
|
await SELF.fetch(
|
|
'https://example.com/gh/user/repo/file.txt?ref=feature/branch&path=src/components&line=123#L123'
|
|
);
|
|
});
|
|
});
|
|
|
|
describe('Memory Usage Patterns', () => {
|
|
bench('Request object creation', async () => {
|
|
const request = new Request('https://example.com/gh/test/repo/file.txt', {
|
|
method: 'GET',
|
|
headers: {
|
|
'User-Agent': 'Test/1.0',
|
|
Accept: '*/*'
|
|
}
|
|
});
|
|
|
|
// Process the request
|
|
await SELF.fetch(request);
|
|
});
|
|
|
|
bench('Response object processing', async () => {
|
|
const response = await SELF.fetch('https://example.com/gh/test/repo/file.txt');
|
|
|
|
// Access various response properties
|
|
response.status;
|
|
response.statusText;
|
|
response.headers.get('Content-Type');
|
|
response.headers.get('X-Performance-Metrics');
|
|
});
|
|
});
|
|
|
|
describe('Platform-Specific Performance', () => {
|
|
bench('GitHub platform processing', async () => {
|
|
await SELF.fetch('https://example.com/gh/microsoft/vscode/blob/main/package.json');
|
|
});
|
|
|
|
bench('GitLab platform processing', async () => {
|
|
await SELF.fetch('https://example.com/gl/gitlab-org/gitlab/-/blob/master/package.json');
|
|
});
|
|
|
|
bench('Hugging Face platform processing', async () => {
|
|
await SELF.fetch('https://example.com/hf/microsoft/DialoGPT-medium/resolve/main/config.json');
|
|
});
|
|
|
|
bench('npm platform processing', async () => {
|
|
await SELF.fetch('https://example.com/npm/react');
|
|
});
|
|
|
|
bench('PyPI platform processing', async () => {
|
|
await SELF.fetch('https://example.com/pypi/simple/requests/');
|
|
});
|
|
|
|
bench('conda platform processing', async () => {
|
|
await SELF.fetch('https://example.com/conda/pkgs/main/linux-64/numpy-1.24.3.conda');
|
|
});
|
|
});
|
|
});
|