delete some unnecessary code from mock-relay implementation.

This commit is contained in:
fiatjaf 2024-01-20 12:48:42 -03:00
parent 967d7fe63a
commit 2f0ef90bd5
No known key found for this signature in database
GPG Key ID: BAD43C4BE5C1A3A1
4 changed files with 28 additions and 89 deletions

View File

@ -6,11 +6,11 @@ import { MockRelay } from './test-helpers.ts'
test('auth flow', async () => { test('auth flow', async () => {
const mockRelay = new MockRelay() const mockRelay = new MockRelay()
const relay = await Relay.connect(mockRelay.getUrl()) const relay = await Relay.connect(mockRelay.url)
const auth = makeAuthEvent(relay.url, 'chachacha') const auth = makeAuthEvent(relay.url, 'chachacha')
expect(auth.tags).toHaveLength(2) expect(auth.tags).toHaveLength(2)
expect(auth.tags[0]).toEqual(['relay', mockRelay.getUrl()]) expect(auth.tags[0]).toEqual(['relay', mockRelay.url])
expect(auth.tags[1]).toEqual(['challenge', 'chachacha']) expect(auth.tags[1]).toEqual(['challenge', 'chachacha'])
expect(auth.kind).toEqual(22242) expect(auth.kind).toEqual(22242)
}) })

View File

