64 lines
1.8 KiB
TypeScript
64 lines
1.8 KiB
TypeScript
|
|
/**
|
||
|
|
* Unit test for the transport factory + S3 endpoint parser
|
||
|
|
* (`src/lib/services/backup-destinations/`).
|
||
|
|
*/
|
||
|
|
|
||
|
|
import { describe, expect, it } from 'vitest';
|
||
|
|
|
||
|
|
import {
|
||
|
|
buildTransport,
|
||
|
|
FilesystemTransport,
|
||
|
|
parseS3Endpoint,
|
||
|
|
S3Transport,
|
||
|
|
SftpTransport,
|
||
|
|
} from '@/lib/services/backup-destinations';
|
||
|
|
|
||
|
|
describe('buildTransport', () => {
|
||
|
|
it('builds the right transport per type', () => {
|
||
|
|
expect(buildTransport('filesystem', { directory: '/x' })).toBeInstanceOf(FilesystemTransport);
|
||
|
|
expect(buildTransport('sftp', { host: 'h', username: 'u', remoteDir: '/d' })).toBeInstanceOf(
|
||
|
|
SftpTransport,
|
||
|
|
);
|
||
|
|
expect(
|
||
|
|
buildTransport('s3', { endpoint: 'h', bucket: 'b', accessKey: 'a', secretKey: 's' }),
|
||
|
|
).toBeInstanceOf(S3Transport);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('throws on an unknown type', () => {
|
||
|
|
// @ts-expect-error testing the runtime guard
|
||
|
|
expect(() => buildTransport('ftp', {})).toThrow(/Unknown backup destination type/);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe('parseS3Endpoint', () => {
|
||
|
|
it('parses an https URL into host + ssl', () => {
|
||
|
|
expect(parseS3Endpoint('https://s3.eu-central.example.com', {})).toEqual({
|
||
|
|
endPoint: 's3.eu-central.example.com',
|
||
|
|
useSSL: true,
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
it('parses an http URL with a port', () => {
|
||
|
|
expect(parseS3Endpoint('http://localhost:9000', {})).toEqual({
|
||
|
|
endPoint: 'localhost',
|
||
|
|
port: 9000,
|
||
|
|
useSSL: false,
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
it('treats a bare host as ssl-by-default', () => {
|
||
|
|
expect(parseS3Endpoint('s3.amazonaws.com', {})).toEqual({
|
||
|
|
endPoint: 's3.amazonaws.com',
|
||
|
|
useSSL: true,
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
it('honours explicit useSSL=false on a bare host', () => {
|
||
|
|
expect(parseS3Endpoint('minio.internal', { useSSL: false, port: 9000 })).toEqual({
|
||
|
|
endPoint: 'minio.internal',
|
||
|
|
port: 9000,
|
||
|
|
useSSL: false,
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|