159 lines
3.5 KiB
TypeScript
159 lines
3.5 KiB
TypeScript
// Copyright 2025 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
import { assert } from 'chai';
|
|
|
|
import { type WritableDB } from '../../sql/Interface';
|
|
import { SignalService as Proto } from '../../protobuf';
|
|
import { generateAci } from '../../types/ServiceId';
|
|
import { createDB, updateToVersion, insertData, getTableData } from './helpers';
|
|
|
|
describe('SQL/updateToSchemaVersion1280', () => {
|
|
let db: WritableDB;
|
|
|
|
const OUR_ACI = generateAci();
|
|
const THEIR_ACI = generateAci();
|
|
|
|
afterEach(() => {
|
|
db.close();
|
|
});
|
|
|
|
beforeEach(() => {
|
|
db = createDB();
|
|
updateToVersion(db, 1270);
|
|
|
|
insertData(db, 'items', [
|
|
{
|
|
id: 'uuid_id',
|
|
json: {
|
|
id: 'uuid_id',
|
|
value: `${OUR_ACI}.2`,
|
|
},
|
|
},
|
|
]);
|
|
});
|
|
|
|
it('drops v1 envelopes', () => {
|
|
insertData(db, 'unprocessed', [
|
|
{
|
|
id: 'old',
|
|
},
|
|
]);
|
|
updateToVersion(db, 1280);
|
|
|
|
assert.deepStrictEqual(getTableData(db, 'unprocessed'), []);
|
|
});
|
|
|
|
it('does not drop v2 envelopes', () => {
|
|
insertData(db, 'unprocessed', [
|
|
{
|
|
id: 'new',
|
|
version: 2,
|
|
|
|
receivedAtCounter: 1,
|
|
story: 1,
|
|
urgent: 1,
|
|
timestamp: 4,
|
|
attempts: 5,
|
|
envelope: Buffer.from(
|
|
Proto.Envelope.encode({
|
|
destinationServiceId: THEIR_ACI,
|
|
content: Buffer.from('encrypted1'),
|
|
reportingToken: Buffer.from('token'),
|
|
}).finish()
|
|
).toString('base64'),
|
|
serverTimestamp: 6,
|
|
serverGuid: 'guid1',
|
|
},
|
|
{
|
|
id: 'new-2',
|
|
version: 2,
|
|
|
|
receivedAtCounter: 2,
|
|
story: 1,
|
|
urgent: 1,
|
|
timestamp: 4,
|
|
attempts: 5,
|
|
envelope: Buffer.from(
|
|
Proto.Envelope.encode({
|
|
type: 3,
|
|
content: Buffer.from('encrypted2'),
|
|
}).finish()
|
|
).toString('base64'),
|
|
serverTimestamp: 7,
|
|
serverGuid: 'guid2',
|
|
},
|
|
{
|
|
id: 'new-3',
|
|
version: 2,
|
|
|
|
receivedAtCounter: 3,
|
|
story: 0,
|
|
urgent: 0,
|
|
timestamp: 5,
|
|
attempts: 6,
|
|
envelope: Buffer.from(
|
|
Proto.Envelope.encode({
|
|
content: Buffer.from('unused'),
|
|
}).finish()
|
|
).toString('base64'),
|
|
decrypted: 'CAFE',
|
|
serverTimestamp: 8,
|
|
serverGuid: 'guid3',
|
|
},
|
|
]);
|
|
updateToVersion(db, 1280);
|
|
|
|
assert.deepStrictEqual(getTableData(db, 'unprocessed'), [
|
|
{
|
|
id: 'new',
|
|
|
|
type: 0,
|
|
receivedAtCounter: 1,
|
|
story: 1,
|
|
urgent: 1,
|
|
messageAgeSec: 0,
|
|
timestamp: 4,
|
|
attempts: 5,
|
|
destinationServiceId: THEIR_ACI,
|
|
content: '656e6372797074656431',
|
|
isEncrypted: 1,
|
|
serverTimestamp: 6,
|
|
serverGuid: 'guid1',
|
|
reportingToken: '746f6b656e',
|
|
},
|
|
{
|
|
id: 'new-2',
|
|
|
|
receivedAtCounter: 2,
|
|
story: 1,
|
|
urgent: 1,
|
|
timestamp: 4,
|
|
messageAgeSec: 0,
|
|
attempts: 5,
|
|
destinationServiceId: OUR_ACI,
|
|
content: '656e6372797074656432',
|
|
isEncrypted: 1,
|
|
type: 3,
|
|
serverTimestamp: 7,
|
|
serverGuid: 'guid2',
|
|
},
|
|
{
|
|
id: 'new-3',
|
|
|
|
receivedAtCounter: 3,
|
|
urgent: 0,
|
|
story: 0,
|
|
timestamp: 5,
|
|
messageAgeSec: 0,
|
|
attempts: 6,
|
|
destinationServiceId: OUR_ACI,
|
|
content: '080144',
|
|
isEncrypted: 0,
|
|
type: 0,
|
|
serverTimestamp: 8,
|
|
serverGuid: 'guid3',
|
|
},
|
|
]);
|
|
});
|
|
});
|