Comparing version 0.2.1 to 0.2.2
@@ -74,13 +74,17 @@ var debug = require('debug')('mdns:lib:decoder'); | ||
}; | ||
var packet = dns.DNSPacket.parse(message); | ||
var packets = dns.DNSPacket.parse(message); | ||
if (!(packets instanceof Array)) { | ||
packets = [packets]; | ||
} | ||
var query = []; | ||
packets.forEach(function (packet) { | ||
decodeSection(packet, 'answer', data); | ||
decodeSection(packet, 'authority', data); | ||
decodeSection(packet, 'additional', data); | ||
decodeSection(packet, 'answer', data); | ||
decodeSection(packet, 'authority', data); | ||
decodeSection(packet, 'additional', data); | ||
var query = []; | ||
packet.question.forEach(function (rec) { | ||
if (rec.type === dns.DNSRecord.Type.PTR) { | ||
query.push(rec.name); | ||
} | ||
packet.question.forEach(function (rec) { | ||
if (rec.type === dns.DNSRecord.Type.PTR) { | ||
query.push(rec.name); | ||
} | ||
}); | ||
}); | ||
@@ -87,0 +91,0 @@ |
@@ -10,3 +10,2 @@ var debug = require('debug')('mdns:lib:ServiceType'); | ||
var ServiceType = exports.ServiceType = function (/* ... */) { | ||
var self = this; | ||
this.name = ''; | ||
@@ -13,0 +12,0 @@ this.protocol = ''; |
{ | ||
"name": "mdns-js", | ||
"version": "0.2.1", | ||
"version": "0.2.2", | ||
"repository": { | ||
@@ -5,0 +5,0 @@ "type": "git", |
@@ -20,84 +20,10 @@ var Lab = require('lab'); | ||
var Schemas = require('./schemas'); | ||
//var Schemas = require('./schemas'); | ||
var fixtureFolder = path.join(__dirname, 'fixtures'); | ||
var fixturesFolderDecoded = path.join(fixtureFolder, 'decoded-sections'); | ||
var fixturesFolderMessages = path.join(fixtureFolder, 'decoded-messages'); | ||
//shamelessly borrow from mdns-js-packet | ||
var fixturesPacket = path.join('.', 'node_modules', | ||
'mdns-js-packet', 'test', 'fixtures'); | ||
var path = require('path'); | ||
var helper = require('./helper'); | ||
function testDecodeSection (binFolder, jsFolder) { | ||
var files = fs.readdirSync(binFolder).filter(function (f) { | ||
return /\.bin$/.test(f); | ||
}); | ||
files.forEach(function (file) { | ||
it('decode ' + file, function (done) { | ||
var djsFile = path.join(jsFolder, file.replace('.bin', '.js')); | ||
var binFile = path.join(binFolder, file); | ||
var djsExists = fs.existsSync(djsFile); | ||
var b = helper.readBin(binFile); | ||
expect(b).to.exist(b); | ||
var packet = DNSPacket.parse(b); | ||
var obj = { | ||
question: {}, | ||
answer: {}, | ||
authority: {}, | ||
additional: {} | ||
}; | ||
var count = 0; | ||
var expected = 0; | ||
for (var key in obj) { | ||
expected++; | ||
if (!obj.hasOwnProperty(key)) {continue;} | ||
decoder.decodeSection(packet, key, obj[key]); | ||
if (Schemas.hasOwnProperty(key)) { | ||
Schemas.validate(obj[key], Schemas[key], validateSchema); | ||
} | ||
else { | ||
throw new Error('Missing schema ' + key); | ||
} | ||
} | ||
function validateSchema(err) { | ||
if (err) { | ||
console.log(key, obj[key]); | ||
console.log('packet', packet); | ||
if (!djsExists) { | ||
helper.writeJs(djsFile, obj); | ||
} | ||
throw err; | ||
} | ||
count++; | ||
} | ||
if (!djsExists) { | ||
helper.writeJs(djsFile, obj); | ||
} | ||
else { | ||
var dj = helper.readJs(djsFile); | ||
helper.equalDeep(dj, obj); | ||
} | ||
setTimeout(function () { | ||
if (count >= expected) { | ||
done(); | ||
} | ||
else { | ||
done('all schemas not validated'); | ||
} | ||
}, 50); | ||
});//--decode... | ||
}); | ||
} | ||
function testDecodeMessage (binFolder, jsFolder) { | ||
@@ -133,9 +59,28 @@ var files = fs.readdirSync(binFolder).filter(function (f) { | ||
describe('decodeSection', function () { | ||
testDecodeSection(fixturesPacket, fixturesFolderDecoded); | ||
}); | ||
it('should thow error on bad section', function (done) { | ||
var p = new DNSPacket(); | ||
var obj = {}; | ||
var throws = function () { | ||
decoder.decodeSection(p, 'asdfasdf', obj); | ||
}; | ||
describe('decodeMessage', function () { | ||
testDecodeMessage(fixturesPacket, fixturesFolderMessages); | ||
expect(throws).to.throw(Error); | ||
done(); | ||
}); | ||
it('should thow error on missing obj', function (done) { | ||
var p = new DNSPacket(); | ||
var throws = function () { | ||
decoder.decodeSection(p, 'question'); | ||
}; | ||
expect(throws).to.throw(Error); | ||
done(); | ||
}); | ||
}); | ||
// describe('decodeMessage', function () { | ||
// testDecodeMessage(fixturesPacket, fixturesFolderMessages); | ||
// }); | ||
describe('decodeMessage - workstation', function () { | ||
@@ -142,0 +87,0 @@ testDecodeMessage(fixtureFolder, fixtureFolder); |
@@ -18,2 +18,5 @@ var Lab = require('lab'); | ||
expect(type.subtypes).to.be.empty(); | ||
expect(type.isWildcard()).to.be.false(); | ||
var a = type.toArray(); | ||
expect(a).to.be.instanceof(Array); | ||
done(); | ||
@@ -42,2 +45,48 @@ }); | ||
}); | ||
it('should tak array as input', function (done) { | ||
var type = new ServiceType(['_http', '_tcp']); | ||
expect(type).to.include({protocol: 'tcp', name: 'http'}); | ||
expect(type.subtypes).to.be.empty(); | ||
done(); | ||
}); | ||
it('should take multiple arguments is input', function (done) { | ||
var type = new ServiceType('_http', '_tcp'); | ||
expect(type).to.include({protocol: 'tcp', name: 'http'}); | ||
expect(type.subtypes).to.be.empty(); | ||
done(); | ||
}); | ||
it('should on empty arguments', function (done) { | ||
var type = new ServiceType(); | ||
expect(type).to.include({protocol: '', name: ''}); | ||
expect(type.subtypes).to.be.empty(); | ||
done(); | ||
}); | ||
it('should take object as argument', function (done) { | ||
var type = new ServiceType({protocol: 'tcp', name: 'http'}); | ||
expect(type).to.include({protocol: 'tcp', name: 'http'}); | ||
expect(type.subtypes).to.be.empty(); | ||
done(); | ||
}); | ||
it('should throw on bad protocol', function (done) { | ||
var throws = function () { | ||
new ServiceType('service._http._qwe.local'); | ||
}; | ||
expect(throws).to.throw(Error, | ||
'protocol must be either "_tcp" or "_udp" but is "_qwe"'); | ||
done(); | ||
}); | ||
it('should throw on bad protocol', function (done) { | ||
var throws = function () { | ||
new ServiceType('service._http._qwe.local'); | ||
}; | ||
expect(throws).to.throw(Error, | ||
'protocol must be either "_tcp" or "_udp" but is "_qwe"'); | ||
done(); | ||
}); | ||
}); |
75730
64
1687