Public source validation / validate (push) Failing after 3m8s
53 lines
2.2 KiB
Go
53 lines
2.2 KiB
Go
package service
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/itworx/pulse/internal/application"
|
|
"github.com/itworx/pulse/internal/probe"
|
|
)
|
|
|
|
type serviceScenario struct {
|
|
ID string `json:"id"`
|
|
Timeline []struct {
|
|
Action string `json:"action"`
|
|
Payload struct {
|
|
Success bool `json:"success"`
|
|
} `json:"payload"`
|
|
} `json:"timeline"`
|
|
}
|
|
|
|
func TestServiceDownContainerRunningFixtureProjectsDegradedApplication(t *testing.T) {
|
|
fixturePath := filepath.Join("..", "..", "fixtures", "scenarios", "service-down-container-running.json")
|
|
content, err := os.ReadFile(fixturePath)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var fixture serviceScenario
|
|
if err := json.Unmarshal(content, &fixture); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if fixture.ID != "service-down-container-running" || len(fixture.Timeline) != 2 || fixture.Timeline[0].Action != "set-probe-result" || fixture.Timeline[0].Payload.Success {
|
|
t.Fatalf("fixture does not describe the service outage: %+v", fixture)
|
|
}
|
|
now := time.Date(2026, 8, 2, 12, 0, 0, 0, time.UTC)
|
|
serviceSnapshot, err := BuildSnapshot(now, []ServiceInput{{Service: statusService("fixture-http"), Probes: []ProbeHistory{{ProbeID: "fixture-http", Results: []probe.Result{{ProbeID: "fixture-http", ObservedAt: now.Add(-30 * time.Second), State: StateDown, ErrorClass: "status_not_expected"}}}}}}, StatusPolicy{})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if serviceSnapshot.Services[0].State != StateDown {
|
|
t.Fatalf("service outage was not projected: %+v", serviceSnapshot.Services[0])
|
|
}
|
|
applicationSnapshot, err := application.BuildSnapshot(application.Source{ID: "fixture", Type: "scenario", ObservedAt: now, ReceivedAt: now}, []application.DiscoveredApplication{{ID: "fixture-app", Name: "Fixture app", Components: []application.ComponentInput{{ID: "fixture-http", Name: "HTTP", Kind: "service", ContainerState: application.StateHealthy, ServiceState: application.StateDown, Critical: true}}}}, nil, now)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if applicationSnapshot.Applications[0].Status != application.StateDegraded || applicationSnapshot.Applications[0].Reasons[0].Code != "service_down" {
|
|
t.Fatalf("running container hid service outage: %+v", applicationSnapshot.Applications[0])
|
|
}
|
|
}
|