Skip to content

Commit

Permalink
test: run query engine tests with query compiler
Browse files Browse the repository at this point in the history
  • Loading branch information
aqrln and jacek-prisma committed Feb 17, 2025
1 parent 7e7c9b8 commit 846771f
Show file tree
Hide file tree
Showing 31 changed files with 2,340 additions and 73 deletions.
93 changes: 93 additions & 0 deletions .github/workflows/test-query-compiler-template.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
name: "QC: integration tests"
on:
workflow_call:
inputs:
setup_task:
type: string
required: true
ignored_tests_list:
type: string
required: true
should_fail_tests_list:
type: string
required: true

jobs:
rust-query-engine-tests:
name: "${{ matrix.partition }}"

strategy:
fail-fast: false
matrix:
node_version: ["20"]
partition: ["1/4", "2/4", "3/4", "4/4"]
env:
LOG_LEVEL: "info" # Set to "debug" to trace the node process running the driver adapter
LOG_QUERIES: "y"
RUST_LOG: "info"
RUST_LOG_FORMAT: "devel"
RUST_BACKTRACE: "1"
CLICOLOR_FORCE: "1"
CLOSED_TX_CLEANUP: "2"
SIMPLE_TEST_MODE: "1"
QUERY_BATCH_SIZE: "10"
WASM_BUILD_PROFILE: "profiling" # Include debug info for proper backtraces
WORKSPACE_ROOT: ${{ github.workspace }}
IGNORED_TESTS: ${{ inputs.ignored_tests_list }}
SHOULD_FAIL_TESTS: ${{ inputs.should_fail_tests_list }}

runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
# using head ref rather than merge branch to get original commit message
ref: ${{ github.event.pull_request.head.sha }}
- name: "Setup Node.js"
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node_version }}

- name: "Setup pnpm"
uses: pnpm/action-setup@v4.0.0
with:
version: 9

- name: "Login to Docker Hub"
uses: docker/login-action@v3
continue-on-error: true
env:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
if: "${{ env.DOCKERHUB_USERNAME != '' && env.DOCKERHUB_TOKEN != '' }}"
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Cache Docker images.
uses: ScribeMD/docker-cache@0.5.0
with:
key: docker-${{ inputs.setup_task }}-${{hashFiles('docker-compose.yaml')}}

- name: Extract Branch Name
id: extract-branch
run: |
echo "Extracting branch name from: $(git show -s --format=%s)"
branch="$(git show -s --format=%s | grep -o "DRIVER_ADAPTERS_BRANCH=[^ ]*" | cut -f2 -d=)"
echo "branch=$branch"
if [ -n "$branch" ]; then
echo "Using $branch branch of driver adapters"
echo "DRIVER_ADAPTERS_BRANCH=$branch" >> "$GITHUB_ENV"
fi
- uses: ./.github/workflows/include/rust-wasm-setup
- uses: taiki-e/install-action@nextest

- name: Setup
env:
SETUP_TASK: ${{ inputs.setup_task }}
run: make "$SETUP_TASK"

- name: "Run tests"
env:
PARTITION: ${{ matrix.partition }}
run: cargo nextest run --package query-engine-tests --partition hash:"$PARTITION"
36 changes: 36 additions & 0 deletions .github/workflows/test-query-compiler.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: "QC"
on:
push:
branches:
- main
pull_request:
paths-ignore:
- "!.github/workflows/test-query-compiler.yml"
- "!.github/workflows/test-query-compiler-template.yml"
- ".github/**"
- ".buildkite/**"
- "*.md"
- "LICENSE"
- "CODEOWNERS"
- "renovate.json"

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
qe-tests-with-qc:
strategy:
fail-fast: false
matrix:
adapter:
- name: pg
setup_task: dev-pg-qc
ignored_tests_list: query-compiler/query-engine-tests-todo/pg/timeout
should_fail_tests_list: query-compiler/query-engine-tests-todo/pg/fail
name: ${{ matrix.adapter.name }}
uses: ./.github/workflows/test-query-compiler-template.yml
with:
setup_task: ${{ matrix.adapter.setup_task }}
ignored_tests_list: ${{ matrix.adapter.ignored_tests_list }}
should_fail_tests_list: ${{ matrix.adapter.should_fail_tests_list }}
3 changes: 3 additions & 0 deletions .prettierrc.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
tabWidth = 2
semi = false
singleQuote = true
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

