@qiniu/miku-delivery-mp-ks
Version:
Kuaishou Mini Program SDK for Miku Delivery
102 lines (101 loc) • 4.95 kB
JavaScript
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
});
});
}