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',
 | 
						|
      },
 | 
						|
    ]);
 | 
						|
  });
 | 
						|
});
 |