isc-dhcp-server
Version:
NodeJS package to programatically manage an isc-dhcp-server.
158 lines (141 loc) • 4.92 kB
JavaScript
var proxyquire = require('proxyquire')
var expect = require('chai').expect
var sinon = require('sinon')
var tpl = require('../src/template.js')
var default_tpl = require('../src/templates/default.js')
describe('config template generator', () => {
describe('generateStatic() method', () => {
it('should generate empty string if config.static is not defined', () => {
var expected_output = ``
var output = tpl.generateStatic()
expect(output).to.equal(expected_output)
})
it('should generate empty string if config.static is empty', () => {
var expected_output = ``
var output = tpl.generateStatic([])
expect(output).to.equal(expected_output)
})
it('should generate static ip/mac config portion', () => {
var hosts = [
{hostname: 'host1', ip_address: '10.0.0.1', mac_address: '111111'},
{hostname: 'host2', ip_address: '10.0.0.2', mac_address: '222222'}
]
var expected_output = `
host host1 {
hardware ethernet 111111;
fixed-address 10.0.0.1;
}
host host2 {
hardware ethernet 222222;
fixed-address 10.0.0.2;
}
`
var output = tpl.generateStatic(hosts)
expect(output).to.equal(expected_output)
})
})
describe('generateSubnet() method', () => {
it('should generate the subnet portion of config without static mappings', () => {
var config = {
network: '10.0.0.0',
range: ['10.0.0.3', '10.0.15.254'],
netmask: '255.255.240.0',
broadcast: '10.0.15.255',
router: ['10.0.0.1', '10.0.0.2'],
dns: ['10.0.0.1', '8.8.8.8']
}
var expected_output = `
subnet 10.0.0.0 netmask 255.255.240.0 {
range 10.0.0.3 10.0.15.254;
option broadcast-address 10.0.15.255;
option routers 10.0.0.1, 10.0.0.2;
default-lease-time 43200;
min-lease-time 43199;
max-lease-time 43201;
option domain-name-servers 10.0.0.1, 8.8.8.8;
}
`
var output = tpl.generateSubnet(config)
expect(output).to.equal(expected_output)
})
it('should generate the subnet portion of config with static mappings', () => {
var static_entries_mock = 'STATIC ENTRIES MOCK'
var generate_static_stub = sinon.stub(tpl, 'generateStatic').returns(static_entries_mock)
var config = {
static: [{
hostname: 'host1',
ip_address: '10.0.0.1',
mac_address: '111111'
}],
network: '10.0.0.0',
range: ['10.0.0.3', '10.0.15.254'],
netmask: '255.255.240.0',
broadcast: '10.0.15.255',
router: ['10.0.0.1', '10.0.0.2'],
dns: ['10.0.0.1', '8.8.8.8']
}
var expected_output = `
subnet 10.0.0.0 netmask 255.255.240.0 {
range 10.0.0.3 10.0.15.254;
option broadcast-address 10.0.15.255;
option routers 10.0.0.1, 10.0.0.2;
default-lease-time 43200;
min-lease-time 43199;
max-lease-time 43201;
option domain-name-servers 10.0.0.1, 8.8.8.8;
${static_entries_mock}
}
`
var output = tpl.generateSubnet(config)
expect(output.trim()).to.equal(expected_output.trim())
sinon.assert.calledWithExactly(generate_static_stub, config.static)
generate_static_stub.restore()
})
})
describe('generateConfig() method', () => {
it('should generate config for single subnet', () => {
var subnet_result_mock = 'SUBNET RESULT MOCK'
var generate_subnet_stub = sinon.stub(tpl, 'generateSubnet').returns(subnet_result_mock)
var config = {interface: 'eth0'}
var expected_output = default_tpl + `
${subnet_result_mock}
`
var output = tpl.generateConfig(config)
expect(output).to.equal(expected_output.trim())
generate_subnet_stub.restore()
})
it('should generate config for multiple subnet', () => {
var subnet_result_mock = 'SUBNET RESULT MOCK'
var generate_subnet_stub = sinon.stub(tpl, 'generateSubnet').returns(subnet_result_mock)
var config = [{interface: 'eth0'}, {interface: 'wlan0'}]
var expected_output = default_tpl + `
${subnet_result_mock}
${subnet_result_mock}
`
var output = tpl.generateConfig(config)
expect(output).to.equal(expected_output.trim())
generate_subnet_stub.restore()
})
})
describe('iscDefaultConfig() method', () => {
it('should generate config for /etc/default/isc-dhcp-server for multiple interfaces', () => {
var config = [{interface: 'eth0'}, {interface: 'wlan0'}]
var expected_output = `
INTERFACES="eth0 wlan0"
INTERFACESv4="eth0 wlan0"
`
var output = tpl.iscDefaultConfig(config)
expect(output).to.equal(expected_output)
})
it('should generate config for /etc/default/isc-dhcp-server for single interface', () => {
var config = {interface: 'wlan0'}
var expected_output = `
INTERFACES="wlan0"
INTERFACESv4="wlan0"
`
var output = tpl.iscDefaultConfig(config)
expect(output).to.equal(expected_output)
})
})
})