Go-based FM stereo transmitter with RDS, Windows-first and cross-platform
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
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. req := httptest.NewRequest(http.MethodGet, "/healthz", nil)
  13. rec := httptest.NewRecorder()
  14. srv.Handler().ServeHTTP(rec, req)
  15. if rec.Code != http.StatusOK {
  16. t.Fatalf("unexpected status: %d", rec.Code)
  17. }
  18. }
  19. func TestStatus(t *testing.T) {
  20. srv := NewServer(cfgpkg.Default())
  21. req := httptest.NewRequest(http.MethodGet, "/status", nil)
  22. rec := httptest.NewRecorder()
  23. srv.Handler().ServeHTTP(rec, req)
  24. if rec.Code != http.StatusOK {
  25. t.Fatalf("unexpected status: %d", rec.Code)
  26. }
  27. var body map[string]any
  28. if err := json.Unmarshal(rec.Body.Bytes(), &body); err != nil {
  29. t.Fatalf("decode body: %v", err)
  30. }
  31. if body["service"] != "fm-rds-tx" {
  32. t.Fatalf("unexpected service: %v", body["service"])
  33. }
  34. if _, ok := body["preEmphasisUS"]; !ok {
  35. t.Fatal("expected preEmphasisUS in status")
  36. }
  37. }
  38. func TestDryRunEndpoint(t *testing.T) {
  39. srv := NewServer(cfgpkg.Default())
  40. req := httptest.NewRequest(http.MethodGet, "/dry-run", nil)
  41. rec := httptest.NewRecorder()
  42. srv.Handler().ServeHTTP(rec, req)
  43. if rec.Code != http.StatusOK {
  44. t.Fatalf("unexpected status: %d", rec.Code)
  45. }
  46. var body map[string]any
  47. if err := json.Unmarshal(rec.Body.Bytes(), &body); err != nil {
  48. t.Fatalf("decode body: %v", err)
  49. }
  50. if body["mode"] != "dry-run" {
  51. t.Fatalf("unexpected mode: %v", body["mode"])
  52. }
  53. }
  54. func TestConfigPatch(t *testing.T) {
  55. srv := NewServer(cfgpkg.Default())
  56. body := []byte(`{"toneLeftHz":900,"radioText":"hello world","preEmphasisUS":75}`)
  57. req := httptest.NewRequest(http.MethodPost, "/config", bytes.NewReader(body))
  58. rec := httptest.NewRecorder()
  59. srv.Handler().ServeHTTP(rec, req)
  60. if rec.Code != http.StatusOK {
  61. t.Fatalf("unexpected status: %d body=%s", rec.Code, rec.Body.String())
  62. }
  63. getReq := httptest.NewRequest(http.MethodGet, "/config", nil)
  64. getRec := httptest.NewRecorder()
  65. srv.Handler().ServeHTTP(getRec, getReq)
  66. if getRec.Code != http.StatusOK {
  67. t.Fatalf("unexpected status: %d", getRec.Code)
  68. }
  69. }