mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-12-19 05:05:44 +08:00
Introduces the napcat-test package with initial SHA-1 stream tests, configuration files, and scripts for running tests. Updates root package.json to include test commands and Vitest dependencies, and adds Vitest configuration at the root and package level for test environment setup.
87 lines
3.2 KiB
TypeScript
87 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);
|
|
}
|
|
});
|
|
}); |