test_adb_parser.c 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. #include "common.h"
  2. #include <assert.h>
  3. #include "adb/adb_device.h"
  4. #include "adb/adb_parser.h"
  5. static void test_adb_devices(void) {
  6. char output[] =
  7. "List of devices attached\n"
  8. "0123456789abcdef device usb:2-1 product:MyProduct model:MyModel "
  9. "device:MyDevice transport_id:1\n"
  10. "192.168.1.1:5555 device product:MyWifiProduct model:MyWifiModel "
  11. "device:MyWifiDevice trandport_id:2\n";
  12. struct sc_vec_adb_devices vec = SC_VECTOR_INITIALIZER;
  13. bool ok = sc_adb_parse_devices(output, &vec);
  14. assert(ok);
  15. assert(vec.size == 2);
  16. struct sc_adb_device *device = &vec.data[0];
  17. assert(!strcmp("0123456789abcdef", device->serial));
  18. assert(!strcmp("device", device->state));
  19. assert(!strcmp("MyModel", device->model));
  20. device = &vec.data[1];
  21. assert(!strcmp("192.168.1.1:5555", device->serial));
  22. assert(!strcmp("device", device->state));
  23. assert(!strcmp("MyWifiModel", device->model));
  24. sc_adb_devices_destroy(&vec);
  25. }
  26. static void test_adb_devices_cr(void) {
  27. char output[] =
  28. "List of devices attached\r\n"
  29. "0123456789abcdef device usb:2-1 product:MyProduct model:MyModel "
  30. "device:MyDevice transport_id:1\r\n"
  31. "192.168.1.1:5555 device product:MyWifiProduct model:MyWifiModel "
  32. "device:MyWifiDevice trandport_id:2\r\n";
  33. struct sc_vec_adb_devices vec = SC_VECTOR_INITIALIZER;
  34. bool ok = sc_adb_parse_devices(output, &vec);
  35. assert(ok);
  36. assert(vec.size == 2);
  37. struct sc_adb_device *device = &vec.data[0];
  38. assert(!strcmp("0123456789abcdef", device->serial));
  39. assert(!strcmp("device", device->state));
  40. assert(!strcmp("MyModel", device->model));
  41. device = &vec.data[1];
  42. assert(!strcmp("192.168.1.1:5555", device->serial));
  43. assert(!strcmp("device", device->state));
  44. assert(!strcmp("MyWifiModel", device->model));
  45. sc_adb_devices_destroy(&vec);
  46. }
  47. static void test_adb_devices_daemon_start(void) {
  48. char output[] =
  49. "* daemon not running; starting now at tcp:5037\n"
  50. "* daemon started successfully\n"
  51. "List of devices attached\n"
  52. "0123456789abcdef device usb:2-1 product:MyProduct model:MyModel "
  53. "device:MyDevice transport_id:1\n";
  54. struct sc_vec_adb_devices vec = SC_VECTOR_INITIALIZER;
  55. bool ok = sc_adb_parse_devices(output, &vec);
  56. assert(ok);
  57. assert(vec.size == 1);
  58. struct sc_adb_device *device = &vec.data[0];
  59. assert(!strcmp("0123456789abcdef", device->serial));
  60. assert(!strcmp("device", device->state));
  61. assert(!strcmp("MyModel", device->model));
  62. sc_adb_devices_destroy(&vec);
  63. }
  64. static void test_adb_devices_daemon_start_mixed(void) {
  65. char output[] =
  66. "List of devices attached\n"
  67. "adb server version (41) doesn't match this client (39); killing...\n"
  68. "* daemon started successfully *\n"
  69. "0123456789abcdef unauthorized usb:1-1\n"
  70. "87654321 device usb:2-1 product:MyProduct model:MyModel "
  71. "device:MyDevice\n";
  72. struct sc_vec_adb_devices vec = SC_VECTOR_INITIALIZER;
  73. bool ok = sc_adb_parse_devices(output, &vec);
  74. assert(ok);
  75. assert(vec.size == 2);
  76. struct sc_adb_device *device = &vec.data[0];
  77. assert(!strcmp("0123456789abcdef", device->serial));
  78. assert(!strcmp("unauthorized", device->state));
  79. assert(!device->model);
  80. device = &vec.data[1];
  81. assert(!strcmp("87654321", device->serial));
  82. assert(!strcmp("device", device->state));
  83. assert(!strcmp("MyModel", device->model));
  84. sc_adb_devices_destroy(&vec);
  85. }
  86. static void test_adb_devices_without_eol(void) {
  87. char output[] =
  88. "List of devices attached\n"
  89. "0123456789abcdef device usb:2-1 product:MyProduct model:MyModel "
  90. "device:MyDevice transport_id:1";
  91. struct sc_vec_adb_devices vec = SC_VECTOR_INITIALIZER;
  92. bool ok = sc_adb_parse_devices(output, &vec);
  93. assert(ok);
  94. assert(vec.size == 1);
  95. struct sc_adb_device *device = &vec.data[0];
  96. assert(!strcmp("0123456789abcdef", device->serial));
  97. assert(!strcmp("device", device->state));
  98. assert(!strcmp("MyModel", device->model));
  99. sc_adb_devices_destroy(&vec);
  100. }
  101. static void test_adb_devices_without_header(void) {
  102. char output[] =
  103. "0123456789abcdef device usb:2-1 product:MyProduct model:MyModel "
  104. "device:MyDevice transport_id:1\n";
  105. struct sc_vec_adb_devices vec = SC_VECTOR_INITIALIZER;
  106. bool ok = sc_adb_parse_devices(output, &vec);
  107. assert(!ok);
  108. }
  109. static void test_adb_devices_corrupted(void) {
  110. char output[] =
  111. "List of devices attached\n"
  112. "corrupted_garbage\n";
  113. struct sc_vec_adb_devices vec = SC_VECTOR_INITIALIZER;
  114. bool ok = sc_adb_parse_devices(output, &vec);
  115. assert(ok);
  116. assert(vec.size == 0);
  117. }
  118. static void test_adb_devices_spaces(void) {
  119. char output[] =
  120. "List of devices attached\n"
  121. "0123456789abcdef unauthorized usb:1-4 transport_id:3\n";
  122. struct sc_vec_adb_devices vec = SC_VECTOR_INITIALIZER;
  123. bool ok = sc_adb_parse_devices(output, &vec);
  124. assert(ok);
  125. assert(vec.size == 1);
  126. struct sc_adb_device *device = &vec.data[0];
  127. assert(!strcmp("0123456789abcdef", device->serial));
  128. assert(!strcmp("unauthorized", device->state));
  129. assert(!device->model);
  130. sc_adb_devices_destroy(&vec);
  131. }
  132. static void test_get_ip_single_line(void) {
  133. char ip_route[] = "192.168.1.0/24 dev wlan0 proto kernel scope link src "
  134. "192.168.12.34\r\r\n";
  135. char *ip = sc_adb_parse_device_ip(ip_route);
  136. assert(ip);
  137. assert(!strcmp(ip, "192.168.12.34"));
  138. free(ip);
  139. }
  140. static void test_get_ip_single_line_without_eol(void) {
  141. char ip_route[] = "192.168.1.0/24 dev wlan0 proto kernel scope link src "
  142. "192.168.12.34";
  143. char *ip = sc_adb_parse_device_ip(ip_route);
  144. assert(ip);
  145. assert(!strcmp(ip, "192.168.12.34"));
  146. free(ip);
  147. }
  148. static void test_get_ip_single_line_with_trailing_space(void) {
  149. char ip_route[] = "192.168.1.0/24 dev wlan0 proto kernel scope link src "
  150. "192.168.12.34 \n";
  151. char *ip = sc_adb_parse_device_ip(ip_route);
  152. assert(ip);
  153. assert(!strcmp(ip, "192.168.12.34"));
  154. free(ip);
  155. }
  156. static void test_get_ip_multiline_first_ok(void) {
  157. char ip_route[] = "192.168.1.0/24 dev wlan0 proto kernel scope link src "
  158. "192.168.1.2\r\n"
  159. "10.0.0.0/24 dev rmnet proto kernel scope link src "
  160. "10.0.0.2\r\n";
  161. char *ip = sc_adb_parse_device_ip(ip_route);
  162. assert(ip);
  163. assert(!strcmp(ip, "192.168.1.2"));
  164. free(ip);
  165. }
  166. static void test_get_ip_multiline_second_ok(void) {
  167. char ip_route[] = "10.0.0.0/24 dev rmnet proto kernel scope link src "
  168. "10.0.0.3\r\n"
  169. "192.168.1.0/24 dev wlan0 proto kernel scope link src "
  170. "192.168.1.3\r\n";
  171. char *ip = sc_adb_parse_device_ip(ip_route);
  172. assert(ip);
  173. assert(!strcmp(ip, "192.168.1.3"));
  174. free(ip);
  175. }
  176. static void test_get_ip_multiline_second_ok_without_cr(void) {
  177. char ip_route[] = "10.0.0.0/24 dev rmnet proto kernel scope link src "
  178. "10.0.0.3\n"
  179. "192.168.1.0/24 dev wlan0 proto kernel scope link src "
  180. "192.168.1.3\n";
  181. char *ip = sc_adb_parse_device_ip(ip_route);
  182. assert(ip);
  183. assert(!strcmp(ip, "192.168.1.3"));
  184. free(ip);
  185. }
  186. static void test_get_ip_no_wlan(void) {
  187. char ip_route[] = "192.168.1.0/24 dev rmnet proto kernel scope link src "
  188. "192.168.12.34\r\r\n";
  189. char *ip = sc_adb_parse_device_ip(ip_route);
  190. assert(!ip);
  191. }
  192. static void test_get_ip_no_wlan_without_eol(void) {
  193. char ip_route[] = "192.168.1.0/24 dev rmnet proto kernel scope link src "
  194. "192.168.12.34";
  195. char *ip = sc_adb_parse_device_ip(ip_route);
  196. assert(!ip);
  197. }
  198. static void test_get_ip_truncated(void) {
  199. char ip_route[] = "192.168.1.0/24 dev rmnet proto kernel scope link src "
  200. "\n";
  201. char *ip = sc_adb_parse_device_ip(ip_route);
  202. assert(!ip);
  203. }
  204. int main(int argc, char *argv[]) {
  205. (void) argc;
  206. (void) argv;
  207. test_adb_devices();
  208. test_adb_devices_cr();
  209. test_adb_devices_daemon_start();
  210. test_adb_devices_daemon_start_mixed();
  211. test_adb_devices_without_eol();
  212. test_adb_devices_without_header();
  213. test_adb_devices_corrupted();
  214. test_adb_devices_spaces();
  215. test_get_ip_single_line();
  216. test_get_ip_single_line_without_eol();
  217. test_get_ip_single_line_with_trailing_space();
  218. test_get_ip_multiline_first_ok();
  219. test_get_ip_multiline_second_ok();
  220. test_get_ip_multiline_second_ok_without_cr();
  221. test_get_ip_no_wlan();
  222. test_get_ip_no_wlan_without_eol();
  223. test_get_ip_truncated();
  224. return 0;
  225. }