Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/client/src/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,7 @@ export class DefaultDelegatedRoutingV1HttpApiClient implements DelegatedRoutingV
}
} catch (err) {
log.error('getProviders errored:', err)
throw err
} finally {
signal.clear()
onFinish.resolve()
Expand Down
34 changes: 34 additions & 0 deletions packages/client/test/routings.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,40 @@ describe('libp2p content-routing', () => {
})))
})

it('should respect abort signal when finding providers', async () => {
const routing = getContentRouting(client)

if (routing == null) {
throw new Error('ContentRouting not found')
}

const providers = [{
ID: (await generateKeyPair('Ed25519')).publicKey.toString(),
Addrs: ['/ip4/43.43.43.43/tcp/1234']
}]

const cid = CID.parse('QmawceGscqN4o8Y8Fv26UUmB454kn2bnkXV5tEQYc4jBd6')

// load providers for the router to fetch
await fetch(`${process.env.ECHO_SERVER}/add-providers/${cid.toString()}`, {
method: 'POST',
body: providers.map(prov => JSON.stringify(prov)).join('\n')
})

let findProvidersFinished = false
let error: any = new Error('temporary error that should be replaced')
try {
const controller = new AbortController()
controller.abort()
await all(routing.findProviders(cid, { signal: controller.signal }))
findProvidersFinished = true
} catch (err: any) {
error = err
}
expect(findProvidersFinished).to.be.false()
expect(error).to.have.property('message').that.includes('abort', error.message)
})

it('should provide without error', async () => {
const routing = getContentRouting(client)

Expand Down
Loading