Skip to content

Commit 214e1ca

Browse files
committed
feat: add integration tests w/ docker
1 parent ec05641 commit 214e1ca

File tree

16 files changed

+401
-36
lines changed

16 files changed

+401
-36
lines changed

.github/workflows/checks.yml

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ jobs:
2727
runs-on: ubuntu-latest
2828
container:
2929
image: node:18-alpine3.16
30-
needs: [lint]
3130
steps:
3231
- uses: actions/checkout@v3
3332
- uses: actions/setup-node@v3
@@ -38,12 +37,11 @@ jobs:
3837
run: npm ci
3938
- name: Run ESLint
4039
run: npm run build
41-
test:
42-
name: Tests
40+
test-and-cover:
41+
name: Unit Tests
4342
runs-on: ubuntu-latest
4443
container:
4544
image: node:18-alpine3.16
46-
needs: [build]
4745
steps:
4846
- uses: actions/checkout@v3
4947
- uses: actions/setup-node@v3
@@ -52,14 +50,21 @@ jobs:
5250
cache: npm
5351
- name: Install package dependencies
5452
run: npm ci
55-
- name: Run tests
53+
- name: Run unit tests
5654
run: npm run test:unit
57-
coverage:
58-
name: Coverage
55+
- name: Run coverage for unit tests
56+
run: npm run cover
57+
- name: Coveralls
58+
uses: coverallsapp/github-action@master
59+
with:
60+
path-to-lcov: ./.coverage/lcov.info
61+
flag-name: Unit
62+
github-token: ${{ secrets.GITHUB_TOKEN }}
63+
test-integration:
64+
name: Integration Tests
5965
runs-on: ubuntu-latest
6066
container:
6167
image: node:18-alpine3.16
62-
needs: [build]
6368
steps:
6469
- uses: actions/checkout@v3
6570
- uses: actions/setup-node@v3
@@ -68,11 +73,5 @@ jobs:
6873
cache: npm
6974
- name: Install package dependencies
7075
run: npm ci
71-
- name: Run coverage
72-
run: npm run cover
73-
- name: Coveralls
74-
uses: coverallsapp/github-action@master
75-
with:
76-
path-to-lcov: ./.coverage/lcov.info
77-
flag-name: Unit
78-
github-token: ${{ secrets.GITHUB_TOKEN }}
76+
- name: Run integration tests
77+
run: npm run docker:test:integration

cucumber.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
const config = [
22
'test/integration/features/**/*.feature',
33
'--require-module ts-node/register',
4-
'--require tests/integration/features/**/*.ts',
5-
'--format progress-bar',
6-
'--format json:report.json',
7-
'--publish-quiet',
4+
'--require test/integration/features/**/*.ts',
5+
'--require test/integration/features/*.ts',
6+
'--format @cucumber/pretty-formatter',
7+
'--publish',
88
].join(' ')
99

1010
module.exports = {

docker-compose.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ services:
88
DB_USER: nostr_ts_relay
99
DB_PASSWORD: nostr_ts_relay
1010
DB_NAME: nostr_ts_relay
11+
DB_MIN_POOL_SIZE: 1
12+
DB_MAX_POOL_SIZE: 2
1113
NOSTR_CONFIG_DIR: /home/node/
1214
user: node:node
1315
volumes:

knexfile.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ module.exports = {
77
password: process.env.DB_PASSWORD ?? 'postgres',
88
database: process.env.DB_NAME ?? 'nostr-ts-relay',
99
},
10-
pool: { min: 4, max: 16 },
1110
seeds: {
1211
directory: './seeds',
1312
},

package-lock.json

Lines changed: 64 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
],
1717
"main": "src/index.ts",
1818
"scripts": {
19-
"dev": "ts-node src/index.ts",
19+
"dev": "node -r ts-node/register src/index.ts",
2020
"clean": "rimraf ./dist",
2121
"build": "tsc --project tsconfig.build.json",
2222
"prestart": "npm run build",
@@ -35,7 +35,8 @@
3535
"predocker:compose:up": "[ -d \"$HOME/.nostr\" ] || mkdir -p $HOME/.nostr",
3636
"docker:compose:up": "docker compose up --build",
3737
"docker:compose:down": "docker compose down",
38-
"docker:compose:rm": "docker compose rm"
38+
"docker:compose:rm": "docker compose rm",
39+
"docker:test:integration": "docker compose -f ./test/integration/docker-compose.yml up tests --build --exit-code-from tests"
3940
},
4041
"repository": {
4142
"type": "git",
@@ -53,6 +54,7 @@
5354
"homepage": "https://github.com/Cameri/nostr-ts-relay#readme",
5455
"devDependencies": {
5556
"@cucumber/cucumber": "8.7.0",
57+
"@cucumber/pretty-formatter": "1.0.0",
5658
"@types/chai": "^4.3.1",
5759
"@types/chai-as-promised": "^7.1.5",
5860
"@types/mocha": "^9.1.1",

src/adapters/web-socket-adapter.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import cluster from 'cluster'
12
import { EventEmitter } from 'stream'
23
import { IncomingMessage as IncomingHttpMessage } from 'http'
34
import { WebSocket } from 'ws'
@@ -60,10 +61,12 @@ export class WebSocketAdapter extends EventEmitter implements IWebSocketAdapter
6061

6162
public onBroadcast(event: Event): void {
6263
this.webSocketServer.emit(WebSocketServerAdapterEvent.Broadcast, event)
63-
process.send({
64-
eventName: WebSocketServerAdapterEvent.Broadcast,
65-
event,
66-
})
64+
if (cluster.isWorker) {
65+
process.send({
66+
eventName: WebSocketServerAdapterEvent.Broadcast,
67+
event,
68+
})
69+
}
6770
}
6871

6972
public onSendEvent(event: Event): void {

src/adapters/web-socket-server-adapter.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ export class WebSocketServerAdapter extends WebServerAdapter implements IWebSock
4444
}
4545

4646
public close(callback: () => void): void {
47+
this.onClose()
4748
this.webSocketServer.close(() => {
4849
this.webServer.close(callback)
4950
})

src/app/worker.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ export class AppWorker implements IRunnable {
66
private readonly process: NodeJS.Process,
77
private readonly adapter: IWebSocketServerAdapter
88
) {
9-
process
9+
this.process
1010
.on('message', this.onMessage.bind(this))
1111
.on('SIGINT', this.onExit.bind(this))
1212
.on('SIGHUP', this.onExit.bind(this))
@@ -34,11 +34,12 @@ export class AppWorker implements IRunnable {
3434

3535
private onExit() {
3636
console.log(`worker ${process.pid} - exiting`)
37-
this.adapter.close(() => {
38-
// dbClient.destroy(() => {
39-
// process.exit(0)
40-
// })
41-
process.exit(0)
37+
this.close(() => {
38+
this.process.exit(0)
4239
})
4340
}
41+
42+
public close(callback?: () => void) {
43+
this.adapter.close(callback)
44+
}
4445
}

src/factories/worker-factory.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { getDbClient } from '../database/client'
99
import { webSocketAdapterFactory } from './websocket-adapter-factory'
1010
import { WebSocketServerAdapter } from '../adapters/web-socket-server-adapter'
1111

12-
export const workerFactory = () => {
12+
export const workerFactory = (): AppWorker => {
1313
const dbClient = getDbClient()
1414
const eventRepository = new EventRepository(dbClient)
1515

0 commit comments

Comments
 (0)