UNPKG

chrome-devtools-frontend

Version:
77 lines (63 loc) 3.07 kB
// Copyright 2024 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import * as Lantern from '../lantern.js'; const {DNSCache} = Lantern.Simulation; const MULTIPLIER = DNSCache.rttMultiplier; describe('DNSCache', () => { let dns: Lantern.Simulation.DNSCache; let request: Lantern.Types.NetworkRequest; beforeEach(() => { dns = new DNSCache({rtt: 100}); request = { parsedURL: { host: 'example.com', scheme: 'https', securityOrigin: '', }, } as Lantern.Types.NetworkRequest; }); describe('.getTimeUntilResolution', () => { it('should return the RTT multiplied', () => { const resolutionTime = dns.getTimeUntilResolution(request); expect(resolutionTime).to.equal(100 * MULTIPLIER); }); it('should return time with requestedAt', () => { const resolutionTime = dns.getTimeUntilResolution(request, {requestedAt: 1500}); expect(resolutionTime).to.equal(100 * MULTIPLIER); }); it('should not cache by default', () => { dns.getTimeUntilResolution(request, {requestedAt: 0}); const resolutionTime = dns.getTimeUntilResolution(request, {requestedAt: 1000}); expect(resolutionTime).to.equal(100 * MULTIPLIER); }); it('should cache when told', () => { dns.getTimeUntilResolution(request, {requestedAt: 0, shouldUpdateCache: true}); const resolutionTime = dns.getTimeUntilResolution(request, {requestedAt: 1000}); expect(resolutionTime).to.equal(0); }); it('should cache by domain', () => { dns.getTimeUntilResolution(request, {requestedAt: 0, shouldUpdateCache: true}); const otherRequest = {parsedURL: {host: 'other-example.com'}} as Lantern.Types.NetworkRequest; const resolutionTime = dns.getTimeUntilResolution(otherRequest, {requestedAt: 1000}); expect(resolutionTime).to.equal(100 * MULTIPLIER); }); it('should not update cache with later times', () => { dns.getTimeUntilResolution(request, {requestedAt: 1000, shouldUpdateCache: true}); dns.getTimeUntilResolution(request, {requestedAt: 1500, shouldUpdateCache: true}); dns.getTimeUntilResolution(request, {requestedAt: 500, shouldUpdateCache: true}); dns.getTimeUntilResolution(request, {requestedAt: 5000, shouldUpdateCache: true}); expect(dns.getTimeUntilResolution(request, {requestedAt: 0})).to.equal(100 * MULTIPLIER); expect(dns.getTimeUntilResolution(request, {requestedAt: 550})).to.equal(100 * MULTIPLIER - 50); expect(dns.getTimeUntilResolution(request, {requestedAt: 1000})).to.equal(0); expect(dns.getTimeUntilResolution(request, {requestedAt: 2000})).to.equal(0); }); }); describe('.setResolvedAt', () => { it('should set the DNS resolution time for a request', () => { dns.setResolvedAt(request.parsedURL.host, 123); const resolutionTime = dns.getTimeUntilResolution(request); expect(resolutionTime).to.equal(123); }); }); });