alot more changes
This commit is contained in:
1 parent
23243ddbdc
commit
0ed2935f04
40 files changed
+2889
-115
No files matched your search
@@ -383,6 +383,21 @@ func TestHandleIssuesAndByID(t *testing.T) {
|
||||
t.Fatalf("expected 200 for known issue id, got %d", rec.Code)
|
||||
}
|
||||
|
||||
req = httptest.NewRequest(http.MethodPatch, "/api/issues/"+id, bytes.NewBufferString(`{"status":"resolved"}`))
|
||||
req.SetPathValue("id", id)
|
||||
rec = httptest.NewRecorder()
|
||||
coll.HandleIssueByID(rec, req)
|
||||
if rec.Code != http.StatusOK {
|
||||
t.Fatalf("expected 200 when resolving known issue, got %d: %s", rec.Code, rec.Body.String())
|
||||
}
|
||||
var updated map[string]any
|
||||
if err := json.Unmarshal(rec.Body.Bytes(), &updated); err != nil {
|
||||
t.Fatalf("failed to decode updated issue response: %v", err)
|
||||
}
|
||||
if updated["status"] != "resolved" {
|
||||
t.Fatalf("expected resolved issue, got %+v", updated["status"])
|
||||
}
|
||||
|
||||
req = httptest.NewRequest(http.MethodGet, "/api/issues/missing", nil)
|
||||
req.SetPathValue("id", "missing")
|
||||
rec = httptest.NewRecorder()
|
||||
@@ -530,6 +545,72 @@ func TestHandleLogsIngestKey(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestHandleLogsPodGuardianIntegration(t *testing.T) {
|
||||
coll := New(noopBroadcaster{}, 10, nil)
|
||||
coll.SetIngestKey("ingest-secret")
|
||||
|
||||
// Payload matching what fervent-franklin (k8s-pod-guardian) sends
|
||||
payload := `{
|
||||
"resourceLogs": [
|
||||
{
|
||||
"resource": {
|
||||
"attributes": [
|
||||
{ "key": "service.name", "value": { "stringValue": "payment-service" } },
|
||||
{ "key": "service.environment", "value": { "stringValue": "production" } },
|
||||
{ "key": "telemetry.source", "value": { "stringValue": "k8s-pod-guardian" } },
|
||||
{ "key": "k8s.namespace.name", "value": { "stringValue": "default" } },
|
||||
{ "key": "k8s.pod.name", "value": { "stringValue": "payment-api-6789-xyz" } },
|
||||
{ "key": "k8s.container.name", "value": { "stringValue": "payment-api" } },
|
||||
{ "key": "host.name", "value": { "stringValue": "worker-1" } }
|
||||
]
|
||||
},
|
||||
"scopeLogs": [
|
||||
{
|
||||
"scope": { "name": "k8s-pod-guardian/crashloop-harvester" },
|
||||
"logRecords": [
|
||||
{
|
||||
"timeUnixNano": "1779362400000000000",
|
||||
"severityNumber": 17,
|
||||
"severityText": "ERROR",
|
||||
"body": {
|
||||
"stringValue": "panic: database connection failed: dial tcp 10.96.0.10:5432: i/o timeout"
|
||||
},
|
||||
"attributes": [
|
||||
{ "key": "k8s.container.restart_count", "value": { "stringValue": "5" } },
|
||||
{ "key": "crashloop.reason", "value": { "stringValue": "CrashLoopBackOff" } }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}`
|
||||
|
||||
req := httptest.NewRequest(http.MethodPost, "/v1/logs", bytes.NewReader([]byte(payload)))
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
req.Header.Set("X-Otel-Ingest-Key", "ingest-secret")
|
||||
req.RemoteAddr = "192.0.2.1:12345"
|
||||
|
||||
rec := httptest.NewRecorder()
|
||||
coll.HandleLogs(rec, req)
|
||||
|
||||
if rec.Code != http.StatusOK {
|
||||
t.Fatalf("expected status 200, got %d (body=%s)", rec.Code, rec.Body.String())
|
||||
}
|
||||
|
||||
issues := coll.ListIssues(10)
|
||||
if len(issues) != 1 {
|
||||
t.Fatalf("expected 1 issue created from crash log, got %d", len(issues))
|
||||
}
|
||||
if issues[0].Service != "payment-service" {
|
||||
t.Errorf("expected issue service 'payment-service', got %q", issues[0].Service)
|
||||
}
|
||||
if !strings.Contains(issues[0].Title, "panic: database connection failed") {
|
||||
t.Errorf("unexpected issue title: %q", issues[0].Title)
|
||||
}
|
||||
}
|
||||
|
||||
func TestHandleLogsIngestRateLimited(t *testing.T) {
|
||||
coll := New(noopBroadcaster{}, 10, nil)
|
||||
body := []byte(`{"resourceLogs":[]}`)
|
||||
|
||||
Reference in new issue
Block a user