diff --git a/.github/workflows/server-node.yml b/.github/workflows/server-node.yml index 772f8404c9..a25b110637 100644 --- a/.github/workflows/server-node.yml +++ b/.github/workflows/server-node.yml @@ -34,14 +34,14 @@ jobs: - name: Install contract test service dependencies run: yarn workspace node-server-sdk-contract-tests install --no-immutable - name: Build the test service - run: yarn contract-test-service-build + run: yarn workspace node-server-sdk-contract-tests build - name: Launch the test service in the background - run: yarn contract-test-service 2>&1 & + run: yarn workspace node-server-sdk-contract-tests start 2>&1 & - name: Clone and run contract tests from feat/fdv2 branch run: | mkdir -p /tmp/sdk-test-harness git clone https://github.com/launchdarkly/sdk-test-harness.git /tmp/sdk-test-harness - cp ./contract-tests/testharness-suppressions-fdv2.txt /tmp/sdk-test-harness/testharness-suppressions-fdv2.txt + cp ./packages/sdk/server-node/contract-tests/testharness-suppressions-fdv2.txt /tmp/sdk-test-harness/testharness-suppressions-fdv2.txt cd /tmp/sdk-test-harness git checkout feat/fdv2 go build -o test-harness . @@ -52,4 +52,4 @@ jobs: with: test_service_port: 8000 token: ${{ secrets.GITHUB_TOKEN }} - extra_params: '--skip-from=./contract-tests/testharness-suppressions.txt -stop-service-at-end' + extra_params: '--skip-from=./packages/sdk/server-node/contract-tests/testharness-suppressions.txt -stop-service-at-end' diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b17cce1d0f..3011acce76 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -49,13 +49,6 @@ Unit tests should be implemented in a `__tests__` folder in the root of the pack Each package has its own testing requirements and tests should be only ran for single projects. -To run the SDK contract test suite (see [`contract-tests/README.md`](./contract-tests/README.md)): -The SDK contract test suite will run the Node.js Server version of the SDK. - -```bash -yarn run contract-tests -``` - Tests cases should be written using `it` and should read as a sentence including the `it`: ```TypeScript it('does not load flags prior to start', async () => {/* test code */} @@ -69,6 +62,16 @@ describe('given a mock filesystem and memory feature store', { /* tests */}) These then combined to create an understandable test name: `given a mock filesystem and memory feature store > it does not load flags prior to start` +### Contract tests + +Contract tests are standardized tests that can be ran against all of our SDKs. +For more information [see here](https://github.com/launchdarkly/sdk-test-harness). + +Note that not all packages in this monorepo have implemented contract tests. The ones that +have contract tests should have a `contract-test` directory at the root directory of their project. +For example, see the node server sdk contract test in +[`packages/sdk/server-node/contract-tests`](./packages/sdk/server-node/contract-tests/). + --- For docs on our module publishing process, see [our publishing doc](contributing/publishing.md) diff --git a/contract-tests/tsconfig.ref.json b/contract-tests/tsconfig.ref.json deleted file mode 100644 index 34a1cb607a..0000000000 --- a/contract-tests/tsconfig.ref.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*", "package.json"], - "compilerOptions": { - "composite": true - } -} diff --git a/package.json b/package.json index 11e71f91d5..620ba525e6 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "packages/shared/sdk-server-edge", "packages/shared/akamai-edgeworker-sdk", "packages/sdk/server-node", + "packages/sdk/server-node/contract-tests", "packages/sdk/cloudflare", "packages/sdk/cloudflare/example", "packages/sdk/fastly", @@ -40,7 +41,6 @@ "packages/sdk/server-ai/examples/tracked-chat", "packages/sdk/server-ai/examples/vercel-ai", "packages/telemetry/browser-telemetry", - "contract-tests", "packages/sdk/combined-browser", "packages/sdk/shopify-oxygen", "packages/sdk/shopify-oxygen/contract-tests", @@ -57,10 +57,7 @@ "lint:fix": "yarn run lint -- --fix", "test": "echo Please run tests for individual packages.", "coverage": "npm run test -- --coverage", - "contract-test-service-build": "yarn workspaces foreach -pR --topological-dev --from 'node-server-sdk-contract-tests' run build", - "contract-test-service": "yarn workspace node-server-sdk-contract-tests start", "contract-test-harness": "curl -s https://raw.githubusercontent.com/launchdarkly/sdk-test-harness/master/downloader/run.sh \\ | VERSION=v2 PARAMS=\"-url http://localhost:8000 -debug -stop-service-at-end $TEST_HARNESS_PARAMS\" sh", - "contract-tests": "yarn contract-test-service-build && yarn contract-test-service & yarn contract-test-harness", "prettier": "npx prettier --write \"**/*.{js,ts,tsx,json,yaml,yml,md}\" --log-level warn", "check": "yarn && yarn prettier && yarn lint && tsc && yarn build" }, diff --git a/packages/sdk/server-node/contract-tests/README.md b/packages/sdk/server-node/contract-tests/README.md new file mode 100644 index 0000000000..02f01cd8ba --- /dev/null +++ b/packages/sdk/server-node/contract-tests/README.md @@ -0,0 +1,21 @@ +# Node Server SDK Contract Tests + +This directory contains the contract test implementation for the LaunchDarkly Node.js Server SDK using the [SDK Test Harness](https://github.com/launchdarkly/sdk-test-harness). + +The contract test service is an Express server that exposes a REST API on port 8000. The test harness sends commands to this service, which creates and manages SDK client instances and executes flag evaluations, events, and other operations. + +## Running Locally + +From the repository root: + +```bash +yarn workspace node-server-sdk-contract-tests run build +yarn workspace node-server-sdk-contract-tests run start +``` + +The service will listen on http://localhost:8000. You can then run the test harness from a separate terminal (see the [SDK Test Harness](https://github.com/launchdarkly/sdk-test-harness) repository for details). + +Suppression files for tests that are not yet supported or are known to differ: + +- `testharness-suppressions.txt` – used by the default contract test run +- `testharness-suppressions-fdv2.txt` – used when running the harness from the feat/fdv2 branch diff --git a/contract-tests/package.json b/packages/sdk/server-node/contract-tests/package.json similarity index 91% rename from contract-tests/package.json rename to packages/sdk/server-node/contract-tests/package.json index 7b6b9b4e45..2b00e78f3f 100644 --- a/contract-tests/package.json +++ b/packages/sdk/server-node/contract-tests/package.json @@ -12,7 +12,7 @@ "license": "Apache-2.0", "private": true, "dependencies": { - "@launchdarkly/node-server-sdk": "*", + "@launchdarkly/node-server-sdk": "workspace:^", "body-parser": "^1.19.0", "express": "^4.17.1", "got": "14.4.7" diff --git a/contract-tests/src/BigSegmentTestStore.ts b/packages/sdk/server-node/contract-tests/src/BigSegmentTestStore.ts similarity index 100% rename from contract-tests/src/BigSegmentTestStore.ts rename to packages/sdk/server-node/contract-tests/src/BigSegmentTestStore.ts diff --git a/contract-tests/src/TestHook.ts b/packages/sdk/server-node/contract-tests/src/TestHook.ts similarity index 100% rename from contract-tests/src/TestHook.ts rename to packages/sdk/server-node/contract-tests/src/TestHook.ts diff --git a/contract-tests/src/index.ts b/packages/sdk/server-node/contract-tests/src/index.ts similarity index 100% rename from contract-tests/src/index.ts rename to packages/sdk/server-node/contract-tests/src/index.ts diff --git a/contract-tests/src/log.ts b/packages/sdk/server-node/contract-tests/src/log.ts similarity index 100% rename from contract-tests/src/log.ts rename to packages/sdk/server-node/contract-tests/src/log.ts diff --git a/contract-tests/src/sdkClientEntity.ts b/packages/sdk/server-node/contract-tests/src/sdkClientEntity.ts similarity index 100% rename from contract-tests/src/sdkClientEntity.ts rename to packages/sdk/server-node/contract-tests/src/sdkClientEntity.ts diff --git a/contract-tests/testharness-suppressions-fdv2.txt b/packages/sdk/server-node/contract-tests/testharness-suppressions-fdv2.txt similarity index 95% rename from contract-tests/testharness-suppressions-fdv2.txt rename to packages/sdk/server-node/contract-tests/testharness-suppressions-fdv2.txt index 8215293c1f..22c1f2830c 100644 --- a/contract-tests/testharness-suppressions-fdv2.txt +++ b/packages/sdk/server-node/contract-tests/testharness-suppressions-fdv2.txt @@ -10,4 +10,4 @@ streaming/fdv2/reconnection state management/saves previously known state streaming/fdv2/reconnection state management/replaces previously known state streaming/fdv2/reconnection state management/updates previously known state streaming/fdv2/ignores model version -streaming/fdv2/can discard partial events on errors \ No newline at end of file +streaming/fdv2/can discard partial events on errors diff --git a/contract-tests/testharness-suppressions.txt b/packages/sdk/server-node/contract-tests/testharness-suppressions.txt similarity index 100% rename from contract-tests/testharness-suppressions.txt rename to packages/sdk/server-node/contract-tests/testharness-suppressions.txt diff --git a/contract-tests/tsconfig.json b/packages/sdk/server-node/contract-tests/tsconfig.json similarity index 100% rename from contract-tests/tsconfig.json rename to packages/sdk/server-node/contract-tests/tsconfig.json diff --git a/packages/sdk/server-node/contract-tests/tsconfig.ref.json b/packages/sdk/server-node/contract-tests/tsconfig.ref.json new file mode 100644 index 0000000000..a5e168f4ae --- /dev/null +++ b/packages/sdk/server-node/contract-tests/tsconfig.ref.json @@ -0,0 +1 @@ +{"extends":"./tsconfig.json","include":["src/**/*","package.json"],"compilerOptions":{"composite":true}} diff --git a/packages/sdk/server-node/tsconfig.json b/packages/sdk/server-node/tsconfig.json index e4158b0541..ac97ece8c9 100644 --- a/packages/sdk/server-node/tsconfig.json +++ b/packages/sdk/server-node/tsconfig.json @@ -17,5 +17,5 @@ "stripInternal": true, "moduleResolution": "node" }, - "exclude": ["**/*.test.ts", "dist", "node_modules", "__tests__"] + "exclude": ["**/*.test.ts", "dist", "node_modules", "__tests__", "contract-tests"] } diff --git a/tsconfig.json b/tsconfig.json index 1b4cea3bb6..3c4eb96b97 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -74,7 +74,7 @@ "path": "./packages/sdk/fastly/tsconfig.ref.json" }, { - "path": "./contract-tests/tsconfig.ref.json" + "path": "./packages/sdk/server-node/contract-tests/tsconfig.ref.json" }, { "path": "./packages/sdk/combined-browser/tsconfig.ref.json"