38 changes: 26 additions & 12 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -167,20 +167,20 @@ dev-sqlite:
dev-react-native:
cp $(CONFIG_PATH)/react-native $(CONFIG_FILE)

dev-libsql-js: build-qe-napi build-driver-adapters-kit
dev-libsql-js: build-qe-napi build-driver-adapters-kit-qe
cp $(CONFIG_PATH)/libsql-js $(CONFIG_FILE)

test-libsql-js: dev-libsql-js test-qe-st

test-driver-adapter-libsql: test-libsql-js

dev-libsql-wasm: build-qe-wasm build-driver-adapters-kit
dev-libsql-wasm: build-qe-wasm build-driver-adapters-kit-qe
cp $(CONFIG_PATH)/libsql-wasm $(CONFIG_FILE)

test-libsql-wasm: dev-libsql-wasm test-qe-st
test-driver-adapter-libsql-wasm: test-libsql-wasm

dev-d1: build-qe-wasm build-driver-adapters-kit
dev-d1: build-qe-wasm build-driver-adapters-kit-qe
cp $(CONFIG_PATH)/cloudflare-d1 $(CONFIG_FILE)

test-d1: dev-d1 test-qe-st
Expand Down Expand Up @@ -218,23 +218,28 @@ dev-postgres13: start-postgres13

start-pg-js: start-postgres13

dev-pg-js: start-pg-js build-qe-napi build-driver-adapters-kit
dev-pg-js: start-pg-js build-qe-napi build-driver-adapters-kit-qe
cp $(CONFIG_PATH)/pg-js $(CONFIG_FILE)

test-pg-js: dev-pg-js test-qe-st

dev-pg-wasm: start-pg-js build-qe-wasm build-driver-adapters-kit
dev-pg-wasm: start-pg-js build-qe-wasm build-driver-adapters-kit-qe
cp $(CONFIG_PATH)/pg-wasm $(CONFIG_FILE)

test-pg-wasm: dev-pg-wasm test-qe-st

dev-pg-qc: start-pg-js build-qc-wasm build-driver-adapters-kit-qc
cp $(CONFIG_PATH)/pg-qc $(CONFIG_FILE)

test-pg-qc: dev-pg-qc test-qe

test-driver-adapter-pg: test-pg-js
test-driver-adapter-pg-wasm: test-pg-wasm

start-pg-bench:
docker compose -f libs/driver-adapters/executor/bench/docker-compose.yml up --wait -d --remove-orphans postgres

setup-pg-bench: start-pg-bench build-qe-napi build-qe-wasm build-driver-adapters-kit
setup-pg-bench: start-pg-bench build-qe-napi build-qe-wasm build-driver-adapters-kit-qe

run-bench:
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/bench?schema=imdb_bench&sslmode=disable" \
Expand All @@ -245,12 +250,12 @@ bench-pg-js: setup-pg-bench run-bench
start-neon-js:
docker compose -f docker-compose.yml up --wait -d --remove-orphans neon-proxy

dev-neon-js: start-neon-js build-qe-napi build-driver-adapters-kit
dev-neon-js: start-neon-js build-qe-napi build-driver-adapters-kit-qe
cp $(CONFIG_PATH)/neon-js $(CONFIG_FILE)

test-neon-js: dev-neon-js test-qe-st

dev-neon-wasm: start-neon-js build-qe-wasm build-driver-adapters-kit
dev-neon-wasm: start-neon-js build-qe-wasm build-driver-adapters-kit-qe
cp $(CONFIG_PATH)/neon-wasm $(CONFIG_FILE)

test-neon-wasm: dev-neon-wasm test-qe-st
Expand Down Expand Up @@ -398,12 +403,12 @@ dev-vitess_8_0: start-vitess_8_0
start-planetscale-js:
docker compose -f docker-compose.yml up -d --remove-orphans planetscale-proxy

dev-planetscale-js: start-planetscale-js build-qe-napi build-driver-adapters-kit
dev-planetscale-js: start-planetscale-js build-qe-napi build-driver-adapters-kit-qe
cp $(CONFIG_PATH)/planetscale-js $(CONFIG_FILE)

test-planetscale-js: dev-planetscale-js test-qe-st

dev-planetscale-wasm: start-planetscale-js build-qe-wasm build-driver-adapters-kit
dev-planetscale-wasm: start-planetscale-js build-qe-wasm build-driver-adapters-kit-qe
cp $(CONFIG_PATH)/planetscale-wasm $(CONFIG_FILE)

