Path: blob/main/SignalServiceKit/Attachments/PaddingBucketTest.swift
1 views
//
// Copyright 2024 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import Foundation
import Testing
@testable import SignalServiceKit
struct PaddingBucketTest {
@Test(arguments: [
(0, 541),
(540, 541),
(541, 541),
(542, 568),
(3_400, 3_456),
(20_000, 20_018),
(50_000, 50_585),
(100_000, 100_155),
(500_000, 501_096),
(1_000_000, 1_041_743),
(10_000_000, 10_319_484),
(100_000_000, 102_224_512),
(1_000_000_000, 1_012_633_066),
])
func testPaddedSize(testCase: (unpaddedSize: UInt64, paddedSize: UInt64)) {
#expect(PaddingBucket.forUnpaddedPlaintextSize(testCase.unpaddedSize)?.plaintextSize == testCase.paddedSize)
}
@Test(arguments: [
(0, 592),
(540, 592),
(541, 592),
(542, 624),
(3_400, 3_520),
(20_000, 20_080),
(50_000, 50_640),
(100_000, 100_208),
(500_000, 501_152),
(1_000_000, 1_041_792),
(10_000_000, 10_319_536),
(100_000_000, 102_224_576),
(1_000_000_000, 1_012_633_120),
])
func testEncryptedSize(testCase: (unpaddedSize: UInt64, encryptedSize: UInt64)) {
#expect(PaddingBucket.forUnpaddedPlaintextSize(testCase.unpaddedSize)?.encryptedSize == testCase.encryptedSize)
}
@Test(arguments: [
(591, 129),
(592, 129),
])
func testForEncryptedSize(testCase: (encryptedSizeLimit: UInt64, bucketNumber: Int)) {
#expect(PaddingBucket.forEncryptedSizeLimit(testCase.encryptedSizeLimit).bucketNumber == testCase.bucketNumber)
}
@Test(arguments: 130...483)
func testAllInterestingLimits(bucketNumber: Int) {
let encryptedSize = PaddingBucket(bucketNumber: bucketNumber)!.encryptedSize
#expect(PaddingBucket.forEncryptedSizeLimit(encryptedSize).bucketNumber == bucketNumber)
#expect(PaddingBucket.forEncryptedSizeLimit(encryptedSize - 1).bucketNumber == bucketNumber - 1)
}
@Test
func testOverflow() {
let largestBucket = PaddingBucket.forEncryptedSizeLimit(.max)
#expect(largestBucket.bucketNumber == 909)
}
}