mirror of
https://github.com/OneUptime/oneuptime.git
synced 2026-04-06 00:32:12 +02:00
refactor: tests
This commit is contained in:
@@ -9,9 +9,15 @@ describe('Ping', () => {
|
||||
let result: PingResponse = await Ping.fetch(
|
||||
new Hostname('oneuptime.com', 80)
|
||||
);
|
||||
expect(result.responseTimeInMS?.toNumber()).toBeGreaterThan(0);
|
||||
expect(result.responseTimeInMS?.toNumber()).toBeLessThanOrEqual(5000);
|
||||
expect(result.isAlive).toBe(true);
|
||||
result = await Ping.fetch(new Hostname('www.oneuptime.com', 80));
|
||||
result = await Ping.fetch(new Hostname('www.oneuptime.com', 80), {
|
||||
timeout: new PositiveNumber(5000),
|
||||
});
|
||||
expect(result.isAlive).toBe(true);
|
||||
expect(result.responseTimeInMS?.toNumber()).toBeGreaterThan(0);
|
||||
expect(result.responseTimeInMS?.toNumber()).toBeLessThanOrEqual(5000);
|
||||
result = await Ping.fetch(new Hostname('www.oneuptime.com', 65000), {
|
||||
timeout: new PositiveNumber(5000),
|
||||
});
|
||||
@@ -25,12 +31,16 @@ describe('Ping', () => {
|
||||
});
|
||||
test('Ping.fetch should return appropriate object if the valid IPV4 or IPV6 is given', async () => {
|
||||
let result: PingResponse;
|
||||
result = await Ping.fetch(new IPv4('172.217.170.206'));
|
||||
result = await Ping.fetch(new IPv4('172.217.170.206'), {
|
||||
timeout: new PositiveNumber(5000),
|
||||
}); // One of the google ip
|
||||
expect(result.isAlive).toBe(true);
|
||||
result = await Ping.fetch(new IPv4('192.0.2.200'));
|
||||
expect(result.responseTimeInMS?.toNumber()).toBeGreaterThan(0);
|
||||
expect(result.responseTimeInMS?.toNumber()).toBeLessThanOrEqual(5000);
|
||||
result = await Ping.fetch(new IPv4('192.0.2.200')); //
|
||||
expect(result.isAlive).toBe(false);
|
||||
expect(result.responseTimeInMS).toBeUndefined();
|
||||
result = await Ping.fetch(new IPv4('0.42.52.42'));
|
||||
result = await Ping.fetch(new IPv4('0.42.52.42')); // ip can't start 0
|
||||
expect(result.responseTimeInMS).toBeUndefined();
|
||||
expect(result.isAlive).toBe(false);
|
||||
});
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
import Hostname from 'Common/Types/API/Hostname';
|
||||
import IPv4 from 'Common/Types/IP/IPv4';
|
||||
import IPv6 from 'Common/Types/IP/IPv6';
|
||||
import Port from 'Common/Types/Port';
|
||||
import PositiveNumber from 'Common/Types/PositiveNumber';
|
||||
import net, { Socket } from 'net';
|
||||
export interface PingResponse {
|
||||
isAlive: boolean;
|
||||
responseTimeInMS?: PositiveNumber;
|
||||
remoteAddressIP: IPv4 | IPv6;
|
||||
remoteAddressPort: Port;
|
||||
}
|
||||
export interface PingOptions {
|
||||
port?: PositiveNumber;
|
||||
@@ -14,53 +17,68 @@ export interface PingOptions {
|
||||
export default class Ping {
|
||||
public static async fetch(
|
||||
_host: Hostname | IPv4 | IPv6,
|
||||
options?: PingOptions
|
||||
pingOptions?: PingOptions
|
||||
): Promise<PingResponse> {
|
||||
return new Promise((resolve: Function, _reject: Function) => {
|
||||
const timeout: number = options?.timeout?.toNumber() || 4000;
|
||||
const startTime: [number, number] = process.hrtime();
|
||||
let socket: Socket;
|
||||
if (_host instanceof Hostname) {
|
||||
socket = net.connect({
|
||||
host: _host.hostname,
|
||||
port: _host.port.toNumber(),
|
||||
timeout,
|
||||
return new Promise<PingResponse>(
|
||||
(resolve: Function, _reject: Function) => {
|
||||
const timeout: number =
|
||||
pingOptions?.timeout?.toNumber() || 4000;
|
||||
const startTime: [number, number] = process.hrtime();
|
||||
let responseTimeInMS: PositiveNumber;
|
||||
let connectionOptions: net.NetConnectOpts;
|
||||
if (_host instanceof Hostname) {
|
||||
connectionOptions = {
|
||||
host: _host.hostname,
|
||||
port: _host.port.toNumber(),
|
||||
timeout,
|
||||
};
|
||||
} else {
|
||||
connectionOptions = {
|
||||
host: _host.toString(),
|
||||
port: pingOptions?.port?.toNumber() || 80,
|
||||
timeout,
|
||||
};
|
||||
}
|
||||
const socket: Socket = net.connect(connectionOptions);
|
||||
socket.on('connect', () => {
|
||||
const endTime: [number, number] = process.hrtime(startTime);
|
||||
responseTimeInMS = new PositiveNumber(
|
||||
(endTime[0] * 1000000000 + endTime[1]) / 1000000
|
||||
);
|
||||
});
|
||||
} else {
|
||||
socket = net.connect({
|
||||
host: _host.toString(),
|
||||
port: options?.port?.toNumber() || 80,
|
||||
timeout,
|
||||
socket.on('timeout', () => {
|
||||
resolve({
|
||||
isAlive: false,
|
||||
});
|
||||
});
|
||||
socket.on('connect', (data: any) => {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(data?.toString());
|
||||
const remoteAddressIP: undefined | IPv4 | IPv6 | '' =
|
||||
socket.remoteAddress &&
|
||||
(net.isIPv4(socket.remoteAddress)
|
||||
? new IPv4(socket.remoteAddress)
|
||||
: new IPv6(socket.remoteAddress));
|
||||
|
||||
socket.end(() => {
|
||||
resolve({
|
||||
isAlive: true,
|
||||
responseTimeInMS,
|
||||
remoteAddressIP,
|
||||
remoteAddressPort:
|
||||
socket.remotePort &&
|
||||
new Port(socket.remotePort),
|
||||
bytesReceived: new PositiveNumber(socket.bytesRead),
|
||||
bytesSent: new PositiveNumber(socket.bytesRead),
|
||||
});
|
||||
});
|
||||
});
|
||||
socket.on('error', () => {
|
||||
resolve({
|
||||
isAlive: false,
|
||||
});
|
||||
});
|
||||
}
|
||||
socket.on('connect', () => {
|
||||
const endTime: [number, number] = process.hrtime(startTime);
|
||||
resolve({
|
||||
isAlive: true,
|
||||
responseTimeInMS: new PositiveNumber(
|
||||
(endTime[0] * 1000000000 + endTime[1]) / 1000000
|
||||
),
|
||||
});
|
||||
});
|
||||
socket.on('timeout', () => {
|
||||
resolve({
|
||||
isAlive: false,
|
||||
});
|
||||
});
|
||||
socket.on('data', () => {
|
||||
const endTime: [number, number] = process.hrtime(startTime);
|
||||
resolve({
|
||||
isAlive: true,
|
||||
responseTimeInMS: new PositiveNumber(
|
||||
(endTime[0] * 1000000000 + endTime[1]) / 1000000
|
||||
),
|
||||
});
|
||||
});
|
||||
socket.on('error', () => {
|
||||
resolve({
|
||||
isAlive: false,
|
||||
});
|
||||
});
|
||||
});
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user