at_test.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package integration
  2. import (
  3. "context"
  4. "testing"
  5. "vocat/internal/device"
  6. "vocat/internal/modem"
  7. "vocat/internal/store"
  8. )
  9. type fakeATDevices struct {
  10. entries []device.Device
  11. executedID string
  12. sensitiveID string
  13. }
  14. func (devices *fakeATDevices) Get(id string) (device.Device, error) {
  15. for _, entry := range devices.entries {
  16. if entry.ID == id {
  17. return entry, nil
  18. }
  19. }
  20. return device.Device{}, device.ErrNotFound
  21. }
  22. func (devices *fakeATDevices) List() []device.Device {
  23. return append([]device.Device(nil), devices.entries...)
  24. }
  25. func (devices *fakeATDevices) ExecuteAT(
  26. _ context.Context,
  27. id string,
  28. _ string,
  29. ) (modem.Response, error) {
  30. devices.executedID = id
  31. return modem.Response{Final: "OK"}, nil
  32. }
  33. func (devices *fakeATDevices) ExecuteSensitiveAT(
  34. _ context.Context,
  35. id string,
  36. _ string,
  37. ) (modem.Response, error) {
  38. devices.sensitiveID = id
  39. return modem.Response{Final: "OK"}, nil
  40. }
  41. func TestATMapperResolvesConfiguredIDByStableATPath(t *testing.T) {
  42. database := testStore(t)
  43. if err := database.UpsertDevice(context.Background(), store.Device{
  44. ID: "living-room",
  45. Name: "EC20",
  46. ATPort: "/dev/serial/by-id/usb-ec20-if02",
  47. }); err != nil {
  48. t.Fatal(err)
  49. }
  50. devices := &fakeATDevices{entries: []device.Device{{
  51. ID: "usb-1-2",
  52. Discovered: true,
  53. Candidate: modem.Candidate{
  54. ATPort: modem.Port{
  55. Path: "/dev/ttyUSB2",
  56. StablePath: "/dev/serial/by-id/usb-ec20-if02",
  57. },
  58. },
  59. }}}
  60. mapper := ATMapper{Store: database, Devices: devices}
  61. if _, err := mapper.ExecuteAT(
  62. context.Background(),
  63. "living-room",
  64. "AT",
  65. ); err != nil {
  66. t.Fatal(err)
  67. }
  68. if devices.executedID != "usb-1-2" {
  69. t.Fatalf("ExecuteAT physical ID = %q", devices.executedID)
  70. }
  71. if _, err := mapper.ExecuteSensitiveAT(
  72. context.Background(),
  73. "living-room",
  74. "AT+CSIM=1",
  75. ); err != nil {
  76. t.Fatal(err)
  77. }
  78. if devices.sensitiveID != "usb-1-2" {
  79. t.Fatalf("ExecuteSensitiveAT physical ID = %q", devices.sensitiveID)
  80. }
  81. }