@phnq/message
Version:
Asynchronous, incremental messaging client and server
139 lines (138 loc) • 5.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const MessageTransport_1 = require("../MessageTransport");
const serialize_1 = require("../serialize");
const sign_1 = require("../sign");
const SALT = 'abcd1234';
describe('sign/verify', () => {
it('should successfully sign and verify a simple message', () => {
const message = {
t: MessageTransport_1.MessageType.Request,
c: 1,
s: 'source',
p: 'hello',
};
const signedMessage = (0, sign_1.signMessage)(message, SALT);
expect(signedMessage.z).toBeTruthy();
expect(() => {
(0, sign_1.verifyMessage)(signedMessage, SALT);
}).not.toThrowError();
});
it('should throw during verification of a modified signed message', () => {
const message = {
t: MessageTransport_1.MessageType.Request,
c: 1,
s: 'source',
p: 'hello',
};
const signedMessage = (0, sign_1.signMessage)(message, SALT);
expect(() => {
const doctoredMessage = Object.assign(Object.assign({}, signedMessage), { s: 'wrong source' });
(0, sign_1.verifyMessage)(doctoredMessage, SALT);
}).toThrowError();
});
it('should throw during verification of a message with no signature', () => {
const message = {
t: MessageTransport_1.MessageType.Request,
c: 1,
s: 'source',
p: 'hello',
};
const signedMessage = (0, sign_1.signMessage)(message, SALT);
expect(() => {
(0, sign_1.verifyMessage)(Object.assign(Object.assign({}, signedMessage), { z: undefined }), SALT);
}).toThrowError();
});
it('should successfully sign and verify a message with object payload', () => {
const message = {
t: MessageTransport_1.MessageType.Request,
c: 1,
s: 'source',
p: {
date: new Date(),
foo: 'bar',
nums: [1, 2, 3, 4, 5],
nope: undefined,
stuff: null,
},
};
const signedMessage = (0, sign_1.signMessage)(message, SALT);
expect(signedMessage.z).toBeTruthy();
expect(() => {
(0, sign_1.verifyMessage)(signedMessage, SALT);
}).not.toThrowError();
});
it('should successfully sign and verify a message with serialized/deserialized message', () => {
const message = {
t: MessageTransport_1.MessageType.Request,
c: 1,
s: 'source',
p: {
date: new Date(),
foo: 'bar',
nums: [1, 2, 3, 4, 5],
nope: undefined,
stuff: null,
},
};
const signedMessage = (0, sign_1.signMessage)(message, SALT);
expect(signedMessage.z).toBeTruthy();
expect(() => {
(0, sign_1.verifyMessage)((0, serialize_1.deserialize)((0, serialize_1.serialize)(signedMessage)), SALT);
}).not.toThrowError();
});
it('should successfully sign and verify a message with serialized/deserialized message, dates and date strings', () => {
const message = {
t: MessageTransport_1.MessageType.Request,
c: 1,
s: 'source',
p: {
date1: new Date(),
date2: '2025-03-22T11:53:26.424',
date3: '2025-03-22T11:53:26.424Z',
foo: 'bar',
nums: [1, 2, 3, 4, 5],
nope: undefined,
stuff: null,
},
};
const signedMessage = (0, sign_1.signMessage)(message, SALT);
expect(signedMessage.z).toBeTruthy();
expect(() => {
(0, sign_1.verifyMessage)((0, serialize_1.deserialize)((0, serialize_1.serialize)(signedMessage)), SALT);
}).not.toThrowError();
});
it('should successfully sign and verify a message with a large payload', () => {
const num = 20000;
const streams = {
time: [],
hr: [],
altitude: [],
power: [],
cadence: [],
temp: [],
};
for (let i = 0; i < num; i++) {
streams.time.push(i);
streams.hr.push(150);
streams.altitude.push(1000);
streams.power.push(200);
streams.cadence.push(90);
streams.temp.push(20);
}
const largeMessage = {
t: MessageTransport_1.MessageType.Request,
c: 1,
s: 'source',
p: {
streams,
},
};
const signedMessage = (0, sign_1.signMessage)(largeMessage, SALT);
expect(signedMessage.z).toBeTruthy();
expect(() => {
const serDeser = (0, serialize_1.deserialize)((0, serialize_1.serialize)(signedMessage));
(0, sign_1.verifyMessage)(serDeser, SALT);
}).not.toThrowError();
});
});