mirror of
https://github.com/signalapp/Signal-Desktop.git
synced 2026-04-18 07:36:00 +01:00
Reuse recent CDN locators
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
// Copyright 2026 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import { assert } from 'chai';
|
||||
import { v4 as generateUuid } from 'uuid';
|
||||
|
||||
import { DataReader, DataWriter } from '../../sql/Client.preload.js';
|
||||
import { generateAci } from '../../types/ServiceId.std.js';
|
||||
import type { MessageAttributesType } from '../../model-types.d.ts';
|
||||
import { postSaveUpdates } from '../../util/cleanup.preload.js';
|
||||
import { IMAGE_JPEG } from '../../types/MIME.std.js';
|
||||
import { testPlaintextHash } from '../../test-helpers/attachments.node.js';
|
||||
|
||||
const { getMostRecentAttachmentUploadData } = DataReader;
|
||||
const { removeAll, saveMessages } = DataWriter;
|
||||
|
||||
describe('sql/getMostRecentAttachmentUploadData', () => {
|
||||
const ourAci = generateAci();
|
||||
const now = Date.now();
|
||||
|
||||
beforeEach(async () => {
|
||||
await removeAll();
|
||||
});
|
||||
|
||||
function composeMessage(
|
||||
attachments: MessageAttributesType['attachments']
|
||||
): MessageAttributesType {
|
||||
return {
|
||||
id: generateUuid(),
|
||||
type: 'incoming',
|
||||
conversationId: generateUuid(),
|
||||
sent_at: now,
|
||||
received_at: now,
|
||||
timestamp: now,
|
||||
attachments,
|
||||
};
|
||||
}
|
||||
|
||||
it('returns undefined when no attachment matches the plaintextHash', async () => {
|
||||
const result = await getMostRecentAttachmentUploadData('nonexistent-hash');
|
||||
assert.isUndefined(result);
|
||||
});
|
||||
|
||||
it('returns CDN upload data for a matching attachment', async () => {
|
||||
const plaintextHash = testPlaintextHash();
|
||||
await saveMessages(
|
||||
[
|
||||
composeMessage([
|
||||
{
|
||||
size: 128,
|
||||
contentType: IMAGE_JPEG,
|
||||
plaintextHash,
|
||||
key: 'test-key',
|
||||
digest: 'test-digest',
|
||||
cdnKey: 'cdn-key-1',
|
||||
cdnNumber: 3,
|
||||
uploadTimestamp: now,
|
||||
incrementalMac: 'test-incremental-mac',
|
||||
chunkSize: 256,
|
||||
},
|
||||
]),
|
||||
],
|
||||
{ forceSave: true, ourAci, postSaveUpdates }
|
||||
);
|
||||
|
||||
const result = await getMostRecentAttachmentUploadData(plaintextHash);
|
||||
assert.deepStrictEqual(result, {
|
||||
key: 'test-key',
|
||||
digest: 'test-digest',
|
||||
cdnKey: 'cdn-key-1',
|
||||
cdnNumber: 3,
|
||||
uploadTimestamp: now,
|
||||
incrementalMac: 'test-incremental-mac',
|
||||
chunkSize: 256,
|
||||
});
|
||||
});
|
||||
|
||||
it('returns undefined when a matching attachment lacks CDN fields', async () => {
|
||||
const plaintextHash = testPlaintextHash();
|
||||
await saveMessages(
|
||||
[
|
||||
composeMessage([
|
||||
{
|
||||
size: 128,
|
||||
contentType: IMAGE_JPEG,
|
||||
plaintextHash,
|
||||
key: 'test-key',
|
||||
digest: 'test-digest',
|
||||
// No cdnKey, cdnNumber, or uploadTimestamp
|
||||
},
|
||||
]),
|
||||
],
|
||||
{ forceSave: true, ourAci, postSaveUpdates }
|
||||
);
|
||||
|
||||
const result = await getMostRecentAttachmentUploadData(plaintextHash);
|
||||
assert.isUndefined(result);
|
||||
});
|
||||
|
||||
it('returns the most recently uploaded entry when multiple attachments share a plaintextHash', async () => {
|
||||
const plaintextHash = testPlaintextHash();
|
||||
|
||||
await saveMessages(
|
||||
[
|
||||
composeMessage([
|
||||
{
|
||||
size: 128,
|
||||
contentType: IMAGE_JPEG,
|
||||
plaintextHash,
|
||||
key: 'older-key',
|
||||
digest: 'older-digest',
|
||||
cdnKey: 'older-cdn-key',
|
||||
cdnNumber: 3,
|
||||
uploadTimestamp: now - 1000,
|
||||
},
|
||||
]),
|
||||
composeMessage([
|
||||
{
|
||||
size: 128,
|
||||
contentType: IMAGE_JPEG,
|
||||
plaintextHash,
|
||||
key: 'newer-key',
|
||||
digest: 'newer-digest',
|
||||
cdnKey: 'newer-cdn-key',
|
||||
cdnNumber: 3,
|
||||
uploadTimestamp: now,
|
||||
},
|
||||
]),
|
||||
],
|
||||
{ forceSave: true, ourAci, postSaveUpdates }
|
||||
);
|
||||
|
||||
const result = await getMostRecentAttachmentUploadData(plaintextHash);
|
||||
assert.deepStrictEqual(result, {
|
||||
key: 'newer-key',
|
||||
digest: 'newer-digest',
|
||||
cdnKey: 'newer-cdn-key',
|
||||
cdnNumber: 3,
|
||||
uploadTimestamp: now,
|
||||
incrementalMac: null,
|
||||
chunkSize: null,
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user