2016-11-30 15:35:58 +01:00
|
|
|
/* jslint node:true */
|
|
|
|
|
/* global it:false */
|
|
|
|
|
/* global describe:false */
|
|
|
|
|
/* global before:false */
|
|
|
|
|
/* global after:false */
|
|
|
|
|
|
|
|
|
|
'use strict';
|
|
|
|
|
|
|
|
|
|
var async = require('async'),
|
2016-11-30 18:04:47 +01:00
|
|
|
AWS = require('aws-sdk'),
|
2017-01-10 16:44:28 -08:00
|
|
|
config = require('../config.js'),
|
2016-11-30 15:35:58 +01:00
|
|
|
database = require('../database.js'),
|
|
|
|
|
expect = require('expect.js'),
|
|
|
|
|
nock = require('nock'),
|
|
|
|
|
settings = require('../settings.js'),
|
2016-11-30 18:04:47 +01:00
|
|
|
subdomains = require('../subdomains.js'),
|
|
|
|
|
util = require('util');
|
2016-11-30 15:35:58 +01:00
|
|
|
|
|
|
|
|
describe('dns provider', function () {
|
|
|
|
|
before(function (done) {
|
2017-06-08 19:22:58 -07:00
|
|
|
config._reset();
|
|
|
|
|
|
2016-11-30 15:35:58 +01:00
|
|
|
async.series([
|
2017-02-06 22:18:20 -08:00
|
|
|
database.initialize,
|
2017-06-08 19:22:58 -07:00
|
|
|
settings.initialize
|
2016-11-30 15:35:58 +01:00
|
|
|
], done);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
after(function (done) {
|
|
|
|
|
database._clear(done);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
describe('noop', function () {
|
|
|
|
|
before(function (done) {
|
|
|
|
|
var data = {
|
|
|
|
|
provider: 'noop'
|
|
|
|
|
};
|
|
|
|
|
|
2017-06-08 19:22:58 -07:00
|
|
|
config.setFqdn('example.com');
|
|
|
|
|
config.setZoneName('example.com');
|
|
|
|
|
|
2017-06-15 20:05:31 -07:00
|
|
|
settings.setDnsConfig(data, config.fqdn(), config.zoneName(), done);
|
2016-11-30 15:35:58 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('upsert succeeds', function (done) {
|
2016-11-30 16:36:51 +01:00
|
|
|
subdomains.upsert('test', 'A', [ '1.2.3.4' ], function (error, result) {
|
2016-11-30 15:35:58 +01:00
|
|
|
expect(error).to.eql(null);
|
|
|
|
|
expect(result).to.eql('noop-record-id');
|
|
|
|
|
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('get succeeds', function (done) {
|
|
|
|
|
subdomains.get('test', 'A', function (error, result) {
|
|
|
|
|
expect(error).to.eql(null);
|
|
|
|
|
expect(result).to.be.an(Array);
|
|
|
|
|
expect(result.length).to.eql(0);
|
|
|
|
|
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('del succeeds', function (done) {
|
2016-11-30 16:36:51 +01:00
|
|
|
subdomains.remove('test', 'A', [ '1.2.3.4' ], function (error) {
|
2016-11-30 15:35:58 +01:00
|
|
|
expect(error).to.eql(null);
|
|
|
|
|
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
2016-11-30 16:36:51 +01:00
|
|
|
|
|
|
|
|
describe('digitalocean', function () {
|
|
|
|
|
var TOKEN = 'sometoken';
|
|
|
|
|
var DIGITALOCEAN_ENDPOINT = 'https://api.digitalocean.com';
|
|
|
|
|
|
|
|
|
|
before(function (done) {
|
|
|
|
|
var data = {
|
|
|
|
|
provider: 'digitalocean',
|
|
|
|
|
token: TOKEN
|
|
|
|
|
};
|
|
|
|
|
|
2017-06-08 19:22:58 -07:00
|
|
|
config.setFqdn('example.com');
|
|
|
|
|
config.setZoneName('example.com');
|
|
|
|
|
|
2017-06-15 20:05:31 -07:00
|
|
|
settings.setDnsConfig(data, config.fqdn(), config.zoneName(), done);
|
2016-11-30 16:36:51 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('upsert non-existing record succeeds', function (done) {
|
|
|
|
|
nock.cleanAll();
|
|
|
|
|
|
|
|
|
|
var DOMAIN_RECORD_0 = {
|
|
|
|
|
id: 3352892,
|
|
|
|
|
type: 'A',
|
|
|
|
|
name: '@',
|
|
|
|
|
data: '1.2.3.4',
|
|
|
|
|
priority: null,
|
|
|
|
|
port: null,
|
|
|
|
|
weight: null
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var req1 = nock(DIGITALOCEAN_ENDPOINT).filteringRequestBody(function () { return false; })
|
2017-06-08 19:22:58 -07:00
|
|
|
.get('/v2/domains/' + config.zoneName() + '/records')
|
2016-11-30 16:36:51 +01:00
|
|
|
.reply(200, { domain_records: [] });
|
|
|
|
|
var req2 = nock(DIGITALOCEAN_ENDPOINT).filteringRequestBody(function () { return false; })
|
2017-06-08 19:22:58 -07:00
|
|
|
.post('/v2/domains/' + config.zoneName() + '/records')
|
2016-11-30 16:36:51 +01:00
|
|
|
.reply(201, { domain_record: DOMAIN_RECORD_0 });
|
|
|
|
|
|
|
|
|
|
subdomains.upsert('test', 'A', [ '1.2.3.4' ], function (error, result) {
|
|
|
|
|
expect(error).to.eql(null);
|
|
|
|
|
expect(result).to.eql('unused');
|
|
|
|
|
expect(req1.isDone()).to.be.ok();
|
|
|
|
|
expect(req2.isDone()).to.be.ok();
|
|
|
|
|
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('upsert existing record succeeds', function (done) {
|
|
|
|
|
nock.cleanAll();
|
|
|
|
|
|
|
|
|
|
var DOMAIN_RECORD_0 = {
|
|
|
|
|
id: 3352892,
|
|
|
|
|
type: 'A',
|
|
|
|
|
name: '@',
|
|
|
|
|
data: '1.2.3.4',
|
|
|
|
|
priority: null,
|
|
|
|
|
port: null,
|
|
|
|
|
weight: null
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var DOMAIN_RECORD_1 = {
|
|
|
|
|
id: 3352893,
|
|
|
|
|
type: 'A',
|
|
|
|
|
name: 'test',
|
|
|
|
|
data: '1.2.3.4',
|
|
|
|
|
priority: null,
|
|
|
|
|
port: null,
|
|
|
|
|
weight: null
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var DOMAIN_RECORD_1_NEW = {
|
|
|
|
|
id: 3352893,
|
|
|
|
|
type: 'A',
|
|
|
|
|
name: 'test',
|
|
|
|
|
data: '1.2.3.5',
|
|
|
|
|
priority: null,
|
|
|
|
|
port: null,
|
|
|
|
|
weight: null
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var req1 = nock(DIGITALOCEAN_ENDPOINT).filteringRequestBody(function () { return false; })
|
2017-06-08 19:22:58 -07:00
|
|
|
.get('/v2/domains/' + config.zoneName() + '/records')
|
2016-11-30 16:36:51 +01:00
|
|
|
.reply(200, { domain_records: [ DOMAIN_RECORD_0, DOMAIN_RECORD_1 ] });
|
|
|
|
|
var req2 = nock(DIGITALOCEAN_ENDPOINT).filteringRequestBody(function () { return false; })
|
2017-06-08 19:22:58 -07:00
|
|
|
.put('/v2/domains/' + config.zoneName() + '/records/' + DOMAIN_RECORD_1.id)
|
2016-11-30 16:36:51 +01:00
|
|
|
.reply(200, { domain_records: DOMAIN_RECORD_1_NEW });
|
|
|
|
|
|
|
|
|
|
subdomains.upsert('test', 'A', [ DOMAIN_RECORD_1_NEW.data ], function (error, result) {
|
|
|
|
|
expect(error).to.eql(null);
|
|
|
|
|
expect(result).to.eql('unused');
|
|
|
|
|
expect(req1.isDone()).to.be.ok();
|
|
|
|
|
expect(req2.isDone()).to.be.ok();
|
|
|
|
|
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
2016-11-30 17:00:47 +01:00
|
|
|
it('upsert multiple record succeeds', function (done) {
|
2016-11-30 16:36:51 +01:00
|
|
|
nock.cleanAll();
|
|
|
|
|
|
|
|
|
|
var DOMAIN_RECORD_0 = {
|
|
|
|
|
id: 3352892,
|
|
|
|
|
type: 'A',
|
|
|
|
|
name: '@',
|
|
|
|
|
data: '1.2.3.4',
|
|
|
|
|
priority: null,
|
|
|
|
|
port: null,
|
|
|
|
|
weight: null
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var DOMAIN_RECORD_1 = {
|
|
|
|
|
id: 3352893,
|
2016-11-30 17:00:47 +01:00
|
|
|
type: 'TXT',
|
|
|
|
|
name: '@',
|
2016-11-30 16:36:51 +01:00
|
|
|
data: '1.2.3.4',
|
|
|
|
|
priority: null,
|
|
|
|
|
port: null,
|
|
|
|
|
weight: null
|
|
|
|
|
};
|
|
|
|
|
|
2016-11-30 17:00:47 +01:00
|
|
|
var DOMAIN_RECORD_1_NEW = {
|
2016-11-30 16:36:51 +01:00
|
|
|
id: 3352893,
|
|
|
|
|
type: 'TXT',
|
|
|
|
|
name: '@',
|
2016-11-30 17:00:47 +01:00
|
|
|
data: 'somethingnew',
|
|
|
|
|
priority: null,
|
|
|
|
|
port: null,
|
|
|
|
|
weight: null
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var DOMAIN_RECORD_2 = {
|
|
|
|
|
id: 3352894,
|
|
|
|
|
type: 'TXT',
|
|
|
|
|
name: '@',
|
2016-11-30 16:36:51 +01:00
|
|
|
data: 'something',
|
|
|
|
|
priority: null,
|
|
|
|
|
port: null,
|
|
|
|
|
weight: null
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var DOMAIN_RECORD_2_NEW = {
|
2016-11-30 17:00:47 +01:00
|
|
|
id: 3352894,
|
2016-11-30 16:36:51 +01:00
|
|
|
type: 'TXT',
|
|
|
|
|
name: '@',
|
|
|
|
|
data: 'somethingnew',
|
|
|
|
|
priority: null,
|
|
|
|
|
port: null,
|
|
|
|
|
weight: null
|
|
|
|
|
};
|
|
|
|
|
|
2016-11-30 17:00:47 +01:00
|
|
|
var DOMAIN_RECORD_3_NEW = {
|
|
|
|
|
id: 3352895,
|
|
|
|
|
type: 'TXT',
|
|
|
|
|
name: '@',
|
|
|
|
|
data: 'thirdnewone',
|
|
|
|
|
priority: null,
|
|
|
|
|
port: null,
|
|
|
|
|
weight: null
|
|
|
|
|
};
|
|
|
|
|
|
2016-11-30 16:36:51 +01:00
|
|
|
var req1 = nock(DIGITALOCEAN_ENDPOINT).filteringRequestBody(function () { return false; })
|
2017-06-08 19:22:58 -07:00
|
|
|
.get('/v2/domains/' + config.zoneName() + '/records')
|
2016-11-30 16:36:51 +01:00
|
|
|
.reply(200, { domain_records: [ DOMAIN_RECORD_0, DOMAIN_RECORD_1, DOMAIN_RECORD_2 ] });
|
|
|
|
|
var req2 = nock(DIGITALOCEAN_ENDPOINT).filteringRequestBody(function () { return false; })
|
2017-06-08 19:22:58 -07:00
|
|
|
.put('/v2/domains/' + config.zoneName() + '/records/' + DOMAIN_RECORD_1.id)
|
2016-11-30 17:00:47 +01:00
|
|
|
.reply(200, { domain_records: DOMAIN_RECORD_1_NEW });
|
|
|
|
|
var req3 = nock(DIGITALOCEAN_ENDPOINT).filteringRequestBody(function () { return false; })
|
2017-06-08 19:22:58 -07:00
|
|
|
.put('/v2/domains/' + config.zoneName() + '/records/' + DOMAIN_RECORD_2.id)
|
2016-11-30 16:36:51 +01:00
|
|
|
.reply(200, { domain_records: DOMAIN_RECORD_2_NEW });
|
2016-11-30 17:00:47 +01:00
|
|
|
var req4 = nock(DIGITALOCEAN_ENDPOINT).filteringRequestBody(function () { return false; })
|
2017-06-08 19:22:58 -07:00
|
|
|
.post('/v2/domains/' + config.zoneName() + '/records')
|
2016-11-30 16:36:51 +01:00
|
|
|
.reply(201, { domain_records: DOMAIN_RECORD_2_NEW });
|
|
|
|
|
|
2016-11-30 17:00:47 +01:00
|
|
|
subdomains.upsert('', 'TXT', [ DOMAIN_RECORD_2_NEW.data, DOMAIN_RECORD_1_NEW.data, DOMAIN_RECORD_3_NEW.data ], function (error, result) {
|
2016-11-30 16:36:51 +01:00
|
|
|
expect(error).to.eql(null);
|
|
|
|
|
expect(result).to.eql('unused');
|
|
|
|
|
expect(req1.isDone()).to.be.ok();
|
|
|
|
|
expect(req2.isDone()).to.be.ok();
|
|
|
|
|
expect(req3.isDone()).to.be.ok();
|
2016-11-30 17:00:47 +01:00
|
|
|
expect(req4.isDone()).to.be.ok();
|
2016-11-30 16:36:51 +01:00
|
|
|
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('get succeeds', function (done) {
|
|
|
|
|
nock.cleanAll();
|
|
|
|
|
|
|
|
|
|
var DOMAIN_RECORD_0 = {
|
|
|
|
|
id: 3352892,
|
|
|
|
|
type: 'A',
|
|
|
|
|
name: '@',
|
|
|
|
|
data: '1.2.3.4',
|
|
|
|
|
priority: null,
|
|
|
|
|
port: null,
|
|
|
|
|
weight: null
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var DOMAIN_RECORD_1 = {
|
|
|
|
|
id: 3352893,
|
|
|
|
|
type: 'A',
|
|
|
|
|
name: 'test',
|
|
|
|
|
data: '1.2.3.4',
|
|
|
|
|
priority: null,
|
|
|
|
|
port: null,
|
|
|
|
|
weight: null
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var req1 = nock(DIGITALOCEAN_ENDPOINT).filteringRequestBody(function () { return false; })
|
2017-06-08 19:22:58 -07:00
|
|
|
.get('/v2/domains/' + config.zoneName() + '/records')
|
2016-11-30 16:36:51 +01:00
|
|
|
.reply(200, { domain_records: [ DOMAIN_RECORD_0, DOMAIN_RECORD_1 ] });
|
|
|
|
|
|
|
|
|
|
subdomains.get('test', 'A', function (error, result) {
|
|
|
|
|
expect(error).to.eql(null);
|
|
|
|
|
expect(result).to.be.an(Array);
|
|
|
|
|
expect(result.length).to.eql(1);
|
|
|
|
|
expect(result[0]).to.eql(DOMAIN_RECORD_1.data);
|
|
|
|
|
expect(req1.isDone()).to.be.ok();
|
|
|
|
|
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('del succeeds', function (done) {
|
|
|
|
|
nock.cleanAll();
|
|
|
|
|
|
|
|
|
|
var DOMAIN_RECORD_0 = {
|
|
|
|
|
id: 3352892,
|
|
|
|
|
type: 'A',
|
|
|
|
|
name: '@',
|
|
|
|
|
data: '1.2.3.4',
|
|
|
|
|
priority: null,
|
|
|
|
|
port: null,
|
|
|
|
|
weight: null
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var DOMAIN_RECORD_1 = {
|
|
|
|
|
id: 3352893,
|
|
|
|
|
type: 'A',
|
|
|
|
|
name: 'test',
|
|
|
|
|
data: '1.2.3.4',
|
|
|
|
|
priority: null,
|
|
|
|
|
port: null,
|
|
|
|
|
weight: null
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var req1 = nock(DIGITALOCEAN_ENDPOINT).filteringRequestBody(function () { return false; })
|
2017-06-08 19:22:58 -07:00
|
|
|
.get('/v2/domains/' + config.zoneName() + '/records')
|
2016-11-30 16:36:51 +01:00
|
|
|
.reply(200, { domain_records: [ DOMAIN_RECORD_0, DOMAIN_RECORD_1 ] });
|
|
|
|
|
var req2 = nock(DIGITALOCEAN_ENDPOINT).filteringRequestBody(function () { return false; })
|
2017-06-08 19:22:58 -07:00
|
|
|
.delete('/v2/domains/' + config.zoneName() + '/records/' + DOMAIN_RECORD_1.id)
|
2016-11-30 16:36:51 +01:00
|
|
|
.reply(204, {});
|
|
|
|
|
|
|
|
|
|
subdomains.remove('test', 'A', ['1.2.3.4'], function (error) {
|
|
|
|
|
expect(error).to.eql(null);
|
|
|
|
|
expect(req1.isDone()).to.be.ok();
|
|
|
|
|
expect(req2.isDone()).to.be.ok();
|
|
|
|
|
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
2016-11-30 18:04:47 +01:00
|
|
|
|
|
|
|
|
describe('route53', function () {
|
2017-06-08 19:22:58 -07:00
|
|
|
config.setFqdn('example.com');
|
|
|
|
|
config.setZoneName('example.com');
|
|
|
|
|
|
2016-11-30 18:04:47 +01:00
|
|
|
// do not clear this with [] but .length = 0 so we don't loose the reference in mockery
|
|
|
|
|
var awsAnswerQueue = [];
|
|
|
|
|
|
|
|
|
|
var AWS_HOSTED_ZONES = {
|
|
|
|
|
HostedZones: [{
|
|
|
|
|
Id: '/hostedzone/Z34G16B38TNZ9L',
|
2017-06-08 19:22:58 -07:00
|
|
|
Name: config.zoneName() + '.',
|
2016-11-30 18:04:47 +01:00
|
|
|
CallerReference: '305AFD59-9D73-4502-B020-F4E6F889CB30',
|
|
|
|
|
ResourceRecordSetCount: 2,
|
|
|
|
|
ChangeInfo: {
|
|
|
|
|
Id: '/change/CKRTFJA0ANHXB',
|
|
|
|
|
Status: 'INSYNC'
|
|
|
|
|
}
|
|
|
|
|
}, {
|
|
|
|
|
Id: '/hostedzone/Z3OFC3B6E8YTA7',
|
|
|
|
|
Name: 'cloudron.us.',
|
|
|
|
|
CallerReference: '0B37F2DE-21A4-E678-BA32-3FC8AF0CF635',
|
|
|
|
|
Config: {},
|
|
|
|
|
ResourceRecordSetCount: 2,
|
|
|
|
|
ChangeInfo: {
|
|
|
|
|
Id: '/change/C2682N5HXP0BZ5',
|
|
|
|
|
Status: 'INSYNC'
|
|
|
|
|
}
|
|
|
|
|
}],
|
|
|
|
|
IsTruncated: false,
|
|
|
|
|
MaxItems: '100'
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
before(function (done) {
|
|
|
|
|
var data = {
|
|
|
|
|
provider: 'route53',
|
|
|
|
|
accessKeyId: 'unused',
|
|
|
|
|
secretAccessKey: 'unused'
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
function mockery (queue) {
|
|
|
|
|
return function(options, callback) {
|
|
|
|
|
expect(options).to.be.an(Object);
|
|
|
|
|
|
|
|
|
|
var elem = queue.shift();
|
|
|
|
|
if (!util.isArray(elem)) throw(new Error('Mock answer required'));
|
|
|
|
|
|
|
|
|
|
// if no callback passed, return a req object with send();
|
|
|
|
|
if (typeof callback !== 'function') {
|
|
|
|
|
return {
|
|
|
|
|
httpRequest: { headers: {} },
|
|
|
|
|
send: function (callback) {
|
|
|
|
|
expect(callback).to.be.a(Function);
|
|
|
|
|
callback(elem[0], elem[1]);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
} else {
|
|
|
|
|
callback(elem[0], elem[1]);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function Route53Mock(cfg) {
|
|
|
|
|
expect(cfg).to.eql({
|
|
|
|
|
accessKeyId: data.accessKeyId,
|
|
|
|
|
secretAccessKey: data.secretAccessKey,
|
|
|
|
|
region: 'us-east-1'
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
Route53Mock.prototype.getHostedZone = mockery(awsAnswerQueue);
|
|
|
|
|
Route53Mock.prototype.getChange = mockery(awsAnswerQueue);
|
|
|
|
|
Route53Mock.prototype.changeResourceRecordSets = mockery(awsAnswerQueue);
|
|
|
|
|
Route53Mock.prototype.listResourceRecordSets = mockery(awsAnswerQueue);
|
|
|
|
|
Route53Mock.prototype.listHostedZones = mockery(awsAnswerQueue);
|
|
|
|
|
|
|
|
|
|
// override route53 in AWS
|
|
|
|
|
// Comment this out and replace the config with real tokens to test against AWS proper
|
2017-02-07 01:27:56 -08:00
|
|
|
AWS._originalRoute53 = AWS.Route53;
|
2016-11-30 18:04:47 +01:00
|
|
|
AWS.Route53 = Route53Mock;
|
|
|
|
|
|
2017-06-15 20:05:31 -07:00
|
|
|
settings.setDnsConfig(data, config.fqdn(), config.zoneName(), done);
|
2016-11-30 18:04:47 +01:00
|
|
|
});
|
|
|
|
|
|
2017-02-07 01:27:56 -08:00
|
|
|
after(function () {
|
|
|
|
|
AWS.Route53 = AWS._originalRoute53;
|
|
|
|
|
delete AWS._originalRoute53;
|
|
|
|
|
});
|
|
|
|
|
|
2016-11-30 18:04:47 +01:00
|
|
|
it('upsert non-existing record succeeds', function (done) {
|
|
|
|
|
awsAnswerQueue.push([null, AWS_HOSTED_ZONES]);
|
|
|
|
|
awsAnswerQueue.push([null, {
|
|
|
|
|
ChangeInfo: {
|
|
|
|
|
Id: '/change/C2QLKQIWEI0BZF',
|
|
|
|
|
Status: 'PENDING',
|
|
|
|
|
SubmittedAt: 'Mon Aug 04 2014 17: 44: 49 GMT - 0700(PDT)'
|
|
|
|
|
}
|
|
|
|
|
}]);
|
|
|
|
|
|
|
|
|
|
subdomains.upsert('test', 'A', [ '1.2.3.4' ], function (error, result) {
|
|
|
|
|
expect(error).to.eql(null);
|
|
|
|
|
expect(result).to.eql('/change/C2QLKQIWEI0BZF');
|
|
|
|
|
expect(awsAnswerQueue.length).to.eql(0);
|
|
|
|
|
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('upsert existing record succeeds', function (done) {
|
|
|
|
|
awsAnswerQueue.push([null, AWS_HOSTED_ZONES]);
|
|
|
|
|
awsAnswerQueue.push([null, {
|
|
|
|
|
ChangeInfo: {
|
|
|
|
|
Id: '/change/C2QLKQIWEI0BZF',
|
|
|
|
|
Status: 'PENDING',
|
|
|
|
|
SubmittedAt: 'Mon Aug 04 2014 17: 44: 49 GMT - 0700(PDT)'
|
|
|
|
|
}
|
|
|
|
|
}]);
|
|
|
|
|
|
|
|
|
|
subdomains.upsert('test', 'A', [ '1.2.3.4' ], function (error, result) {
|
|
|
|
|
expect(error).to.eql(null);
|
|
|
|
|
expect(result).to.eql('/change/C2QLKQIWEI0BZF');
|
|
|
|
|
expect(awsAnswerQueue.length).to.eql(0);
|
|
|
|
|
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('upsert multiple record succeeds', function (done) {
|
|
|
|
|
awsAnswerQueue.push([null, AWS_HOSTED_ZONES]);
|
|
|
|
|
awsAnswerQueue.push([null, {
|
|
|
|
|
ChangeInfo: {
|
|
|
|
|
Id: '/change/C2QLKQIWEI0BZF',
|
|
|
|
|
Status: 'PENDING',
|
|
|
|
|
SubmittedAt: 'Mon Aug 04 2014 17: 44: 49 GMT - 0700(PDT)'
|
|
|
|
|
}
|
|
|
|
|
}]);
|
|
|
|
|
|
|
|
|
|
subdomains.upsert('', 'TXT', [ 'first', 'second', 'third' ], function (error, result) {
|
|
|
|
|
expect(error).to.eql(null);
|
|
|
|
|
expect(result).to.eql('/change/C2QLKQIWEI0BZF');
|
|
|
|
|
expect(awsAnswerQueue.length).to.eql(0);
|
|
|
|
|
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('get succeeds', function (done) {
|
|
|
|
|
awsAnswerQueue.push([null, AWS_HOSTED_ZONES]);
|
|
|
|
|
awsAnswerQueue.push([null, {
|
|
|
|
|
ResourceRecordSets: [{
|
2017-06-08 19:22:58 -07:00
|
|
|
Name: 'test.' + config.zoneName() + '.',
|
2016-11-30 18:04:47 +01:00
|
|
|
Type: 'A',
|
|
|
|
|
ResourceRecords: [{
|
|
|
|
|
Value: '1.2.3.4'
|
|
|
|
|
}]
|
|
|
|
|
}]
|
|
|
|
|
}]);
|
|
|
|
|
|
|
|
|
|
subdomains.get('test', 'A', function (error, result) {
|
|
|
|
|
expect(error).to.eql(null);
|
|
|
|
|
expect(result).to.be.an(Array);
|
|
|
|
|
expect(result.length).to.eql(1);
|
|
|
|
|
expect(result[0]).to.eql('1.2.3.4');
|
|
|
|
|
expect(awsAnswerQueue.length).to.eql(0);
|
|
|
|
|
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('del succeeds', function (done) {
|
|
|
|
|
awsAnswerQueue.push([null, AWS_HOSTED_ZONES]);
|
|
|
|
|
awsAnswerQueue.push([null, {
|
|
|
|
|
ChangeInfo: {
|
|
|
|
|
Id: '/change/C2QLKQIWEI0BZF',
|
|
|
|
|
Status: 'PENDING',
|
|
|
|
|
SubmittedAt: 'Mon Aug 04 2014 17: 44: 49 GMT - 0700(PDT)'
|
|
|
|
|
}
|
|
|
|
|
}]);
|
|
|
|
|
|
|
|
|
|
subdomains.remove('test', 'A', ['1.2.3.4'], function (error) {
|
|
|
|
|
expect(error).to.eql(null);
|
|
|
|
|
expect(awsAnswerQueue.length).to.eql(0);
|
|
|
|
|
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
2016-11-30 15:35:58 +01:00
|
|
|
});
|