优化
This commit is contained in:
@@ -10,13 +10,11 @@ import {
|
||||
|
||||
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..')
|
||||
|
||||
const serviceModules = [
|
||||
'auth', 'iam', 'order', 'firstleg', 'finance', 'file', 'warehouse',
|
||||
'integration-service', 'print', 'event-bridge-service', 'lastleg-service',
|
||||
'warehouse-overseas-service'
|
||||
]
|
||||
// Discover all active Maven modules; unreviewed clients must fail equality checks.
|
||||
const serviceModules = [...(await readFile(path.join(root, 'pom.xml'), 'utf8'))
|
||||
.matchAll(/<module>([^<]+)<\/module>/g)].map(match => match[1])
|
||||
|
||||
const canonicalSource = new Map(serviceModules.map(name => [name, `${name}${name.endsWith('-service') ? '' : '-service'}`]))
|
||||
const canonicalSource = new Map(serviceModules.map(name => [name, `${name}${name.endsWith('-service') || name.startsWith('common-') || name === 'gateway' || name === 'platform-bom' ? '' : '-service'}`]))
|
||||
|
||||
const expectedOnlineEdges = [
|
||||
'auth-service->iam-service',
|
||||
@@ -47,25 +45,22 @@ const expectedOnlineEdges = [
|
||||
]
|
||||
|
||||
const expectedBackgroundEdges = [
|
||||
'event-bridge-service->finance-service',
|
||||
'event-bridge-service->firstleg-service',
|
||||
'event-bridge-service->lastleg-service',
|
||||
'file-service->finance-service',
|
||||
'file-service->firstleg-service',
|
||||
'file-service->iam-service',
|
||||
'file-service->order-service',
|
||||
'file-service->warehouse-service',
|
||||
'finance-service->event-bridge-service',
|
||||
'finance-service->lastleg-service',
|
||||
'finance-service->firstleg-service',
|
||||
'firstleg-service->event-bridge-service',
|
||||
'firstleg-service->lastleg-service',
|
||||
'firstleg-service->finance-service',
|
||||
'firstleg-service->integration-service',
|
||||
'firstleg-service->order-service',
|
||||
'iam-service->event-bridge-service',
|
||||
'iam-service->firstleg-service',
|
||||
'lastleg-service->event-bridge-service',
|
||||
'lastleg-service->finance-service',
|
||||
'lastleg-service->firstleg-service',
|
||||
'order-service->firstleg-service'
|
||||
]
|
||||
].sort()
|
||||
|
||||
const rawHttpPattern = /\b(?:RestClient|WebClient|HttpClient)\b/
|
||||
|
||||
@@ -78,7 +73,7 @@ async function javaFiles(directory) {
|
||||
else if (entry.isFile() && entry.name.endsWith('.java')) result.push(target)
|
||||
}
|
||||
}
|
||||
await visit(directory)
|
||||
if (await readdir(directory).catch(error => { if (error.code === 'ENOENT') return null; throw error })) await visit(directory)
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -111,17 +106,17 @@ test('all Feign clients have reviewed context, access and idempotency metadata',
|
||||
|
||||
test('all raw HTTP transports have reviewed context, access and idempotency metadata', async () => {
|
||||
const discovered = []
|
||||
for (const module of ['common-audit', 'event-bridge-service', 'gateway-overseas', 'lastleg-service', 'integration-service']) {
|
||||
for (const module of serviceModules) {
|
||||
for (const file of await javaFiles(path.join(root, module, 'src', 'main', 'java'))) {
|
||||
const source = await readFile(file, 'utf8')
|
||||
if (!rawHttpPattern.test(source)) continue
|
||||
if (!/(?:private|final)\s+(?:RestClient|WebClient|HttpClient)\b|HttpClient\s+client\s*=/.test(source)) continue
|
||||
if (!/(?:private|final)\s+(?:[\w.]+\.)?(?:RestClient|WebClient|HttpClient)\b|HttpClient\s+client\s*=/.test(source)) continue
|
||||
discovered.push(path.relative(root, file).replaceAll('\\', '/'))
|
||||
}
|
||||
}
|
||||
const reviewed = SYNCHRONOUS_CLIENTS.filter(client => client.transport === 'HTTP')
|
||||
.map(client => client.path).sort()
|
||||
assert.equal(reviewed.length, 24)
|
||||
assert.equal(reviewed.length, 22)
|
||||
assert.deepEqual(discovered.sort(), reviewed)
|
||||
})
|
||||
|
||||
@@ -175,7 +170,7 @@ test('all six Lastleg RestClient gateways use explicit bounded transports', asyn
|
||||
|
||||
for (const configFile of [
|
||||
'lastleg-service/src/main/resources/application.yml',
|
||||
'config/nacos/overseas/lastleg-service.yml'
|
||||
'config/nacos/test/lastleg-service.yml'
|
||||
]) {
|
||||
const source = await readFile(path.join(root, configFile), 'utf8')
|
||||
for (const key of ['unload-photo-file', 'relabel-photo-file', 'customer-visit-file', 'procurement-file', 'warehouse-resource', 'pallet-physical']) {
|
||||
@@ -191,26 +186,28 @@ test('REQUEST, BACKGROUND and full graphs remain separate executable baselines',
|
||||
assert.deepEqual(graphEdges('BACKGROUND'), expectedBackgroundEdges)
|
||||
assert.deepEqual(graphEdges('INFRASTRUCTURE'), [
|
||||
'common-audit->audit-service',
|
||||
'gateway-overseas->auth-service',
|
||||
'gateway-overseas->lastleg-service'
|
||||
'common-security->auth-service',
|
||||
'gateway->auth-service'
|
||||
])
|
||||
assert.deepEqual(stronglyConnectedComponents(graphEdges('REQUEST')), [
|
||||
['auth-service', 'iam-service'],
|
||||
['finance-service', 'firstleg-service', 'order-service']
|
||||
])
|
||||
assert.deepEqual(stronglyConnectedComponents(graphEdges('BACKGROUND')), [[
|
||||
'event-bridge-service', 'finance-service', 'firstleg-service', 'lastleg-service', 'order-service'
|
||||
'finance-service', 'firstleg-service', 'lastleg-service', 'order-service'
|
||||
]])
|
||||
assert.deepEqual(stronglyConnectedComponents(graphEdges('ALL')), [[
|
||||
'auth-service', 'event-bridge-service', 'file-service', 'finance-service',
|
||||
'auth-service', 'file-service', 'finance-service',
|
||||
'firstleg-service', 'iam-service', 'lastleg-service', 'order-service'
|
||||
]])
|
||||
})
|
||||
|
||||
test('overseas security projection stays in Lastleg infrastructure and background edges', () => {
|
||||
assert.ok(!graphEdges('REQUEST').some(edge => edge === 'gateway-overseas->lastleg-service'))
|
||||
assert.ok(graphEdges('INFRASTRUCTURE').includes('gateway-overseas->lastleg-service'))
|
||||
assert.ok(graphEdges('BACKGROUND').includes('event-bridge-service->lastleg-service'))
|
||||
test('unified authority checks remain infrastructure edges and direct events remain background', () => {
|
||||
assert.ok(graphEdges('INFRASTRUCTURE').includes('gateway->auth-service'))
|
||||
assert.ok(graphEdges('INFRASTRUCTURE').includes('common-security->auth-service'))
|
||||
assert.ok(graphEdges('BACKGROUND').includes('lastleg-service->finance-service'))
|
||||
assert.ok(!graphEdges('REQUEST').includes('lastleg-service->finance-service'))
|
||||
assert.ok(!SYNCHRONOUS_CLIENTS.some(client => ['event-bridge-service','gateway-overseas'].includes(client.source) || ['event-bridge-service','gateway-overseas'].includes(client.target)))
|
||||
})
|
||||
|
||||
test('Order, Firstleg and Finance form the reviewed REQUEST SCC', () => {
|
||||
@@ -284,7 +281,7 @@ test('known user entries expose every longest simple REQUEST path over the two-h
|
||||
})
|
||||
|
||||
test('shared Feign timeout defaults and long-running export overrides do not drift silently', async () => {
|
||||
for (const profile of ['local', 'cn', 'overseas']) {
|
||||
for (const profile of ['test']) {
|
||||
const source = await readFile(path.join(root, 'config', 'nacos', profile, 'baiyue-common.yml'), 'utf8')
|
||||
assert.match(source, /connect-timeout:\s*3000/)
|
||||
assert.match(source, /read-timeout:\s*5000/)
|
||||
|
||||
Reference in New Issue
Block a user