NapCatQQ source snapshot
This commit is contained in:
commit
f954252a34
1111 files changed
+139867
No files matched your search
@@ -0,0 +1,87 @@
|
||||
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);
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user