data_test.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package device
  2. import (
  3. "context"
  4. "errors"
  5. "testing"
  6. )
  7. func TestSetNetworkATBackendActivatesAndDeactivatesPDP(t *testing.T) {
  8. client := &transcriptClient{steps: []clientStep{
  9. {command: `AT+CGDCONT=1,"IPV4V6","internet"`, response: okResponse()},
  10. {command: "AT+CGATT=1", response: okResponse()},
  11. {command: "AT+CGACT=1,1", response: okResponse()},
  12. {command: "AT+CGACT=0,1", response: okResponse()},
  13. }}
  14. manager, id := newStartedTestManager(t, client)
  15. result, err := manager.SetNetwork(context.Background(), id, NetworkRequest{
  16. Enabled: true, APN: "internet", IPVersion: "IPV4V6",
  17. })
  18. if err != nil {
  19. t.Fatalf("enable network: %v", err)
  20. }
  21. if !result.Enabled || result.Backend != "at" || result.APN != "internet" {
  22. t.Fatalf("enable result = %#v", result)
  23. }
  24. result, err = manager.SetNetwork(context.Background(), id, NetworkRequest{
  25. Enabled: false, APN: "internet", IPVersion: "IP",
  26. })
  27. if err != nil {
  28. t.Fatalf("disable network: %v", err)
  29. }
  30. if result.Enabled {
  31. t.Fatalf("disable result = %#v", result)
  32. }
  33. client.assertDone(t)
  34. }
  35. func TestSetNetworkRejectsUnsafeAPNBeforeOpeningModem(t *testing.T) {
  36. client := &transcriptClient{}
  37. manager, id := newStartedTestManager(t, client)
  38. _, err := manager.SetNetwork(context.Background(), id, NetworkRequest{
  39. Enabled: true, APN: `internet";AT+CFUN=0`, IPVersion: "IP",
  40. })
  41. if !errors.Is(err, ErrInvalidNetworkAPN) {
  42. t.Fatalf("error = %v, want ErrInvalidNetworkAPN", err)
  43. }
  44. client.assertDone(t)
  45. }
  46. func TestUSBNetModeReadAndGuardedWrite(t *testing.T) {
  47. client := &transcriptClient{steps: []clientStep{
  48. {command: `AT+QCFG="usbnet"`, response: okResponse(`+QCFG: "usbnet",0`)},
  49. {command: `AT+QCFG="usbnet",1`, response: okResponse()},
  50. }}
  51. manager, id := newStartedTestManager(t, client)
  52. mode, err := manager.USBNetMode(context.Background(), id)
  53. if err != nil {
  54. t.Fatalf("read USB mode: %v", err)
  55. }
  56. if mode.Mode != 0 || mode.Name != "QMI" {
  57. t.Fatalf("USB mode = %#v", mode)
  58. }
  59. mode, err = manager.SetUSBNetMode(context.Background(), id, 1)
  60. if err != nil {
  61. t.Fatalf("write USB mode: %v", err)
  62. }
  63. if mode.Mode != 1 || mode.Name != "ECM" {
  64. t.Fatalf("new USB mode = %#v", mode)
  65. }
  66. client.assertDone(t)
  67. }
  68. func TestOperatorSelectionManualAndAutomatic(t *testing.T) {
  69. client := &transcriptClient{steps: []clientStep{
  70. {command: `AT+COPS=1,2,"46000",7`, response: okResponse()},
  71. {command: "AT+COPS?", response: okResponse(`+COPS: 1,2,"46000",7`)},
  72. {command: "AT+COPS=0", response: okResponse()},
  73. }}
  74. manager, id := newStartedTestManager(t, client)
  75. act := 7
  76. selection, err := manager.SetOperatorSelection(context.Background(), id, false, "46000", &act)
  77. if err != nil {
  78. t.Fatalf("manual selection: %v", err)
  79. }
  80. if selection.Mode != 1 || selection.Format != 2 || selection.Operator != "46000" || selection.AccessTechnology != "LTE" {
  81. t.Fatalf("manual selection = %#v", selection)
  82. }
  83. selection, err = manager.SetOperatorSelection(context.Background(), id, true, "", nil)
  84. if err != nil {
  85. t.Fatalf("automatic selection: %v", err)
  86. }
  87. if selection.Mode != 0 || selection.Operator != "" {
  88. t.Fatalf("automatic selection = %#v", selection)
  89. }
  90. client.assertDone(t)
  91. }
  92. func TestOperatorSelectionRejectsAutomaticFallbackAsSuccess(t *testing.T) {
  93. client := &transcriptClient{steps: []clientStep{
  94. {command: `AT+COPS=1,2,"46000",7`, response: okResponse()},
  95. {command: "AT+COPS?", response: okResponse("+COPS: 0")},
  96. }}
  97. manager, id := newStartedTestManager(t, client)
  98. act := 7
  99. if _, err := manager.SetOperatorSelection(context.Background(), id, false, "46000", &act); err == nil {
  100. t.Fatal("manual selection must fail when readback returned automatic mode")
  101. }
  102. client.assertDone(t)
  103. }