summaryrefslogtreecommitdiffhomepage
path: root/packages/core/test/fixture
diff options
context:
space:
mode:
authorDax <[email protected]>2026-04-25 10:59:17 -0400
committerGitHub <[email protected]>2026-04-25 10:59:17 -0400
commit62ef2a220723a6d6cb050e523fcdfaa974dafdda (patch)
tree214b03d016e18e4d8fe1bfc7209c1edd86547bbd /packages/core/test/fixture
parent37aa8442dc023fad250f2573c8235a544789900c (diff)
downloadopencode-62ef2a220723a6d6cb050e523fcdfaa974dafdda.tar.gz
opencode-62ef2a220723a6d6cb050e523fcdfaa974dafdda.zip
refactor: rename shared package to core (#24309)
Diffstat (limited to 'packages/core/test/fixture')
-rw-r--r--packages/core/test/fixture/effect-flock-worker.ts63
-rw-r--r--packages/core/test/fixture/flock-worker.ts72
2 files changed, 135 insertions, 0 deletions
diff --git a/packages/core/test/fixture/effect-flock-worker.ts b/packages/core/test/fixture/effect-flock-worker.ts
new file mode 100644
index 000000000..3dc3ee2c8
--- /dev/null
+++ b/packages/core/test/fixture/effect-flock-worker.ts
@@ -0,0 +1,63 @@
+import fs from "fs/promises"
+import os from "os"
+import { Effect, Layer } from "effect"
+import { AppFileSystem } from "@opencode-ai/core/filesystem"
+import { EffectFlock } from "@opencode-ai/core/util/effect-flock"
+import { Global } from "@opencode-ai/core/global"
+
+type Msg = {
+ key: string
+ dir: string
+ holdMs?: number
+ ready?: string
+ active?: string
+ done?: string
+}
+
+function sleep(ms: number) {
+ return new Promise<void>((resolve) => setTimeout(resolve, ms))
+}
+
+const msg: Msg = JSON.parse(process.argv[2]!)
+
+const testGlobal = Layer.succeed(
+ Global.Service,
+ Global.Service.of({
+ home: os.homedir(),
+ data: os.tmpdir(),
+ cache: os.tmpdir(),
+ config: os.tmpdir(),
+ state: os.tmpdir(),
+ bin: os.tmpdir(),
+ log: os.tmpdir(),
+ }),
+)
+
+const testLayer = EffectFlock.layer.pipe(Layer.provide(testGlobal), Layer.provide(AppFileSystem.defaultLayer))
+
+async function job() {
+ if (msg.ready) await fs.writeFile(msg.ready, String(process.pid))
+ if (msg.active) await fs.writeFile(msg.active, String(process.pid), { flag: "wx" })
+
+ try {
+ if (msg.holdMs && msg.holdMs > 0) await sleep(msg.holdMs)
+ if (msg.done) await fs.appendFile(msg.done, "1\n")
+ } finally {
+ if (msg.active) await fs.rm(msg.active, { force: true })
+ }
+}
+
+await Effect.runPromise(
+ Effect.gen(function* () {
+ const flock = yield* EffectFlock.Service
+ yield* flock.withLock(
+ Effect.promise(() => job()),
+ msg.key,
+ msg.dir,
+ )
+ }).pipe(Effect.provide(testLayer)),
+).catch((err) => {
+ const text = err instanceof Error ? (err.stack ?? err.message) : String(err)
+ process.stderr.write(text)
+ process.exit(1)
+})
diff --git a/packages/core/test/fixture/flock-worker.ts b/packages/core/test/fixture/flock-worker.ts
new file mode 100644
index 000000000..0b9c314c0
--- /dev/null
+++ b/packages/core/test/fixture/flock-worker.ts
@@ -0,0 +1,72 @@
+import fs from "fs/promises"
+import { Flock } from "@opencode-ai/core/util/flock"
+
+type Msg = {
+ key: string
+ dir: string
+ staleMs?: number
+ timeoutMs?: number
+ baseDelayMs?: number
+ maxDelayMs?: number
+ holdMs?: number
+ ready?: string
+ active?: string
+ done?: string
+}
+
+function sleep(ms: number) {
+ return new Promise<void>((resolve) => {
+ setTimeout(resolve, ms)
+ })
+}
+
+function input() {
+ const raw = process.argv[2]
+ if (!raw) {
+ throw new Error("Missing flock worker input")
+ }
+
+ return JSON.parse(raw) as Msg
+}
+
+async function job(input: Msg) {
+ if (input.ready) {
+ await fs.writeFile(input.ready, String(process.pid))
+ }
+
+ if (input.active) {
+ await fs.writeFile(input.active, String(process.pid), { flag: "wx" })
+ }
+
+ try {
+ if (input.holdMs && input.holdMs > 0) {
+ await sleep(input.holdMs)
+ }
+
+ if (input.done) {
+ await fs.appendFile(input.done, "1\n")
+ }
+ } finally {
+ if (input.active) {
+ await fs.rm(input.active, { force: true })
+ }
+ }
+}
+
+async function main() {
+ const msg = input()
+
+ await Flock.withLock(msg.key, () => job(msg), {
+ dir: msg.dir,
+ staleMs: msg.staleMs,
+ timeoutMs: msg.timeoutMs,
+ baseDelayMs: msg.baseDelayMs,
+ maxDelayMs: msg.maxDelayMs,
+ })
+}
+
+await main().catch((err) => {
+ const text = err instanceof Error ? (err.stack ?? err.message) : String(err)
+ process.stderr.write(text)
+ process.exit(1)
+})