UNPKG

@qiniu/miku-delivery-mp-ks

Version:

Kuaishou Mini Program SDK for Miku Delivery

102 lines (101 loc) 4.95 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import { randomText } from '../test'; import { parseHost } from '../utils'; const mockFingerprint = 'bd:db:f3:e2:03:72:21:b4:3c:b7:c6:63:95:c7:f8:b2:ee:29:0b:4c:1b:d2:69:8c:dc:f2:c8:7b:45:0f:a2:ff'; export const jobFail = () => new Promise((_, reject) => setTimeout(() => reject(new Error('Job failure')), 100)); // TODO: 这里没有 100ms 就会出错(一个 case 中的异常即使被 catch 了也会让 jest 认为失败) export const jobSucc = () => Promise.resolve(); export function makeMockAddr({ ipBase = '127.0.0.', hostBase = '.mock-host.com', seq = 3 } = {}) { const basePort = 2000; return { ip: ipBase + seq, host: seq + hostBase, http: basePort + 80, https: basePort + 443, how: basePort + 8443 }; } export function makeMockAddrs({ ipBase = '127.0.0.', hostBase = '.mock-host.com', num = 3 } = {}) { return Array.from({ length: num }).map((_, i) => makeMockAddr({ ipBase, hostBase, seq: i })); } export function makeMockElt({ ipBase = '127.0.0.', hostBase = '.0.0.mock-host.com', addrNum = 3, replicas = 20 } = {}) { const id = randomText(20); const addrs = makeMockAddrs({ ipBase, hostBase, num: addrNum }); const ips = addrs.map(({ ip, http }) => `${ip}:${http - 80}`); const hosts = addrs.map(({ host, http }) => `${host}:${http - 80}`); return { id, addrs, ips, hosts, replicas, fingerprint: mockFingerprint }; } export function makeMockElts({ ipBase = '127.0.', hostBase = '.0.mock-host.com', addrNum = 3, num = 3, replicasBase = 20 } = {}) { return Array.from({ length: num }).map((_, i) => makeMockElt({ ipBase: ipBase + i + '.', hostBase: '.' + i + hostBase, addrNum, replicas: replicasBase + (i * 20) })); } export function makeMockGroup({ ipBase = '127.0.', hostBase = '.0.mock-host.com', addrNum = 3, eltNum = 3, eltReplicasBase = 20, weight = 50 } = {}) { const elts = makeMockElts({ ipBase, hostBase, addrNum, num: eltNum, replicasBase: eltReplicasBase }); return { elts, weight }; } export function makeMockGroups({ ipBase = '127.', hostBase = '.mock-host.com', addrNum = 3, eltNum = 3, eltReplicasBase = 20, baseWeight = 50, num = 3 } = {}) { return Array.from({ length: num }).map((_, i) => makeMockGroup({ ipBase: ipBase + i + '.', hostBase: '.' + i + hostBase, addrNum, eltNum, eltReplicasBase, weight: baseWeight + (i * 10) })); } const defaultCacheKeyConfig = { rewrites: [], queryString: { type: 'all' } }; export function makeMockResolveResult({ ipBase = '127.', hostBase = '.mock-host.com', addrNum = 3, eltNum = 3, eltReplicasBase = 20, baseWeight = 50, groupNum = 3, ttl = 1 } = {}) { const groups = makeMockGroups({ ipBase, hostBase, addrNum, eltNum, eltReplicasBase, baseWeight, num: groupNum }); return { bucket: '', groups, rules: [ { pattern: '.', servicerate: 1, groups: groups.map((g, i) => ({ groupidx: i, weight: g.weight, splitn: 1 })) } ], cacheKey: defaultCacheKeyConfig, mediaOptimization: { threshold: 0 }, ttl }; } export function makeMockDNSResolver(ips) { return () => __awaiter(this, void 0, void 0, function* () { return ({ bucket: '', groups: [ { elts: [ { id: randomText(10), ips, addrs: ips.map(ipPort => { const [ip, basePort] = parseHost(ipPort, 0); return { ip, host: '', http: basePort + 80, https: basePort + 443, how: basePort + 8443 }; }), replicas: 40, fingerprint: mockFingerprint } ], weight: 50 } ], rules: [ { pattern: '.', servicerate: 1, groups: [{ groupidx: 0, weight: 50, splitn: 1 }] } ], cacheKey: defaultCacheKeyConfig, mediaOptimization: { threshold: 0 }, ttl: 1 }); }); }