mirror of
https://github.com/minescope/mineping.git
synced 2025-07-14 20:34:40 +03:00
feat: skip SRV lookup for IP addresses and localhost
Performing DNS SRV lookups for hosts that are already direct IP addresses or special-case hostnames like 'localhost' is unnecessary. In addition, several related test suite improvements have been included: - A bug in the Bedrock mock packet creation was fixed where the magic GUID was being written to an incorrect buffer offset. - The DNS mocking strategy in the Java tests has been refactored for better accuracy by mocking the `dns.promises.Resolver` class. - An error test for the Bedrock pinger was corrected to properly handle a promise rejection instead of a synchronous throw.
This commit is contained in:
@ -125,8 +125,10 @@ describe("bedrock.js", () => {
|
||||
});
|
||||
|
||||
describe("errors", () => {
|
||||
it("should throw an error if host is not provided", () => {
|
||||
expect(() => pingBedrock(null)).toThrow("Host argument is required");
|
||||
it("should throw an error if host is not provided", async () => {
|
||||
await expect(pingBedrock(null)).rejects.toThrow(
|
||||
"Host argument is required"
|
||||
);
|
||||
});
|
||||
|
||||
it("should reject on socket timeout", async () => {
|
||||
@ -167,7 +169,7 @@ function createMockPongPacket(motd) {
|
||||
const packet = Buffer.alloc(35 + motdBuffer.length);
|
||||
packet.writeUInt8(0x1c, 0);
|
||||
packet.writeBigInt64LE(BigInt(Date.now()), 1);
|
||||
Buffer.from("00ffff00fefefefefdfdfdfd12345678", "hex").copy(packet, 17);
|
||||
Buffer.from("00ffff00fefefefefdfdfdfd12345678", "hex").copy(packet, 9);
|
||||
packet.writeUInt16BE(motdBuffer.length, 33);
|
||||
motdBuffer.copy(packet, 35);
|
||||
return packet;
|
||||
|
@ -1,18 +1,25 @@
|
||||
import net from "node:net";
|
||||
import dns from "node:dns/promises";
|
||||
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
||||
import { pingJava } from "../lib/java.js";
|
||||
import * as varint from "../lib/varint.js";
|
||||
|
||||
const mockResolveSrv = vi.fn();
|
||||
|
||||
vi.mock("node:net");
|
||||
vi.mock("node:dns/promises");
|
||||
vi.mock("node:dns/promises", () => ({
|
||||
Resolver: vi.fn().mockImplementation(() => ({
|
||||
resolveSrv: mockResolveSrv,
|
||||
})),
|
||||
}));
|
||||
|
||||
describe("pingJava", () => {
|
||||
let mockSocket;
|
||||
|
||||
beforeEach(() => {
|
||||
// Simulate no SRV record found.
|
||||
dns.resolveSrv.mockResolvedValue([]);
|
||||
// Reset mocks before each test.
|
||||
mockResolveSrv.mockClear();
|
||||
// Simulate no SRV record found by default.
|
||||
mockResolveSrv.mockResolvedValue([]);
|
||||
|
||||
const mockHandlers = {};
|
||||
mockSocket = {
|
||||
@ -44,7 +51,11 @@ describe("pingJava", () => {
|
||||
// Allow the async SRV lookup to complete
|
||||
await vi.runAllTicks();
|
||||
|
||||
expect(dns.resolveSrv).toHaveBeenCalledWith(`_minecraft._tcp.${host}`);
|
||||
expect(net.createConnection).toHaveBeenCalledWith({
|
||||
host: host,
|
||||
port: options.port,
|
||||
});
|
||||
|
||||
expect(net.createConnection).toHaveBeenCalledWith({
|
||||
host,
|
||||
port: options.port,
|
||||
|
Reference in New Issue
Block a user