mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-12-18 20:30:08 +08:00
Introduced a new eslint.config.js using neostandard and added related devDependencies. Updated codebase for consistent formatting, spacing, and function declarations. Minor refactoring and cleanup across multiple files to improve readability and maintain code style compliance.
88 lines
3.2 KiB
TypeScript
88 lines
3.2 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import crypto from 'crypto';
|
|
import { Sha1Stream } from 'napcat-core/packet/utils/crypto/sha1Stream';
|
|
|
|
describe('Sha1Stream', () => {
|
|
it('should compute correct SHA-1 hash for empty string', () => {
|
|
const sha1Stream = new Sha1Stream();
|
|
const hash = sha1Stream.final();
|
|
const expected = crypto.createHash('sha1').update('').digest();
|
|
expect(hash).toEqual(expected);
|
|
});
|
|
|
|
it('should compute correct SHA-1 hash for simple string', () => {
|
|
const testData = 'Hello, World!';
|
|
const sha1Stream = new Sha1Stream();
|
|
sha1Stream.update(Buffer.from(testData));
|
|
const hash = sha1Stream.final();
|
|
const expected = crypto.createHash('sha1').update(testData).digest();
|
|
expect(hash).toEqual(expected);
|
|
});
|
|
|
|
it('should compute correct SHA-1 hash for binary data', () => {
|
|
const testData = Buffer.from([0x00, 0x01, 0x02, 0x03, 0x04, 0x05]);
|
|
const sha1Stream = new Sha1Stream();
|
|
sha1Stream.update(testData);
|
|
const hash = sha1Stream.final();
|
|
const expected = crypto.createHash('sha1').update(testData).digest();
|
|
expect(hash).toEqual(expected);
|
|
});
|
|
|
|
it('should handle multiple update calls', () => {
|
|
const part1 = 'Hello';
|
|
const part2 = ', World!';
|
|
const sha1Stream = new Sha1Stream();
|
|
sha1Stream.update(Buffer.from(part1));
|
|
sha1Stream.update(Buffer.from(part2));
|
|
const hash = sha1Stream.final();
|
|
const expected = crypto.createHash('sha1').update(part1 + part2).digest();
|
|
expect(hash).toEqual(expected);
|
|
});
|
|
|
|
it('should handle large data correctly', () => {
|
|
const testData = crypto.randomBytes(1024 * 10); // 10KB random data
|
|
const sha1Stream = new Sha1Stream();
|
|
sha1Stream.update(testData);
|
|
const hash = sha1Stream.final();
|
|
const expected = crypto.createHash('sha1').update(testData).digest();
|
|
expect(hash).toEqual(expected);
|
|
});
|
|
|
|
it('should produce consistent results for same input', () => {
|
|
const testData = 'Consistent test data';
|
|
|
|
const sha1Stream1 = new Sha1Stream();
|
|
sha1Stream1.update(Buffer.from(testData));
|
|
const hash1 = sha1Stream1.final();
|
|
|
|
const sha1Stream2 = new Sha1Stream();
|
|
sha1Stream2.update(Buffer.from(testData));
|
|
const hash2 = sha1Stream2.final();
|
|
|
|
expect(hash1).toEqual(hash2);
|
|
});
|
|
|
|
it('should handle edge case with exact block size', () => {
|
|
// SHA-1 block size is 64 bytes
|
|
const testData = 'a'.repeat(64);
|
|
const sha1Stream = new Sha1Stream();
|
|
sha1Stream.update(Buffer.from(testData));
|
|
const hash = sha1Stream.final();
|
|
const expected = crypto.createHash('sha1').update(testData).digest();
|
|
expect(hash).toEqual(expected);
|
|
});
|
|
|
|
it('should handle random data correctly', () => {
|
|
// Run multiple random tests (reduced from 100000 to 100 for performance)
|
|
for (let i = 0; i < 100; i++) {
|
|
const randomLength = Math.floor(Math.random() * 1024);
|
|
const randomData = crypto.randomBytes(randomLength);
|
|
const sha1Stream = new Sha1Stream();
|
|
sha1Stream.update(randomData);
|
|
const hash = sha1Stream.final();
|
|
const expectedDigest = crypto.createHash('sha1').update(randomData).digest();
|
|
expect(hash).toEqual(expectedDigest);
|
|
}
|
|
});
|
|
});
|