Better handling of failed message migration attempts
This commit is contained in:
parent
512dcaad45
commit
a068456139
5 changed files with 84 additions and 74 deletions
|
@ -270,15 +270,19 @@ describe('Message', () => {
|
|||
upgrade: v3,
|
||||
});
|
||||
|
||||
const context = getDefaultContext({ logger });
|
||||
const upgradeSchema = async (message: MessageAttributesType) =>
|
||||
toVersion3(
|
||||
await toVersion2(await toVersion1(message, context), context),
|
||||
context
|
||||
);
|
||||
|
||||
const actual = await upgradeSchema(input);
|
||||
const actual = await Message.upgradeSchema(input, getDefaultContext(), {
|
||||
versions: [toVersion1, toVersion2, toVersion3],
|
||||
});
|
||||
assert.deepEqual(actual, expected);
|
||||
|
||||
// if we try to upgrade it again, it will fail since it could not upgrade any
|
||||
// versions
|
||||
const upgradeAgainPromise = Message.upgradeSchema(
|
||||
actual,
|
||||
getDefaultContext(),
|
||||
{ versions: [toVersion1, toVersion2, toVersion3] }
|
||||
);
|
||||
await assert.isRejected(upgradeAgainPromise);
|
||||
});
|
||||
|
||||
it('should skip out-of-order upgrade steps', async () => {
|
||||
|
@ -391,12 +395,12 @@ describe('Message', () => {
|
|||
assert.deepEqual(actual, expected);
|
||||
});
|
||||
|
||||
it('should return original message if upgrade function throws', async () => {
|
||||
it('should throw if upgrade function throws', async () => {
|
||||
const upgrade = async () => {
|
||||
throw new Error('boom!');
|
||||
};
|
||||
const upgradeWithVersion = Message._withSchemaVersion({
|
||||
schemaVersion: 3,
|
||||
schemaVersion: 1,
|
||||
upgrade,
|
||||
});
|
||||
|
||||
|
@ -404,15 +408,12 @@ describe('Message', () => {
|
|||
id: 'guid-guid-guid-guid',
|
||||
schemaVersion: 0,
|
||||
});
|
||||
const expected = getDefaultMessage({
|
||||
id: 'guid-guid-guid-guid',
|
||||
schemaVersion: 0,
|
||||
});
|
||||
const actual = await upgradeWithVersion(
|
||||
|
||||
const upgradePromise = upgradeWithVersion(
|
||||
input,
|
||||
getDefaultContext({ logger })
|
||||
);
|
||||
assert.deepEqual(actual, expected);
|
||||
await assert.isRejected(upgradePromise);
|
||||
});
|
||||
|
||||
it('should return original message if upgrade function returns null', async () => {
|
||||
|
@ -866,31 +867,5 @@ describe('Message', () => {
|
|||
|
||||
assert.deepEqual({ ...message, schemaVersion: 14 }, result);
|
||||
});
|
||||
it('if file does exist, but migration errors, does not increment version', async () => {
|
||||
const message = getDefaultMessage({
|
||||
schemaVersion: 13,
|
||||
schemaMigrationAttempts: 0,
|
||||
attachments: [
|
||||
{
|
||||
size: 128,
|
||||
contentType: MIME.IMAGE_BMP,
|
||||
path: 'no/file/here.png',
|
||||
iv: 'iv',
|
||||
digest: 'digest',
|
||||
key: 'key',
|
||||
},
|
||||
],
|
||||
contact: [],
|
||||
});
|
||||
const result = await Message.upgradeSchema(message, {
|
||||
...getDefaultContext(),
|
||||
doesAttachmentExist: async () => true,
|
||||
ensureAttachmentIsReencryptable: async () => {
|
||||
throw new Error("Can't reencrypt!");
|
||||
},
|
||||
});
|
||||
|
||||
assert.deepEqual(message, result);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue