-
Notifications
You must be signed in to change notification settings - Fork 19
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
8 changed files
with
235 additions
and
36 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
name: Test | ||
on: | ||
push: | ||
branches: | ||
- main | ||
- dev | ||
|
||
jobs: | ||
test: | ||
if: github.repository == 'oustn/cloudflare-bark-server' | ||
name: Test | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 0 | ||
- name: Install pnpm | ||
uses: pnpm/action-setup@v4 | ||
with: | ||
run_install: false | ||
- name: Setup Node.js | ||
uses: actions/setup-node@v4 | ||
with: | ||
node-version: "lts/*" | ||
cache: 'pnpm' | ||
- name: Install dependencies | ||
run: pnpm install | ||
- name: Run test | ||
run: npm run test |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
import { createExecutionContext, waitOnExecutionContext, SELF } from 'cloudflare:test'; | ||
import { describe, it, expect, vi } from 'vitest'; | ||
import worker from '../src/index'; | ||
import { env, serverlessEnv } from "./helpers/env" | ||
import * as middleware from "../src/middlewares" | ||
|
||
const IncomingRequest = Request<unknown, IncomingRequestCfProperties>; | ||
|
||
describe('Basic info routes', () => { | ||
// 1. test info endpoint | ||
it('ping (unit style)', async () => { | ||
const dbMiddlewareSpy = vi.spyOn(middleware, 'dbMiddleware'); | ||
const request = new IncomingRequest('https://example.com/ping'); | ||
const ctx = createExecutionContext(); | ||
const response = await worker.fetch(request, env, ctx); | ||
await waitOnExecutionContext(ctx); | ||
expect(dbMiddlewareSpy).not.toHaveBeenCalled(); | ||
expect(await response.json()).toMatchObject({ message: 'pong' }); | ||
}); | ||
|
||
it('ping (integration style)', async () => { | ||
const response = await SELF.fetch('https://example.com/ping'); | ||
expect(await response.json()).toMatchObject({ message: 'pong' }); | ||
}); | ||
|
||
// 2. test healthz endpoint | ||
it('responds with ok (unit style)', async () => { | ||
const request = new IncomingRequest('https://example.com/healthz'); | ||
const ctx = createExecutionContext(); | ||
const response = await worker.fetch(request, env, ctx); | ||
await waitOnExecutionContext(ctx); | ||
expect(await response.text()).toBe('ok'); | ||
}); | ||
|
||
it('responds with ok (integration style)', async () => { | ||
const response = await SELF.fetch('https://example.com/healthz'); | ||
expect(await response.text()).toBe('ok'); | ||
}); | ||
|
||
// 3. test info endpoint | ||
it('responds with info (unit style)', async () => { | ||
const request = new IncomingRequest('https://example.com/info'); | ||
const ctx = createExecutionContext(); | ||
const response = await worker.fetch(request, env, ctx); | ||
await waitOnExecutionContext(ctx); | ||
expect(await response.json()).toMatchObject({ serverless: false }); | ||
}); | ||
|
||
it('responds with serverless info (unit style)', async () => { | ||
const request = new IncomingRequest('https://example.com/info'); | ||
const ctx = createExecutionContext(); | ||
const response = await worker.fetch(request, serverlessEnv, ctx); | ||
await waitOnExecutionContext(ctx); | ||
expect(await response.json()).toMatchObject({ serverless: true }); | ||
}) | ||
|
||
it('responds with info (integration style)', async () => { | ||
const response = await SELF.fetch('https://example.com/info'); | ||
expect(await response.json()).toMatchObject({ serverless: false }); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
declare module "cloudflare:test" { | ||
interface ProvidedEnv { | ||
DB: D1Database; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
export const env = { | ||
DB: true | ||
} | ||
|
||
export const serverlessEnv = { | ||
KEY: "key", | ||
DEVICE_TOKEN: "token" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
#:schema node_modules/wrangler/config-schema.json | ||
name = "cloudflare-bark-server" | ||
main = "src/index.ts" | ||
compatibility_date = "2024-11-06" | ||
compatibility_flags = ["nodejs_compat"] | ||
|
||
# 自定义域名 | ||
# route = { pattern = "bark.example.com", custom_domain = true } | ||
|
||
# Workers Logs | ||
# Docs: https://developers.cloudflare.com/workers/observability/logs/workers-logs/ | ||
# Configuration: https://developers.cloudflare.com/workers/observability/logs/workers-logs/#enable-workers-logs | ||
[observability] | ||
enabled = true | ||
|
||
# Automatically place your workloads in an optimal location to minimize latency. | ||
# If you are running back-end logic in a Worker, running it closer to your back-end infrastructure | ||
# rather than the end user may result in better performance. | ||
# Docs: https://developers.cloudflare.com/workers/configuration/smart-placement/#smart-placement | ||
# [placement] | ||
# mode = "smart" | ||
|
||
# Variable bindings. These are arbitrary, plaintext strings (similar to environment variables) | ||
# Docs: | ||
# - https://developers.cloudflare.com/workers/wrangler/configuration/#environment-variables | ||
# Note: Use secrets to store sensitive data. | ||
# - https://developers.cloudflare.com/workers/configuration/secrets/ | ||
# [vars] | ||
# 是否保存发送的消息 | ||
# PERSIST = true | ||
|
||
# Bind the Workers AI model catalog. Run machine learning models, powered by serverless GPUs, on Cloudflare’s global network | ||
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#workers-ai | ||
# [ai] | ||
# binding = "AI" | ||
|
||
# Bind an Analytics Engine dataset. Use Analytics Engine to write analytics within your Pages Function. | ||
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#analytics-engine-datasets | ||
# [[analytics_engine_datasets]] | ||
# binding = "MY_DATASET" | ||
|
||
# Bind a headless browser instance running on Cloudflare's global network. | ||
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#browser-rendering | ||
# [browser] | ||
# binding = "MY_BROWSER" | ||
|
||
# Bind a D1 database. D1 is Cloudflare’s native serverless SQL database. | ||
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#d1-databases | ||
# [[d1_databases]] | ||
# binding = "DB" | ||
# 自定义数据库名称 | ||
# database_name = "bark" | ||
# 数据库 ID | ||
# database_id = "64148f6c-4e9c-4089-b78a-03ba6914c760" | ||
# migrations_dir = "src/migrations" | ||
|
||
# Bind a dispatch namespace. Use Workers for Platforms to deploy serverless functions programmatically on behalf of your customers. | ||
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#dispatch-namespace-bindings-workers-for-platforms | ||
# [[dispatch_namespaces]] | ||
# binding = "MY_DISPATCHER" | ||
# namespace = "my-namespace" | ||
|
||
# Bind a Durable Object. Durable objects are a scale-to-zero compute primitive based on the actor model. | ||
# Durable Objects can live for as long as needed. Use these when you need a long-running "server", such as in realtime apps. | ||
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#durable-objects | ||
# [[durable_objects.bindings]] | ||
# name = "MY_DURABLE_OBJECT" | ||
# class_name = "MyDurableObject" | ||
|
||
# Durable Object migrations. | ||
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#migrations | ||
# [[migrations]] | ||
# tag = "v1" | ||
# new_classes = ["MyDurableObject"] | ||
|
||
# Bind a Hyperdrive configuration. Use to accelerate access to your existing databases from Cloudflare Workers. | ||
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#hyperdrive | ||
# [[hyperdrive]] | ||
# binding = "MY_HYPERDRIVE" | ||
# id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" | ||
|
||
# Bind a KV Namespace. Use KV as persistent storage for small key-value pairs. | ||
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#kv-namespaces | ||
# [[kv_namespaces]] | ||
# binding = "MY_KV_NAMESPACE" | ||
# id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" | ||
|
||
# Bind an mTLS certificate. Use to present a client certificate when communicating with another service. | ||
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#mtls-certificates | ||
# [[mtls_certificates]] | ||
# binding = "MY_CERTIFICATE" | ||
# certificate_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" | ||
|
||
# Bind a Queue producer. Use this binding to schedule an arbitrary task that may be processed later by a Queue consumer. | ||
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#queues | ||
# [[queues.producers]] | ||
# binding = "MY_QUEUE" | ||
# queue = "my-queue" | ||
|
||
# Bind a Queue consumer. Queue Consumers can retrieve tasks scheduled by Producers to act on them. | ||
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#queues | ||
# [[queues.consumers]] | ||
# queue = "my-queue" | ||
|
||
# Bind an R2 Bucket. Use R2 to store arbitrarily large blobs of data, such as files. | ||
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#r2-buckets | ||
# [[r2_buckets]] | ||
# binding = "MY_BUCKET" | ||
# bucket_name = "my-bucket" | ||
|
||
# Bind another Worker service. Use this binding to call another Worker without network overhead. | ||
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#service-bindings | ||
# [[services]] | ||
# binding = "MY_SERVICE" | ||
# service = "my-service" | ||
|
||
# Bind a Vectorize index. Use to store and query vector embeddings for semantic search, classification and other vector search use-cases. | ||
# Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#vectorize-indexes | ||
# [[vectorize]] | ||
# binding = "MY_INDEX" | ||
# index_name = "my-index" |