+175
test/.gitignore
+175
test/.gitignore
···
1
+
# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore
2
+
3
+
# Logs
4
+
5
+
logs
6
+
_.log
7
+
npm-debug.log_
8
+
yarn-debug.log*
9
+
yarn-error.log*
10
+
lerna-debug.log*
11
+
.pnpm-debug.log*
12
+
13
+
# Caches
14
+
15
+
.cache
16
+
17
+
# Diagnostic reports (https://nodejs.org/api/report.html)
18
+
19
+
report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
20
+
21
+
# Runtime data
22
+
23
+
pids
24
+
_.pid
25
+
_.seed
26
+
*.pid.lock
27
+
28
+
# Directory for instrumented libs generated by jscoverage/JSCover
29
+
30
+
lib-cov
31
+
32
+
# Coverage directory used by tools like istanbul
33
+
34
+
coverage
35
+
*.lcov
36
+
37
+
# nyc test coverage
38
+
39
+
.nyc_output
40
+
41
+
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
42
+
43
+
.grunt
44
+
45
+
# Bower dependency directory (https://bower.io/)
46
+
47
+
bower_components
48
+
49
+
# node-waf configuration
50
+
51
+
.lock-wscript
52
+
53
+
# Compiled binary addons (https://nodejs.org/api/addons.html)
54
+
55
+
build/Release
56
+
57
+
# Dependency directories
58
+
59
+
node_modules/
60
+
jspm_packages/
61
+
62
+
# Snowpack dependency directory (https://snowpack.dev/)
63
+
64
+
web_modules/
65
+
66
+
# TypeScript cache
67
+
68
+
*.tsbuildinfo
69
+
70
+
# Optional npm cache directory
71
+
72
+
.npm
73
+
74
+
# Optional eslint cache
75
+
76
+
.eslintcache
77
+
78
+
# Optional stylelint cache
79
+
80
+
.stylelintcache
81
+
82
+
# Microbundle cache
83
+
84
+
.rpt2_cache/
85
+
.rts2_cache_cjs/
86
+
.rts2_cache_es/
87
+
.rts2_cache_umd/
88
+
89
+
# Optional REPL history
90
+
91
+
.node_repl_history
92
+
93
+
# Output of 'npm pack'
94
+
95
+
*.tgz
96
+
97
+
# Yarn Integrity file
98
+
99
+
.yarn-integrity
100
+
101
+
# dotenv environment variable files
102
+
103
+
.env
104
+
.env.development.local
105
+
.env.test.local
106
+
.env.production.local
107
+
.env.local
108
+
109
+
# parcel-bundler cache (https://parceljs.org/)
110
+
111
+
.parcel-cache
112
+
113
+
# Next.js build output
114
+
115
+
.next
116
+
out
117
+
118
+
# Nuxt.js build / generate output
119
+
120
+
.nuxt
121
+
dist
122
+
123
+
# Gatsby files
124
+
125
+
# Comment in the public line in if your project uses Gatsby and not Next.js
126
+
127
+
# https://nextjs.org/blog/next-9-1#public-directory-support
128
+
129
+
# public
130
+
131
+
# vuepress build output
132
+
133
+
.vuepress/dist
134
+
135
+
# vuepress v2.x temp and cache directory
136
+
137
+
.temp
138
+
139
+
# Docusaurus cache and generated files
140
+
141
+
.docusaurus
142
+
143
+
# Serverless directories
144
+
145
+
.serverless/
146
+
147
+
# FuseBox cache
148
+
149
+
.fusebox/
150
+
151
+
# DynamoDB Local files
152
+
153
+
.dynamodb/
154
+
155
+
# TernJS port file
156
+
157
+
.tern-port
158
+
159
+
# Stores VSCode versions used for testing VSCode extensions
160
+
161
+
.vscode-test
162
+
163
+
# yarn v2
164
+
165
+
.yarn/cache
166
+
.yarn/unplugged
167
+
.yarn/build-state.yml
168
+
.yarn/install-state.gz
169
+
.pnp.*
170
+
171
+
# IntelliJ based IDEs
172
+
.idea
173
+
174
+
# Finder (MacOS) folder config
175
+
.DS_Store
+15
test/README.md
+15
test/README.md
+32
test/bun.lock
+32
test/bun.lock
···
1
+
{
2
+
"lockfileVersion": 1,
3
+
"workspaces": {
4
+
"": {
5
+
"name": "test",
6
+
"dependencies": {
7
+
"k6": "^0.0.0",
8
+
},
9
+
"devDependencies": {
10
+
"@types/bun": "latest",
11
+
},
12
+
"peerDependencies": {
13
+
"typescript": "^5.0.0",
14
+
},
15
+
},
16
+
},
17
+
"packages": {
18
+
"@types/bun": ["@types/bun@1.2.0", "", { "dependencies": { "bun-types": "1.2.0" } }, "sha512-5N1JqdahfpBlAv4wy6svEYcd/YfO2GNrbL95JOmFx8nkE6dbK4R0oSE5SpBA4vBRqgrOUAXF8Dpiz+gi7r80SA=="],
19
+
20
+
"@types/node": ["@types/node@22.10.10", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-X47y/mPNzxviAGY5TcYPtYL8JsY3kAq2n8fMmKoRCxq/c4v4pyGNCzM2R6+M5/umG4ZfHuT+sgqDYqWc9rJ6ww=="],
21
+
22
+
"@types/ws": ["@types/ws@8.5.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw=="],
23
+
24
+
"bun-types": ["bun-types@1.2.0", "", { "dependencies": { "@types/node": "*", "@types/ws": "~8.5.10" } }, "sha512-KEaJxyZfbV/c4eyG0vyehDpYmBGreNiQbZIqvVHJwZ4BmeuWlNZ7EAzMN2Zcd7ailmS/tGVW0BgYbGf+lGEpWw=="],
25
+
26
+
"k6": ["k6@0.0.0", "", {}, "sha512-GAQSWayS2+LjbH5bkRi+pMPYyP1JSp7o+4j58ANZ762N/RH/SdlAT3CHHztnn8s/xgg8kYNM24Gd2IPo9b5W+g=="],
27
+
28
+
"typescript": ["typescript@5.7.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw=="],
29
+
30
+
"undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="],
31
+
}
32
+
}
+1
test/index.ts
+1
test/index.ts
···
1
+
console.log("Hello via Bun!");
+39
test/mikubeam.js
+39
test/mikubeam.js
···
1
+
import http from "k6/http";
2
+
import { check, sleep } from "k6";
3
+
4
+
// Test configuration
5
+
export const options = {
6
+
stages: [
7
+
{ duration: "30s", target: 50 }, // Ramp up to 50 users
8
+
{ duration: "1m", target: 50 }, // Stay at 50 users for 1 minute
9
+
{ duration: "30s", target: 100 }, // Ramp up to 100 users
10
+
{ duration: "1m", target: 100 }, // Stay at 100 users for 1 minute
11
+
{ duration: "30s", target: 0 }, // Ramp down to 0 users
12
+
],
13
+
thresholds: {
14
+
http_req_duration: ["p(95)<500"], // 95% of requests should be below 500ms
15
+
"checks{type:redirect}": ["rate>0.95"], // 95% success rate
16
+
},
17
+
};
18
+
19
+
const SHORTENED_URL = "http://localhost:8080/mikubeam";
20
+
21
+
export default function () {
22
+
const res = http.get(SHORTENED_URL, {
23
+
tags: { type: "redirect" },
24
+
redirects: 0, // Don't follow redirects to measure just the redirect response
25
+
});
26
+
27
+
// Check if we got a redirect status (307)
28
+
check(
29
+
res,
30
+
{
31
+
"status is 307": (r) => r.status === 307,
32
+
"has location header": (r) => r.headers["Location"] !== undefined,
33
+
},
34
+
{ type: "redirect" }
35
+
);
36
+
37
+
sleep(1); // Add some think time between requests
38
+
}
39
+
+14
test/package.json
+14
test/package.json
+27
test/tsconfig.json
+27
test/tsconfig.json
···
1
+
{
2
+
"compilerOptions": {
3
+
// Enable latest features
4
+
"lib": ["ESNext", "DOM"],
5
+
"target": "ESNext",
6
+
"module": "ESNext",
7
+
"moduleDetection": "force",
8
+
"jsx": "react-jsx",
9
+
"allowJs": true,
10
+
11
+
// Bundler mode
12
+
"moduleResolution": "bundler",
13
+
"allowImportingTsExtensions": true,
14
+
"verbatimModuleSyntax": true,
15
+
"noEmit": true,
16
+
17
+
// Best practices
18
+
"strict": true,
19
+
"skipLibCheck": true,
20
+
"noFallthroughCasesInSwitch": true,
21
+
22
+
// Some stricter flags (disabled by default)
23
+
"noUnusedLocals": false,
24
+
"noUnusedParameters": false,
25
+
"noPropertyAccessFromIndexSignature": false
26
+
}
27
+
}