Skip to content

Commit

Permalink
Added more specs
Browse files Browse the repository at this point in the history
  • Loading branch information
tomdionysus committed May 13, 2020
1 parent 72841e0 commit 49e425e
Show file tree
Hide file tree
Showing 2 changed files with 141 additions and 2 deletions.
2 changes: 1 addition & 1 deletion lib/DNSPacket.js
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ class DNSPacket {

_readAAAARR (des) {
return {
address: this._readIPv4(des)
address: this._readIPv6(des)
}
}

Expand Down
141 changes: 140 additions & 1 deletion spec/DNSPacket_spec.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/* eslint-env jasmine */

const DNSPacket = require('../lib/DNSPacket')
const { BinaryDeserializer } = require('network-serializer')

describe('DNSPacket', () => {
var x1
Expand Down Expand Up @@ -37,7 +38,7 @@ describe('DNSPacket', () => {
describe('fromBuffer', ()=>{
it('should parse buffer into correct object',()=>{

var b = new Buffer([ 0, 0, 210, 133, 0, 1, 0, 0, 0, 0, 0, 0, 6, 100, 111, 109, 97, 105, 110, 0, 0, 255, 0, 1 ])
var b = Buffer.from([ 0, 0, 210, 133, 0, 1, 0, 0, 0, 0, 0, 0, 6, 100, 111, 109, 97, 105, 110, 0, 0, 255, 0, 1 ])
var c = DNSPacket.fromBuffer(b)

expect(c.flags).toEqual({
Expand Down Expand Up @@ -173,6 +174,114 @@ describe('DNSPacket', () => {
})
})

describe('_readResourceRecord', ()=>{
var x, des, ret

beforeEach(()=>{
spyOn(x1,'_readDomain').and.returnValue('domain')

x = 0
des = {
readUInt32: ()=>{ return x++ },
readUInt16: ()=>{ return ret },
readBytes: ()=>{ return x++ },
}
spyOn(des,'readUInt32').and.callThrough()
spyOn(des,'readUInt16').and.callThrough()
spyOn(des,'readBytes').and.callThrough()
})

it('should call readUInt32, readUInt16, readBytes',()=>{
ret = 0xFFFF

var obj = x1._readResourceRecord(des, false)

// Question section
expect(x1._readDomain).toHaveBeenCalledWith(des)
expect(des.readUInt16).toHaveBeenCalledTimes(3)
expect(des.readUInt16).toHaveBeenCalledWith()

// Answer Section
expect(des.readUInt32).toHaveBeenCalledTimes(1)
expect(des.readBytes).toHaveBeenCalledWith(65535)

expect(obj).toEqual({ qname: 'domain', qtype: 65535, qclass: 65535, ttl: 0, rddata: 1 })
})

it('should call _readARR for DNSPacket.QType.A',()=>{
ret = DNSPacket.QType.A
spyOn(x1,'_readARR').and.returnValue('RDATA1')
var obj = x1._readResourceRecord(des, false)
expect(x1._readARR).toHaveBeenCalledWith(jasmine.any(BinaryDeserializer))
expect(obj).toEqual({ qname: 'domain', qtype: ret, qclass: ret, ttl: 0, rddata: 'RDATA1' })
})

it('should call _readNSRR for DNSPacket.QType.NS',()=>{
ret = DNSPacket.QType.NS
spyOn(x1,'_readNSRR').and.returnValue('RDATA2')
var obj = x1._readResourceRecord(des, false)
expect(x1._readNSRR).toHaveBeenCalledWith(jasmine.any(BinaryDeserializer))
expect(obj).toEqual({ qname: 'domain', qtype: ret, qclass: ret, ttl: 0, rddata: 'RDATA2' })
})

it('should call _readCNAMERR for DNSPacket.QType.CNAME',()=>{
ret = DNSPacket.QType.CNAME
spyOn(x1,'_readCNAMERR').and.returnValue('RDATA3')
var obj = x1._readResourceRecord(des, false)
expect(x1._readCNAMERR).toHaveBeenCalledWith(jasmine.any(BinaryDeserializer))
expect(obj).toEqual({ qname: 'domain', qtype: ret, qclass: ret, ttl: 0, rddata: 'RDATA3' })
})

it('should call _readSOARR for DNSPacket.QType.SOA',()=>{
ret = DNSPacket.QType.SOA
spyOn(x1,'_readSOARR').and.returnValue('RDATA4')
var obj = x1._readResourceRecord(des, false)
expect(x1._readSOARR).toHaveBeenCalledWith(jasmine.any(BinaryDeserializer))
expect(obj).toEqual({ qname: 'domain', qtype: ret, qclass: ret, ttl: 0, rddata: 'RDATA4' })
})

it('should call _readPTRRR for DNSPacket.QType.PTR',()=>{
ret = DNSPacket.QType.PTR
spyOn(x1,'_readPTRRR').and.returnValue('RDATA5')
var obj = x1._readResourceRecord(des, false)
expect(x1._readPTRRR).toHaveBeenCalledWith(jasmine.any(BinaryDeserializer))
expect(obj).toEqual({ qname: 'domain', qtype: ret, qclass: ret, ttl: 0, rddata: 'RDATA5' })
})

it('should call _readMXRR for DNSPacket.QType.MX',()=>{
ret = DNSPacket.QType.MX
spyOn(x1,'_readMXRR').and.returnValue('RDATA6')
var obj = x1._readResourceRecord(des, false)
expect(x1._readMXRR).toHaveBeenCalledWith(jasmine.any(BinaryDeserializer))
expect(obj).toEqual({ qname: 'domain', qtype: ret, qclass: ret, ttl: 0, rddata: 'RDATA6' })
})

it('should call _readTXTRR for DNSPacket.QType.TXT',()=>{
ret = DNSPacket.QType.TXT
spyOn(x1,'_readTXTRR').and.returnValue('RDATA7')
var obj = x1._readResourceRecord(des, false)
expect(x1._readTXTRR).toHaveBeenCalledWith(jasmine.any(BinaryDeserializer))
expect(obj).toEqual({ qname: 'domain', qtype: ret, qclass: ret, ttl: 0, rddata: 'RDATA7' })
})

it('should call _readSRVRR for DNSPacket.QType.SRV',()=>{
ret = DNSPacket.QType.SRV
spyOn(x1,'_readSRVRR').and.returnValue('RDATA8')
var obj = x1._readResourceRecord(des, false)
expect(x1._readSRVRR).toHaveBeenCalledWith(jasmine.any(BinaryDeserializer))
expect(obj).toEqual({ qname: 'domain', qtype: ret, qclass: ret, ttl: 0, rddata: 'RDATA8' })
})

it('should call _readAAAARR for DNSPacket.QType.AAAA',()=>{
ret = DNSPacket.QType.AAAA
spyOn(x1,'_readAAAARR').and.returnValue('RDATA9')
var obj = x1._readResourceRecord(des, false)
expect(x1._readAAAARR).toHaveBeenCalledWith(jasmine.any(BinaryDeserializer))
expect(obj).toEqual({ qname: 'domain', qtype: ret, qclass: ret, ttl: 0, rddata: 'RDATA9' })
})

})

describe('_readARR', ()=>{
it('should call _readIPv4 and return object',()=>{
spyOn(x1,'_readIPv4').and.returnValue('IPADDR')
Expand Down Expand Up @@ -244,4 +353,34 @@ describe('DNSPacket', () => {
expect(x1._readDomain).toHaveBeenCalledWith(des)
})
})

describe('_readTXTRR', ()=>{
it('should call _readDomain and return object',()=>{
spyOn(x1,'_readDomain').and.returnValue('TXT')

expect(x1._readTXTRR(des)).toEqual({ text: 'TXT' })
expect(x1._readDomain).toHaveBeenCalledWith(des)
})
})

describe('_readSRVRR', ()=>{
it('should call _readDomain and return object',()=>{
spyOn(x1,'_readDomain').and.returnValue('DOMAIN')
var des = { readUInt16: ()=>{} }
spyOn(des,'readUInt16').and.returnValue(10)

expect(x1._readSRVRR(des)).toEqual({ priority: 10, weight: 10, port:10, target: 'DOMAIN' })
expect(des.readUInt16).toHaveBeenCalledTimes(3)
expect(x1._readDomain).toHaveBeenCalledWith(des)
})
})

describe('_readAAAARR', ()=>{
it('should call _readDomain and return object',()=>{
spyOn(x1,'_readIPv6').and.returnValue('IPV6')

expect(x1._readAAAARR(des)).toEqual({ address: 'IPV6' })
expect(x1._readIPv6).toHaveBeenCalledWith(des)
})
})
})

0 comments on commit 49e425e

Please sign in to comment.