Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add API alwaysPermitJoin #13

Merged
merged 1 commit into from
Feb 17, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,14 @@ logs
*.log
npm-debug.log*

# Development
.idea/

# Test data
test/database_test/

# Runtime data
lib/database/
pids
*.pid
*.seed
Expand All @@ -30,4 +37,4 @@ node_modules
.npm

# Optional REPL history
.node_repl_history
.node_repl_history
16 changes: 16 additions & 0 deletions lib/coap-shepherd.js
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,22 @@ CoapShepherd.prototype.permitJoin = function (time) {
return true;
};

CoapShepherd.prototype.alwaysPermitJoin = function (permit) {
proving.boolean(permit, 'permit should be a boolean.');

if (!this._enabled)
return false;

this._joinable = permit;

if (this._permitJoinTimer) {
clearInterval(this._permitJoinTimer);
this._permitJoinTimer = null;
}

return true;
};

CoapShepherd.prototype.list = function () {
var devList = [];

Expand Down
78 changes: 77 additions & 1 deletion test/coap-shepherd.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,23 @@ describe('coap-shepherd', function () {
});
});

describe('#.alwaysPermitJoin()', function () {
it('should throw TypeError if permit is not a boolean', function () {
expect(function () { return shepherd.alwaysPermitJoin(); }).to.throw(TypeError);
expect(function () { return shepherd.alwaysPermitJoin(undefined); }).to.throw(TypeError);
expect(function () { return shepherd.alwaysPermitJoin(null); }).to.throw(TypeError);
expect(function () { return shepherd.alwaysPermitJoin('xx'); }).to.throw(TypeError);
expect(function () { return shepherd.alwaysPermitJoin(NaN); }).to.throw(TypeError);
expect(function () { return shepherd.alwaysPermitJoin(10); }).to.throw(TypeError);
expect(function () { return shepherd.alwaysPermitJoin([]); }).to.throw(TypeError);
expect(function () { return shepherd.alwaysPermitJoin({}); }).to.throw(TypeError);
expect(function () { return shepherd.alwaysPermitJoin(new Date()); }).to.throw(TypeError);
expect(function () { return shepherd.alwaysPermitJoin(function () {}); }).to.throw(TypeError);

expect(function () { return shepherd.alwaysPermitJoin(true); }).not.to.throw(TypeError);
});
});

describe('#.request()', function () {
it('should throw TypeError if reqObj is not an object', function () {
expect(function () { return shepherd.request(); }).to.throw(TypeError);
Expand Down Expand Up @@ -213,9 +230,68 @@ describe('coap-shepherd', function () {
});

describe('#.permitJoin()', function () {
it('should open permitJoin', function () {
it('should open permitJoin when time > 0', function () {
shepherd.permitJoin(180);
expect(shepherd._joinable).to.be.eql(true);
});

it('should close permitJoin when time == 0', function () {
shepherd.permitJoin(0);
expect(shepherd._joinable).to.be.eql(false);
});

it('should open permitJoin when time > 0 after alwaysPermitJoin(false)', function () {
shepherd.alwaysPermitJoin(false);
shepherd.permitJoin(180);
expect(shepherd._joinable).to.be.eql(true);
});

it('should close permitJoin when time == 0 after alwaysPermitJoin(true)', function () {
shepherd.alwaysPermitJoin(true);
shepherd.permitJoin(0);
expect(shepherd._joinable).to.be.eql(false);
});
});

describe('#.alwaysPermitJoin()', function () {
it('should open permitJoin when permit is true', function () {
var result = shepherd.alwaysPermitJoin(true);
expect(result).to.be.eql(true);
expect(shepherd._joinable).to.be.eql(true);
});

it('should close permitJoin when permit is false', function () {
shepherd.alwaysPermitJoin(false);
expect(shepherd._joinable).to.be.eql(false);
});

it('should clear _permitJoinTimer when permit is true', function () {
shepherd.permitJoin(180);
var result = shepherd.alwaysPermitJoin(true);
expect(result).to.be.eql(true);
expect(shepherd._joinable).to.be.eql(true);
expect(shepherd._permitJoinTimer).to.be.eql(null);
});

it('should clear _permitJoinTimer when permit is false', function () {
shepherd.permitJoin(180);
var result = shepherd.alwaysPermitJoin(false);
expect(result).to.be.eql(true);
expect(shepherd._joinable).to.be.eql(false);
expect(shepherd._permitJoinTimer).to.be.eql(null);
});

it('should not open permitJoin when server is not enabled', function () {
shepherd._joinable = false;
shepherd._enabled = false;
var result = shepherd.alwaysPermitJoin(true);
expect(result).to.be.eql(false);
expect(shepherd._joinable).to.be.eql(false);
});

after(function () {
shepherd._enabled = true;
shepherd.alwaysPermitJoin(true);
});
});

Expand Down