chore: add meaningful errors for ip:port to multiaddr (#4)

* chore: add meaningful errors for ip:port to multiaddr

* chore: address review
This commit is contained in:
Vasco Santos 2020-02-13 16:22:12 +01:00 committed by GitHub
parent 8364aa89c2
commit 30c236d92f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 6 deletions

View File

@ -34,6 +34,7 @@
"dirty-chai": "^2.0.1" "dirty-chai": "^2.0.1"
}, },
"dependencies": { "dependencies": {
"err-code": "^2.0.0",
"ip-address": "^6.1.0", "ip-address": "^6.1.0",
"multiaddr": "^7.1.0" "multiaddr": "^7.1.0"
}, },

View File

@ -1,17 +1,24 @@
'use strict' 'use strict'
const multiaddr = require('multiaddr') const multiaddr = require('multiaddr')
const errCode = require('err-code')
const { Address4, Address6 } = require('ip-address') const { Address4, Address6 } = require('ip-address')
const errors = {
ERR_INVALID_IP_PARAMETER: 'ERR_INVALID_IP_PARAMETER',
ERR_INVALID_PORT_PARAMETER: 'ERR_INVALID_PORT_PARAMETER',
ERR_INVALID_IP: 'ERR_INVALID_IP'
}
module.exports = (ip, port) => { module.exports = (ip, port) => {
if (typeof ip !== 'string') { if (typeof ip !== 'string') {
throw new Error('invalid ip') throw errCode(new Error(`invalid ip provided: ${ip}`), errors.ERR_INVALID_IP_PARAMETER)
} }
port = parseInt(port) port = parseInt(port)
if (isNaN(port)) { if (isNaN(port)) {
throw new Error('invalid port') throw errCode(new Error(`invalid port provided: ${port}`), errors.ERR_INVALID_PORT_PARAMETER)
} }
if (new Address4(ip).isValid()) { if (new Address4(ip).isValid()) {
@ -26,5 +33,7 @@ module.exports = (ip, port) => {
: multiaddr(`/ip6/${ip}/tcp/${port}`) : multiaddr(`/ip6/${ip}/tcp/${port}`)
} }
throw new Error('invalid ip') throw errCode(new Error(`invalid ip:port for creating a multiaddr: ${ip}:${port}`), errors.ERR_INVALID_IP)
} }
module.exports.Errors = errors

View File

@ -5,7 +5,9 @@ const chai = require('chai')
const dirtyChai = require('dirty-chai') const dirtyChai = require('dirty-chai')
const expect = chai.expect const expect = chai.expect
chai.use(dirtyChai) chai.use(dirtyChai)
const toMultiaddr = require('../src/ip-port-to-multiaddr') const toMultiaddr = require('../src/ip-port-to-multiaddr')
const { Errors } = require('../src/ip-port-to-multiaddr')
describe('IP and port to Multiaddr', () => { describe('IP and port to Multiaddr', () => {
it('creates multiaddr from valid IPv4 IP and port', () => { it('creates multiaddr from valid IPv4 IP and port', () => {
@ -33,18 +35,18 @@ describe('IP and port to Multiaddr', () => {
}) })
it('throws for missing IP address', () => { it('throws for missing IP address', () => {
expect(() => toMultiaddr()).to.throw('invalid ip') expect(() => toMultiaddr()).to.throw('invalid ip provided').with.property('code', Errors.ERR_INVALID_IP_PARAMETER)
}) })
it('throws for invalid IP address', () => { it('throws for invalid IP address', () => {
const ip = 'aewmrn4awoew' const ip = 'aewmrn4awoew'
const port = '234' const port = '234'
expect(() => toMultiaddr(ip, port)).to.throw('invalid ip') expect(() => toMultiaddr(ip, port)).to.throw('invalid ip:port for creating a multiaddr').with.property('code', Errors.ERR_INVALID_IP)
}) })
it('throws for invalid port', () => { it('throws for invalid port', () => {
const ip = '127.0.0.1' const ip = '127.0.0.1'
const port = 'garbage' const port = 'garbage'
expect(() => toMultiaddr(ip, port)).to.throw('invalid port') expect(() => toMultiaddr(ip, port)).to.throw('invalid port provided').with.property('code', Errors.ERR_INVALID_PORT_PARAMETER)
}) })
}) })