Wideband autonomous SDR analysis engine forked from sdr-visual-suite
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
1.5KB

  1. package events
  2. import (
  3. "encoding/json"
  4. "os"
  5. "path/filepath"
  6. "testing"
  7. "time"
  8. "sdr-visual-suite/internal/detector"
  9. )
  10. func TestReadRecent(t *testing.T) {
  11. dir := t.TempDir()
  12. path := filepath.Join(dir, "events.jsonl")
  13. start := time.Now().Add(-5 * time.Minute).UTC().Truncate(time.Millisecond)
  14. events := []detector.Event{
  15. {ID: 1, Start: start, End: start.Add(2 * time.Second), CenterHz: 100, Bandwidth: 5, PeakDb: -10, SNRDb: 12},
  16. {ID: 2, Start: start.Add(10 * time.Second), End: start.Add(12 * time.Second), CenterHz: 200, Bandwidth: 10, PeakDb: -5, SNRDb: 15},
  17. {ID: 3, Start: start.Add(20 * time.Second), End: start.Add(22 * time.Second), CenterHz: 300, Bandwidth: 20, PeakDb: -3, SNRDb: 18},
  18. }
  19. file, err := os.Create(path)
  20. if err != nil {
  21. t.Fatalf("create: %v", err)
  22. }
  23. enc := json.NewEncoder(file)
  24. for _, ev := range events {
  25. if err := enc.Encode(ev); err != nil {
  26. t.Fatalf("encode: %v", err)
  27. }
  28. }
  29. if err := file.Close(); err != nil {
  30. t.Fatalf("close: %v", err)
  31. }
  32. got, err := ReadRecent(path, 2, time.Time{})
  33. if err != nil {
  34. t.Fatalf("read: %v", err)
  35. }
  36. if len(got) != 2 {
  37. t.Fatalf("expected 2 events, got %d", len(got))
  38. }
  39. if got[0].ID != 2 || got[1].ID != 3 {
  40. t.Fatalf("unexpected IDs: %v, %v", got[0].ID, got[1].ID)
  41. }
  42. since := start.Add(15 * time.Second)
  43. got, err = ReadRecent(path, 10, since)
  44. if err != nil {
  45. t.Fatalf("read since: %v", err)
  46. }
  47. if len(got) != 1 {
  48. t.Fatalf("expected 1 event, got %d", len(got))
  49. }
  50. if got[0].ID != 3 {
  51. t.Fatalf("expected ID 3, got %d", got[0].ID)
  52. }
  53. }