test-planetscale-wasm: dev-planetscale-wasm test-qe-st
Expand All @@ -422,8 +427,17 @@ measure-qe-wasm: build-qe-wasm-gz
echo "$${provider}_size_gz=$$(cat $$provider.gz | wc -c | tr -d ' ')" >> $(ENGINE_SIZE_OUTPUT); \
done;

build-driver-adapters-kit: build-driver-adapters
cd libs/driver-adapters && pnpm i && pnpm build
install-driver-adapters-kit-deps: build-driver-adapters
cd libs/driver-adapters && pnpm i

build-driver-adapters-kit: install-driver-adapters-kit-deps
cd libs/driver-adapters && pnpm build

build-driver-adapters-kit-qe: install-driver-adapters-kit-deps
cd libs/driver-adapters && pnpm build:qe

build-driver-adapters-kit-qc: install-driver-adapters-kit-deps
cd libs/driver-adapters && pnpm build:qc

build-driver-adapters: ensure-prisma-present
@echo "Building driver adapters..."
Expand Down
6 changes: 5 additions & 1 deletion libs/driver-adapters/executor/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,11 @@
"description": "",
"private": true,
"scripts": {
"build": "tsup ./src/testd-qe.ts ./src/demo-se.ts ./src/bench.ts --format esm --dts",
"build": "tsup ./src/testd-qe.ts ./src/qc-test-runner.ts ./src/qc-test-worker/worker.ts ./src/demo-se.ts ./src/bench.ts --format esm --dts",
"build:qe": "tsup ./src/testd-qe.ts ./src/bench.ts --format esm --dts",
"build:qc": "tsup ./src/qc-test-runner.ts ./src/qc-test-worker/worker.ts --format esm --dts",
"test:qe": "node --import tsx ./src/testd-qe.ts",
"test:qc": "node --import tsx ./src/testd-qc.ts",
"demo:se": "node --import tsx ./src/demo-se.ts",
"demo:qc": "node --import tsx ./src/demo-qc.ts",
"clean:d1": "rm -rf ../../connector-test-kit-rs/query-engine-tests/.wrangler"
Expand All @@ -27,6 +30,7 @@
"@prisma/adapter-pg": "workspace:*",
"@prisma/adapter-planetscale": "workspace:*",
"@prisma/bundled-js-drivers": "workspace:*",
"@prisma/client-engine-runtime": "workspace:*",
"@prisma/driver-adapter-utils": "workspace:*",
"mitata": "0.1.11",
"query-engine-wasm-baseline": "npm:@prisma/query-engine-wasm@0.0.19",
Expand Down
2 changes: 2 additions & 0 deletions libs/driver-adapters/executor/script/testd-qc.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#!/usr/bin/env bash
node "$(dirname "${BASH_SOURCE[0]}")/../dist/qc-test-runner.js"
2 changes: 1 addition & 1 deletion libs/driver-adapters/executor/src/demo-qc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ async function initQC({

const compiler = await qc.initQueryCompiler({
datamodel: schema,
flavour: adapter.provider,
provider: adapter.provider,
connectionInfo,
});

Expand Down
41 changes: 41 additions & 0 deletions libs/driver-adapters/executor/src/panic.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
type GlobalWithPanicHandler = typeof globalThis & {
PRISMA_WASM_PANIC_REGISTRY: {
set_message?: (message: string) => void
}
}

const global = globalThis as GlobalWithPanicHandler

export function setupDefaultPanicHandler() {
global.PRISMA_WASM_PANIC_REGISTRY = {
set_message(message: string) {
throw new PanicError(message)
},
}
}

export function withLocalPanicHandler<T>(fn: () => T): T {
const previousHandler = global.PRISMA_WASM_PANIC_REGISTRY.set_message
let panic: string | undefined = undefined

global.PRISMA_WASM_PANIC_REGISTRY.set_message = (message) => {
panic = message
}

try {
return fn()
} finally {
global.PRISMA_WASM_PANIC_REGISTRY.set_message = previousHandler

if (panic) {
throw new PanicError(panic)
}
}
}

export class PanicError extends Error {
constructor(message: string) {
super('Panic in WASM module: ' + message)
this.name = 'PanicError'
}
}
Loading

0 comments on commit 846771f

Please sign in to comment.