Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add 'expireEarly' option. Document 'maxClockSkew' option (#220)
* Document 'maxClockSkew' option improve test * make clock / offset internal * expireEarly option * util.extend, update docs, test * util.extend again * expireEarlySeconds * util.extend should behave as Object.assign * fix extend test
- Loading branch information
1 parent
61bd9b8
commit d8d2fee
Showing
9 changed files
with
230 additions
and
104 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,23 @@ | ||
function getLocalAdjustedTime(sdk) { | ||
var localClockOffset = parseInt(sdk.options.localClockOffset || 0); | ||
var now = (Date.now() + localClockOffset) / 1000; | ||
return now; | ||
var util = require('./util'); | ||
|
||
function SdkClock(localOffset) { | ||
// Calculated local clock offset from server time (in milliseconds). Can be positive or negative. | ||
this.localOffset = parseInt(localOffset || 0); | ||
} | ||
|
||
module.exports = { | ||
getLocalAdjustedTime: getLocalAdjustedTime | ||
util.extend(SdkClock.prototype, { | ||
// Return the current time (in seconds) | ||
now: function() { | ||
var now = (Date.now() + this.localOffset) / 1000; | ||
return now; | ||
} | ||
}); | ||
|
||
// factory method. Create an instance of a clock from current context. | ||
SdkClock.create = function(/* sdk, options */) { | ||
// TODO: calculate localOffset | ||
var localOffset = 0; | ||
return new SdkClock(localOffset); | ||
}; | ||
|
||
module.exports = SdkClock; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,77 +1,62 @@ | ||
var clock = require('../../lib/clock'); | ||
var SdkClock = require('../../lib/clock'); | ||
|
||
describe('clock', function() { | ||
|
||
describe('getLocalAdjustedTime', function() { | ||
it('returns the local time / 1000', function() { | ||
var fakeDate = 4200; | ||
jest.spyOn(Date, 'now').mockReturnValue(fakeDate); | ||
var sdk = { | ||
options: { | ||
localClockOffset: 0 | ||
} | ||
}; | ||
expect(clock.getLocalAdjustedTime(sdk)).toBe(fakeDate / 1000); | ||
}); | ||
|
||
it('can have a positive offset', function() { | ||
var fakeDate = 4200; | ||
jest.spyOn(Date, 'now').mockReturnValue(fakeDate); | ||
var offset = 2300; | ||
var sdk = { | ||
options: { | ||
localClockOffset: offset | ||
} | ||
}; | ||
expect(clock.getLocalAdjustedTime(sdk)).toBe((fakeDate + offset) / 1000); | ||
}); | ||
|
||
it('can have a negative offset', function() { | ||
var fakeDate = 4200; | ||
jest.spyOn(Date, 'now').mockReturnValue(fakeDate); | ||
var offset = -2300; | ||
var sdk = { | ||
options: { | ||
localClockOffset: offset | ||
} | ||
}; | ||
expect(clock.getLocalAdjustedTime(sdk)).toBe((fakeDate + offset) / 1000); | ||
}); | ||
|
||
it('returns a valid number even if offset is a string', function() { | ||
var fakeDate = 4200; | ||
jest.spyOn(Date, 'now').mockReturnValue(fakeDate); | ||
var sdk = { | ||
options: { | ||
localClockOffset: "0" | ||
} | ||
}; | ||
expect(clock.getLocalAdjustedTime(sdk)).toBe(fakeDate / 1000); | ||
describe('create', function() { | ||
it('returns an instance of SdkClock', function() { | ||
expect(SdkClock.create() instanceof SdkClock).toBe(true); | ||
}); | ||
}); | ||
|
||
describe('SdkClock', function() { | ||
describe('now', function() { | ||
it('returns the local time / 1000', function() { | ||
var fakeDate = 4200; | ||
jest.spyOn(Date, 'now').mockReturnValue(fakeDate); | ||
var offset = 0; | ||
var clock = new SdkClock(offset); | ||
expect(clock.now()).toBe(fakeDate / 1000); | ||
}); | ||
|
||
it('can have a positive offset', function() { | ||
var fakeDate = 4200; | ||
jest.spyOn(Date, 'now').mockReturnValue(fakeDate); | ||
var offset = 2300; | ||
var clock = new SdkClock(offset); | ||
expect(clock.now()).toBe((fakeDate + offset) / 1000); | ||
}); | ||
|
||
it('can have a negative offset', function() { | ||
var fakeDate = 4200; | ||
jest.spyOn(Date, 'now').mockReturnValue(fakeDate); | ||
var offset = -2300; | ||
var clock = new SdkClock(offset); | ||
expect(clock.now()).toBe((fakeDate + offset) / 1000); | ||
}); | ||
|
||
it('returns a valid number even if offset is a string', function() { | ||
var fakeDate = 4200; | ||
jest.spyOn(Date, 'now').mockReturnValue(fakeDate); | ||
var offset = "0"; | ||
var clock = new SdkClock(offset); | ||
expect(clock.now()).toBe(fakeDate / 1000); | ||
}); | ||
|
||
it('returns a valid number even if offset is not set', function() { | ||
var fakeDate = 4200; | ||
jest.spyOn(Date, 'now').mockReturnValue(fakeDate); | ||
var offset = null; | ||
var clock = new SdkClock(offset); | ||
expect(clock.now()).toBe(fakeDate / 1000); | ||
}); | ||
|
||
it('will be NaN if offset is NaN', function() { | ||
var fakeDate = 4200; | ||
jest.spyOn(Date, 'now').mockReturnValue(fakeDate); | ||
var offset = "definitelyNotanumber"; | ||
var clock = new SdkClock(offset); | ||
expect(clock.now()).toBe(Number.NaN); | ||
}); | ||
|
||
|
||
it('returns a valid number even if offset is not set', function() { | ||
var fakeDate = 4200; | ||
jest.spyOn(Date, 'now').mockReturnValue(fakeDate); | ||
var sdk = { | ||
options: { | ||
|
||
} | ||
}; | ||
expect(clock.getLocalAdjustedTime(sdk)).toBe(fakeDate / 1000); | ||
}); | ||
|
||
|
||
it('will be NaN if offset is NaN', function() { | ||
var fakeDate = 4200; | ||
jest.spyOn(Date, 'now').mockReturnValue(fakeDate); | ||
var sdk = { | ||
options: { | ||
localClockOffset: "definitelyNotanumber" | ||
} | ||
}; | ||
expect(clock.getLocalAdjustedTime(sdk)).toBe(Number.NaN); | ||
}); | ||
|
||
}); | ||
}) |
Oops, something went wrong.