mirror of
https://github.com/dromara/hertzbeat.git
synced 2026-10-02 14:09:07 +00:00
522 lines
13 KiB
TypeScript
522 lines
13 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import {
|
|
buildAngularReferenceStubPayload,
|
|
resolveAngularReferenceStubResponse
|
|
} from './angular-reference-server-lib.mjs';
|
|
|
|
describe('angular reference server stub helpers', () => {
|
|
it('stubs Milestone 2 paged endpoints with query-aware empty payloads', () => {
|
|
expect(
|
|
buildAngularReferenceStubPayload('http://127.0.0.1:1157/api/entities?pageIndex=3&pageSize=8')
|
|
).toEqual({
|
|
code: 0,
|
|
data: {
|
|
content: [],
|
|
totalPages: 0,
|
|
totalElements: 0,
|
|
size: 8,
|
|
number: 3,
|
|
numberOfElements: 0,
|
|
pageIndex: 3,
|
|
pageSize: 8
|
|
}
|
|
});
|
|
|
|
expect(
|
|
buildAngularReferenceStubPayload('http://127.0.0.1:1157/api/traces/list?pageIndex=2&pageSize=50')
|
|
).toEqual({
|
|
code: 0,
|
|
data: {
|
|
content: [],
|
|
totalPages: 0,
|
|
totalElements: 0,
|
|
size: 50,
|
|
number: 2,
|
|
numberOfElements: 0,
|
|
pageIndex: 2,
|
|
pageSize: 50
|
|
}
|
|
});
|
|
});
|
|
|
|
it('stubs Milestone 2 support endpoints even outside overview referers', () => {
|
|
expect(
|
|
buildAngularReferenceStubPayload('http://127.0.0.1:1157/api/entities/definition-activities?limit=8')
|
|
).toEqual({
|
|
code: 0,
|
|
data: []
|
|
});
|
|
|
|
expect(
|
|
buildAngularReferenceStubPayload('http://127.0.0.1:1157/api/entities/definition/templates?limit=8')
|
|
).toEqual({
|
|
code: 0,
|
|
data: []
|
|
});
|
|
|
|
expect(
|
|
buildAngularReferenceStubPayload('http://127.0.0.1:1157/api/entities/discovery/governance-presets?limit=8')
|
|
).toEqual({
|
|
code: 0,
|
|
data: []
|
|
});
|
|
|
|
expect(
|
|
buildAngularReferenceStubPayload('http://127.0.0.1:1157/api/entities/discovery/governance-activities?limit=24')
|
|
).toEqual({
|
|
code: 0,
|
|
data: []
|
|
});
|
|
|
|
expect(
|
|
buildAngularReferenceStubPayload('http://127.0.0.1:1157/api/entities/definition/workspace-activities?limit=24')
|
|
).toEqual({
|
|
code: 0,
|
|
data: []
|
|
});
|
|
|
|
expect(
|
|
buildAngularReferenceStubPayload('http://127.0.0.1:1157/api/entities/catalog-suggestions?limit=120')
|
|
).toEqual({
|
|
code: 0,
|
|
data: {
|
|
owners: [],
|
|
namespaces: [],
|
|
environments: [],
|
|
systems: [],
|
|
lifecycles: [],
|
|
tiers: [],
|
|
inheritFromRefs: [],
|
|
entityRefs: [],
|
|
languages: [],
|
|
linkProviders: []
|
|
}
|
|
});
|
|
|
|
expect(
|
|
buildAngularReferenceStubPayload('http://127.0.0.1:1157/api/config/mute')
|
|
).toEqual({
|
|
code: 0,
|
|
data: {
|
|
mute: true
|
|
}
|
|
});
|
|
|
|
expect(
|
|
buildAngularReferenceStubPayload('http://127.0.0.1:1157/api/alerts?sort=gmtUpdate&order=desc&pageIndex=0&pageSize=5&status=firing')
|
|
).toEqual({
|
|
code: 0,
|
|
data: {
|
|
content: [],
|
|
totalPages: 0,
|
|
totalElements: 0,
|
|
size: 5,
|
|
number: 0,
|
|
numberOfElements: 0,
|
|
pageIndex: 0,
|
|
pageSize: 5
|
|
}
|
|
});
|
|
|
|
expect(
|
|
buildAngularReferenceStubPayload('http://127.0.0.1:1157/api/monitors?pageIndex=0&pageSize=1')
|
|
).toEqual({
|
|
code: 0,
|
|
data: {
|
|
content: [],
|
|
totalPages: 0,
|
|
totalElements: 0,
|
|
size: 1,
|
|
number: 0,
|
|
numberOfElements: 0,
|
|
pageIndex: 0,
|
|
pageSize: 1
|
|
}
|
|
});
|
|
|
|
expect(
|
|
buildAngularReferenceStubPayload('http://127.0.0.1:1157/api/entities/42')
|
|
).toEqual({
|
|
code: 0,
|
|
data: {
|
|
entity: {
|
|
id: 42,
|
|
type: 'service',
|
|
name: 'entity-42',
|
|
displayName: 'Entity 42',
|
|
owner: 'platform',
|
|
system: 'catalog',
|
|
environment: 'prod',
|
|
lifecycle: 'production',
|
|
source: 'manual',
|
|
labels: {},
|
|
tags: [],
|
|
additionalOwners: [],
|
|
links: [],
|
|
contacts: [],
|
|
componentOf: [],
|
|
components: [],
|
|
implementedBy: [],
|
|
languages: []
|
|
},
|
|
identities: [],
|
|
monitorBinds: [],
|
|
relations: []
|
|
}
|
|
});
|
|
|
|
expect(
|
|
buildAngularReferenceStubPayload('http://127.0.0.1:1157/api/entities/42/detail')
|
|
).toEqual({
|
|
code: 0,
|
|
data: {
|
|
entity: {
|
|
entity: {
|
|
id: 42,
|
|
name: 'entity-42',
|
|
displayName: 'Entity 42',
|
|
type: 'service',
|
|
status: 'unknown',
|
|
owner: 'platform',
|
|
environment: 'prod',
|
|
system: 'catalog',
|
|
source: 'manual',
|
|
description: 'Fallback entity workspace while backend entity detail APIs are unavailable.'
|
|
},
|
|
identities: [],
|
|
monitorBinds: [],
|
|
relations: []
|
|
},
|
|
evidenceSummary: {
|
|
activeAlertCount: 0,
|
|
downMonitorCount: 0,
|
|
healthyMonitorCount: 0,
|
|
identityCount: 0,
|
|
logHintCount: 0,
|
|
lastEvidenceAt: null
|
|
},
|
|
alertSummary: {
|
|
totalActiveAlerts: 0,
|
|
latestStatusChangeAt: null
|
|
},
|
|
monitorSummary: {
|
|
totalBoundMonitors: 0,
|
|
latestStatusChangeAt: null
|
|
},
|
|
logSummary: {
|
|
hintCount: 0,
|
|
preferredQueryTitle: null,
|
|
fallbackSearchTerm: null
|
|
},
|
|
traceSummary: {
|
|
recentTraceCount: 0,
|
|
recentErrorTraceCount: 0,
|
|
latestObservedAt: null,
|
|
active: false,
|
|
latestTraceId: null
|
|
},
|
|
boundMonitors: [],
|
|
activeAlerts: [],
|
|
nextActions: [
|
|
{
|
|
actionType: 'definition',
|
|
title: 'Open definition workspace',
|
|
summary: 'Review the definition shell before adding ownership or evidence.',
|
|
actionLabel: 'Open definition',
|
|
priority: 1
|
|
}
|
|
]
|
|
}
|
|
});
|
|
|
|
expect(
|
|
buildAngularReferenceStubPayload('http://127.0.0.1:1157/api/entities/42/alerts?pageIndex=2&pageSize=5')
|
|
).toEqual({
|
|
code: 0,
|
|
data: {
|
|
content: [],
|
|
totalPages: 0,
|
|
totalElements: 0,
|
|
size: 5,
|
|
number: 2,
|
|
numberOfElements: 0,
|
|
pageIndex: 2,
|
|
pageSize: 5
|
|
}
|
|
});
|
|
|
|
expect(
|
|
buildAngularReferenceStubPayload('http://127.0.0.1:1157/api/entities/42/monitors?pageIndex=0&pageSize=10&status=2')
|
|
).toEqual({
|
|
code: 0,
|
|
data: {
|
|
content: [],
|
|
totalPages: 0,
|
|
totalElements: 0,
|
|
size: 10,
|
|
number: 0,
|
|
numberOfElements: 0,
|
|
pageIndex: 0,
|
|
pageSize: 10
|
|
}
|
|
});
|
|
|
|
expect(
|
|
buildAngularReferenceStubPayload('http://127.0.0.1:1157/api/entities/42/definition?format=yaml')
|
|
).toEqual({
|
|
code: 0,
|
|
data: [
|
|
'apiVersion: hertzbeat.apache.org/v1',
|
|
'kind: Entity',
|
|
'metadata:',
|
|
' name: entity-42',
|
|
'spec:',
|
|
' type: service',
|
|
' displayName: Entity 42',
|
|
' owner: platform',
|
|
' system: catalog',
|
|
' environment: prod',
|
|
' source: manual'
|
|
].join('\n')
|
|
});
|
|
|
|
expect(
|
|
buildAngularReferenceStubPayload('http://127.0.0.1:1157/api/ingestion/otlp/overview')
|
|
).toEqual({
|
|
code: 0,
|
|
data: {
|
|
metrics: {
|
|
signal: 'metrics',
|
|
active: false,
|
|
totalCount: 0,
|
|
latestObservedAt: null,
|
|
intakeMode: 'pull',
|
|
summary: ''
|
|
},
|
|
logs: {
|
|
signal: 'logs',
|
|
active: false,
|
|
totalCount: 0,
|
|
latestObservedAt: null,
|
|
intakeMode: 'push',
|
|
summary: ''
|
|
},
|
|
traces: {
|
|
signal: 'traces',
|
|
active: false,
|
|
totalCount: 0,
|
|
latestObservedAt: null,
|
|
intakeMode: 'push',
|
|
summary: ''
|
|
},
|
|
activeSignalCount: 0,
|
|
latestObservedAt: null,
|
|
recentServiceCount: 0,
|
|
boundEntityCount: 0,
|
|
recentEvents: []
|
|
}
|
|
});
|
|
|
|
expect(
|
|
buildAngularReferenceStubPayload('http://127.0.0.1:1157/api/ingestion/otlp/guide')
|
|
).toEqual({
|
|
code: 0,
|
|
data: {
|
|
httpProtocolLabel: 'HTTP',
|
|
grpcProtocolLabel: 'gRPC',
|
|
authHeaderName: 'Authorization',
|
|
authHeaderExample: 'Bearer <token>',
|
|
grpcAuthorityExample: '',
|
|
signals: [],
|
|
snippets: []
|
|
}
|
|
});
|
|
|
|
expect(
|
|
buildAngularReferenceStubPayload('http://127.0.0.1:1157/api/ingestion/otlp/bindings')
|
|
).toEqual({
|
|
code: 0,
|
|
data: {
|
|
canonicalIdentityKeys: [],
|
|
recentServices: [],
|
|
recentIdentitySamples: [],
|
|
recentBoundEntities: []
|
|
}
|
|
});
|
|
|
|
expect(
|
|
buildAngularReferenceStubPayload('http://127.0.0.1:1157/api/ingestion/otlp/metrics/console?entityId=7')
|
|
).toEqual({
|
|
code: 0,
|
|
data: {
|
|
context: {},
|
|
query: null,
|
|
datasource: null,
|
|
queryMode: null,
|
|
results: {
|
|
refId: null,
|
|
status: 0,
|
|
msg: '',
|
|
frames: []
|
|
},
|
|
stats: {
|
|
totalSeries: 0,
|
|
nonEmptySeries: 0,
|
|
latestObservedAt: null
|
|
},
|
|
emptyStateReason: 'no-data',
|
|
errorMessage: null
|
|
}
|
|
});
|
|
|
|
expect(
|
|
buildAngularReferenceStubPayload('http://127.0.0.1:1157/api/traces/stats/overview')
|
|
).toEqual({
|
|
code: 0,
|
|
data: {
|
|
totalTraceCount: 0,
|
|
errorTraceCount: 0,
|
|
latestObservedAt: null,
|
|
hasActiveTrace: false
|
|
}
|
|
});
|
|
|
|
expect(
|
|
buildAngularReferenceStubPayload('http://127.0.0.1:1157/apps/hierarchy?lang=en-US')
|
|
).toEqual({
|
|
code: 0,
|
|
data: []
|
|
});
|
|
});
|
|
|
|
it('only serves stub responses for 404 GET or HEAD requests on known routes', () => {
|
|
expect(
|
|
resolveAngularReferenceStubResponse({
|
|
method: 'GET',
|
|
upstreamStatus: 404,
|
|
targetUrl: 'http://127.0.0.1:1157/api/ingestion/otlp/overview'
|
|
})
|
|
).toEqual({
|
|
status: 200,
|
|
headers: {
|
|
'Content-Type': 'application/json; charset=utf-8'
|
|
},
|
|
body: JSON.stringify({
|
|
code: 0,
|
|
data: {
|
|
metrics: {
|
|
signal: 'metrics',
|
|
active: false,
|
|
totalCount: 0,
|
|
latestObservedAt: null,
|
|
intakeMode: 'pull',
|
|
summary: ''
|
|
},
|
|
logs: {
|
|
signal: 'logs',
|
|
active: false,
|
|
totalCount: 0,
|
|
latestObservedAt: null,
|
|
intakeMode: 'push',
|
|
summary: ''
|
|
},
|
|
traces: {
|
|
signal: 'traces',
|
|
active: false,
|
|
totalCount: 0,
|
|
latestObservedAt: null,
|
|
intakeMode: 'push',
|
|
summary: ''
|
|
},
|
|
activeSignalCount: 0,
|
|
latestObservedAt: null,
|
|
recentServiceCount: 0,
|
|
boundEntityCount: 0,
|
|
recentEvents: []
|
|
}
|
|
})
|
|
});
|
|
|
|
expect(
|
|
resolveAngularReferenceStubResponse({
|
|
method: 'HEAD',
|
|
upstreamStatus: 404,
|
|
targetUrl: 'http://127.0.0.1:1157/api/traces/list?pageIndex=0&pageSize=20'
|
|
})
|
|
).toEqual({
|
|
status: 200,
|
|
headers: {
|
|
'Content-Type': 'application/json; charset=utf-8'
|
|
},
|
|
body: ''
|
|
});
|
|
|
|
expect(
|
|
resolveAngularReferenceStubResponse({
|
|
method: 'GET',
|
|
upstreamStatus: 404,
|
|
targetUrl: 'http://127.0.0.1:1157/apps/hierarchy?lang=en-US'
|
|
})
|
|
).toEqual({
|
|
status: 200,
|
|
headers: {
|
|
'Content-Type': 'application/json; charset=utf-8'
|
|
},
|
|
body: JSON.stringify({
|
|
code: 0,
|
|
data: []
|
|
})
|
|
});
|
|
|
|
expect(
|
|
resolveAngularReferenceStubResponse({
|
|
method: 'POST',
|
|
upstreamStatus: 404,
|
|
targetUrl: 'http://127.0.0.1:1157/api/entities/discovery/governance-presets'
|
|
})
|
|
).toBeNull();
|
|
|
|
expect(
|
|
resolveAngularReferenceStubResponse({
|
|
method: 'GET',
|
|
upstreamStatus: 200,
|
|
targetUrl: 'http://127.0.0.1:1157/api/ingestion/otlp/overview'
|
|
})
|
|
).toBeNull();
|
|
|
|
expect(
|
|
resolveAngularReferenceStubResponse({
|
|
method: 'GET',
|
|
upstreamStatus: 404,
|
|
targetUrl: 'http://127.0.0.1:1157/api/alerts'
|
|
})
|
|
).toEqual({
|
|
status: 200,
|
|
headers: {
|
|
'Content-Type': 'application/json; charset=utf-8'
|
|
},
|
|
body: JSON.stringify({
|
|
code: 0,
|
|
data: {
|
|
content: [],
|
|
totalPages: 0,
|
|
totalElements: 0,
|
|
size: 10,
|
|
number: 0,
|
|
numberOfElements: 0,
|
|
pageIndex: 0,
|
|
pageSize: 10
|
|
}
|
|
})
|
|
});
|
|
|
|
expect(
|
|
resolveAngularReferenceStubResponse({
|
|
method: 'GET',
|
|
upstreamStatus: 404,
|
|
targetUrl: 'http://127.0.0.1:1157/api/not-stubbed'
|
|
})
|
|
).toBeNull();
|
|
});
|
|
});
|