@ -11,16 +11,11 @@ let relayURLs: string[]
beforeEach(() => { beforeEach(() => {
pool = new SimplePool() pool = new SimplePool()
mockRelays = Array.from({ length: 10 }, () => new MockRelay()) mockRelays = Array.from({ length: 10 }, () => new MockRelay())
relayURLs = mockRelays.map(mr => mr.getUrl()) relayURLs = mockRelays.map(mr => mr.url)
}) })
afterEach(() => { afterEach(() => {
pool.close(relayURLs) pool.close(relayURLs)
for (let mr of mockRelays) {
mr.close()
mr.stop()
}
}) })
test('removing duplicates when subscribing', async () => { test('removing duplicates when subscribing', async () => {
@ -102,7 +97,7 @@ test('query a bunch of events and cancel on eose', async () => {
}) })
test('querySync()', async () => { test('querySync()', async () => {
let authors = mockRelays.flatMap(mr => mr.getAuthors()) let authors = mockRelays.flatMap(mr => mr.authors)
let events = await pool.querySync(relayURLs, { let events = await pool.querySync(relayURLs, {
authors: authors, authors: authors,
@ -118,7 +113,7 @@ test('querySync()', async () => {
}) })
test('get()', async () => { test('get()', async () => {
let ids = mockRelays.flatMap(mr => mr.getEventsIds()) let ids = mockRelays.flatMap(mr => mr.ids)
let event = await pool.get(relayURLs, { let event = await pool.get(relayURLs, {
ids: [ids[0]], ids: [ids[0]],

View File

@ -7,52 +7,39 @@ import { MockRelay } from './test-helpers.ts'
test('connectivity', async () => { test('connectivity', async () => {
const mockRelay = new MockRelay() const mockRelay = new MockRelay()
const relay = new Relay(mockRelay.getUrl()) const relay = new Relay(mockRelay.url)
await relay.connect() await relay.connect()
expect(relay.connected).toBeTrue() expect(relay.connected).toBeTrue()
relay.close() relay.close()
mockRelay.close()
mockRelay.stop()
}) })
test('connectivity, with Relay.connect()', async () => { test('connectivity, with Relay.connect()', async () => {
const mockRelay = new MockRelay() const mockRelay = new MockRelay()
const relay = await Relay.connect(mockRelay.url)
const relay = await Relay.connect(mockRelay.getUrl())
expect(relay.connected).toBeTrue() expect(relay.connected).toBeTrue()
relay.close() relay.close()
mockRelay.close()
mockRelay.stop()
}) })
test('querying', async done => { test('querying', async done => {
const mockRelay = new MockRelay() const mockRelay = new MockRelay()
const kind = 0 const kind = 0
const relay = new Relay(mockRelay.url)
const relay = new Relay(mockRelay.getUrl())
await relay.connect() await relay.connect()
relay.subscribe( relay.subscribe(
[ [
{ {
authors: mockRelay.getAuthors(), authors: mockRelay.authors,
kinds: [kind], kinds: [kind],
}, },
], ],
{ {
onevent(event) { onevent(event) {
expect(mockRelay.getAuthors()).toContain(event.pubkey) expect(mockRelay.authors).toContain(event.pubkey)
expect(event).toHaveProperty('kind', kind) expect(event).toHaveProperty('kind', kind)
relay.close() relay.close()
mockRelay.close()
mockRelay.stop()
done() done()
}, },
}, },
@ -66,7 +53,7 @@ test('listening and publishing and closing', async done => {
const pk = getPublicKey(sk) const pk = getPublicKey(sk)
const kind = 23571 const kind = 23571
const relay = new Relay(mockRelay.getUrl()) const relay = new Relay(mockRelay.url)
await relay.connect() await relay.connect()
let sub = relay.subscribe( let sub = relay.subscribe(
@ -86,10 +73,6 @@ test('listening and publishing and closing', async done => {
}, },
onclose() { onclose() {
relay.close() relay.close()
mockRelay.close()
mockRelay.stop()
done() done()
}, },
}, },

View File

@ -16,30 +16,20 @@ export function buildEvent(params: Partial<Event>): Event {
} }
} }
/** let serial = 0
* A mock Relay class for testing purposes.
* This mock relay returns some events before eose and then will be ok with everything.
* @class
* @example
* const mockRelay = new MockRelay()
* const relay = new Relay(mockRelay.getUrl())
* await relay.connect()
* // Do some testing
* relay.close()
* mockRelay.close()
* mockRelay.stop()
*/
export class MockRelay { export class MockRelay {
private _url: string
private _server: Server private _server: Server
private _secretKeys: Uint8Array[]
private _preloadedEvents: Event[] public url: string
public secretKeys: Uint8Array[]
public preloadedEvents: Event[]
constructor(url?: string | undefined) { constructor(url?: string | undefined) {
this._url = url ?? `wss://random.mock.relay/${Math.floor(Math.random() * 10000)}` serial++
this._server = new Server(this._url) this.url = url ?? `wss://random.mock.relay/${serial}`
this._secretKeys = [generateSecretKey(), generateSecretKey(), generateSecretKey(), generateSecretKey()] this.secretKeys = [generateSecretKey(), generateSecretKey(), generateSecretKey(), generateSecretKey()]
this._preloadedEvents = this._secretKeys.map(sk => this.preloadedEvents = this.secretKeys.map(sk =>
finalizeEvent( finalizeEvent(
{ {
kind: 1, kind: 1,
@ -51,6 +41,7 @@ export class MockRelay {
), ),
) )
this._server = new Server(this.url)
this._server.on('connection', (conn: any) => { this._server.on('connection', (conn: any) => {
let subs: { [subId: string]: { conn: any; filters: Filter[] } } = {} let subs: { [subId: string]: { conn: any; filters: Filter[] } } = {}
@ -63,7 +54,7 @@ export class MockRelay {
let filters = data.slice(2) let filters = data.slice(2)
subs[subId] = { conn, filters } subs[subId] = { conn, filters }
this._preloadedEvents.forEach(event => { this.preloadedEvents.forEach(event => {
conn.send(JSON.stringify(['EVENT', subId, event])) conn.send(JSON.stringify(['EVENT', subId, event]))
}) })
@ -71,7 +62,7 @@ export class MockRelay {
const kinds = filter.kinds?.length ? filter.kinds : [1] const kinds = filter.kinds?.length ? filter.kinds : [1]
kinds.forEach(kind => { kinds.forEach(kind => {
this._secretKeys.forEach(sk => { this.secretKeys.forEach(sk => {
const event = finalizeEvent( const event = finalizeEvent(
{ {
kind, kind,
@ -117,41 +108,11 @@ export class MockRelay {
}) })
} }
/** get authors() {
* Get the URL of the mock relay. return this.secretKeys.map(getPublicKey)
* @returns The URL of the mock relay.
*/
getUrl() {
return this._url
} }
/** get ids() {
* Get the public keys of the authors of the events. return this.preloadedEvents.map(evt => evt.id)
* @returns An array of public keys.
*/
getAuthors() {
return this._secretKeys.map(getPublicKey)
}
/**
* Get the IDs of the events.
* @returns An array of event IDs.
*/
getEventsIds() {
return this._preloadedEvents.map(evt => evt.id)
}
/**
* Close the mock relay server.
*/
close() {
this._server.close()
}
/**
* Stop the mock relay server.
*/
stop() {
this._server.stop()
} }
} }