Skip to content

Commit 9ab5bf0

Browse files
committed
add network utils tests
1 parent 215973b commit 9ab5bf0

1 file changed

Lines changed: 58 additions & 1 deletion

File tree

test/utils/network.utils.test.ts

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import { beforeEach, describe, expect, it, vi } from 'vitest';
2-
import { randomBytes, X509Certificate } from 'node:crypto';
2+
import { randomBytes, randomInt, X509Certificate } from 'node:crypto';
33
import selfsigned, { GenerateResult } from 'selfsigned';
44
import { readFile, stat, writeFile } from 'node:fs/promises';
55
import { NetworkUtils } from '../../src/utils/network.utils';
66
import { Stats } from 'node:fs';
7+
import { fail } from 'node:assert';
78

89
vi.mock('node:fs/promises', async () => {
910
const actual = await vi.importActual<typeof import('node:fs/promises')>('node:fs/promises');
@@ -142,4 +143,60 @@ describe('Network utils', () => {
142143
expect(mockWriteFile).toHaveBeenCalledTimes(2);
143144
expect(mockReadFile).toHaveBeenCalledTimes(2);
144145
});
146+
147+
it('When parsing range, it should parse it if its all good', () => {
148+
const mockSize = randomInt(500, 10000);
149+
const rangeStart = randomInt(0, 450);
150+
const range = `bytes=${rangeStart}-${mockSize}`;
151+
152+
const result = NetworkUtils.parseRangeHeader({ range, totalFileSize: mockSize });
153+
154+
expect(result).to.deep.equal({
155+
range,
156+
rangeSize: mockSize - rangeStart,
157+
totalFileSize: mockSize,
158+
parsed: { start: rangeStart, end: mockSize - 1 },
159+
});
160+
});
161+
162+
it('When parsing range, it should return errors if found', () => {
163+
const totalFileSize = randomInt(500, 10000);
164+
165+
expect(NetworkUtils.parseRangeHeader({ range: undefined, totalFileSize })).to.be.equal(undefined);
166+
167+
try {
168+
NetworkUtils.parseRangeHeader({ range: 'range', totalFileSize });
169+
fail('Expected function to throw an error, but it did not.');
170+
} catch (error) {
171+
expect((error as Error).message).to.contain('Unsatisfiable Range-Request.');
172+
}
173+
174+
try {
175+
NetworkUtils.parseRangeHeader({ range: 'whatever-range', totalFileSize });
176+
fail('Expected function to throw an error, but it did not.');
177+
} catch (error) {
178+
expect((error as Error).message).to.contain('Unsatisfiable Range-Request.');
179+
}
180+
181+
try {
182+
NetworkUtils.parseRangeHeader({ range: 'bytes=', totalFileSize });
183+
fail('Expected function to throw an error, but it did not.');
184+
} catch (error) {
185+
expect((error as Error).message).to.contain('Malformed Range-Request.');
186+
}
187+
188+
try {
189+
NetworkUtils.parseRangeHeader({ range: 'megabytes=50-55', totalFileSize });
190+
fail('Expected function to throw an error, but it did not.');
191+
} catch (error) {
192+
expect((error as Error).message).to.contain('Unkwnown Range-Request type ');
193+
}
194+
195+
try {
196+
NetworkUtils.parseRangeHeader({ range: 'bytes=50-55,0-10,5-10,56-60', totalFileSize });
197+
fail('Expected function to throw an error, but it did not.');
198+
} catch (error) {
199+
expect((error as Error).message).to.contain('Multi Range-Requests functionality is not implemented.');
200+
}
201+
});
145202
});

0 commit comments

Comments
 (0)