package main import ( "fmt" "testing" "time" ) func TestTrafficCountryDetailsUseHistoryAndFilters(t *testing.T) { s, a := trafficFixture(t) if _, err := s.SaveTrafficSettings(TrafficSettings{Enabled: true, AgentID: a.ID, MonitoringRules: []MonitoringRule{{IP: "8.8.8.8"}}}); err != nil { t.Fatal(err) } events := []TrafficEvent{} for i := 0; i < 120; i++ { events = append(events, TrafficEvent{ID: fmt.Sprint("http-", i), Time: time.Now().Unix(), Kind: "request", IP: "8.8.8.8", Domain: "example.test", Path: "/", Status: 200}) } events = append(events, TrafficEvent{ID: "alert", Time: time.Now().Unix(), Kind: "alert", IP: "8.8.8.8", Domain: "example.test", Reason: "test"}) if err := s.SaveTraffic(a.ID, TrafficBatch{Events: events}); err != nil { t.Fatal(err) } v, err := s.TrafficView("", "", false) if err != nil { t.Fatal(err) } if len(v.Events) != 100 || len(v.CountryDetails) != 1 { t.Fatalf("events=%d countries=%+v", len(v.Events), v.CountryDetails) } d := v.CountryDetails[0] if d.Requests != 120 || d.UniqueIPs != 1 || d.Alerts != 1 || d.LastSeen == 0 { t.Fatalf("%+v", d) } v, err = s.TrafficView("example.test", "", false, true) if err != nil { t.Fatal(err) } if len(v.CountryDetails) != 1 || v.CountryDetails[0].Requests != 0 || v.CountryDetails[0].Alerts != 1 { t.Fatalf("filter: %+v", v.CountryDetails) } v, err = s.TrafficView("other.test", "", false) if err != nil || len(v.CountryDetails) != 0 { t.Fatalf("domain: %+v %v", v.CountryDetails, err) } }