Go-based FM stereo transmitter with RDS, Windows-first and cross-platform
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

62 行
2.1KB

  1. package control
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "net/http"
  6. "net/http/httptest"
  7. "testing"
  8. cfgpkg "github.com/jan/fm-rds-tx/internal/config"
  9. )
  10. func TestHealthz(t *testing.T) {
  11. srv := NewServer(cfgpkg.Default())
  12. rec := httptest.NewRecorder()
  13. srv.Handler().ServeHTTP(rec, httptest.NewRequest(http.MethodGet, "/healthz", nil))
  14. if rec.Code != 200 { t.Fatalf("status: %d", rec.Code) }
  15. }
  16. func TestStatus(t *testing.T) {
  17. srv := NewServer(cfgpkg.Default())
  18. rec := httptest.NewRecorder()
  19. srv.Handler().ServeHTTP(rec, httptest.NewRequest(http.MethodGet, "/status", nil))
  20. if rec.Code != 200 { t.Fatalf("status: %d", rec.Code) }
  21. var body map[string]any
  22. json.Unmarshal(rec.Body.Bytes(), &body)
  23. if body["service"] != "fm-rds-tx" { t.Fatal("missing service") }
  24. if _, ok := body["preEmphasisTauUS"]; !ok { t.Fatal("missing preEmphasisTauUS") }
  25. }
  26. func TestDryRunEndpoint(t *testing.T) {
  27. srv := NewServer(cfgpkg.Default())
  28. rec := httptest.NewRecorder()
  29. srv.Handler().ServeHTTP(rec, httptest.NewRequest(http.MethodGet, "/dry-run", nil))
  30. if rec.Code != 200 { t.Fatalf("status: %d", rec.Code) }
  31. var body map[string]any
  32. json.Unmarshal(rec.Body.Bytes(), &body)
  33. if body["mode"] != "dry-run" { t.Fatal("wrong mode") }
  34. }
  35. func TestConfigPatch(t *testing.T) {
  36. srv := NewServer(cfgpkg.Default())
  37. body := []byte(`{"toneLeftHz":900,"radioText":"hello world","preEmphasisTauUS":75}`)
  38. rec := httptest.NewRecorder()
  39. srv.Handler().ServeHTTP(rec, httptest.NewRequest(http.MethodPost, "/config", bytes.NewReader(body)))
  40. if rec.Code != 200 { t.Fatalf("status: %d body=%s", rec.Code, rec.Body.String()) }
  41. }
  42. func TestRuntimeWithoutDriver(t *testing.T) {
  43. srv := NewServer(cfgpkg.Default())
  44. rec := httptest.NewRecorder()
  45. srv.Handler().ServeHTTP(rec, httptest.NewRequest(http.MethodGet, "/runtime", nil))
  46. if rec.Code != 200 { t.Fatalf("status: %d", rec.Code) }
  47. }
  48. func TestTXStartWithoutController(t *testing.T) {
  49. srv := NewServer(cfgpkg.Default())
  50. rec := httptest.NewRecorder()
  51. srv.Handler().ServeHTTP(rec, httptest.NewRequest(http.MethodPost, "/tx/start", nil))
  52. if rec.Code != http.StatusServiceUnavailable { t.Fatalf("expected 503, got %d", rec.Code) }
  53. }