test_p2p_service.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #!/usr/bin/python
  2. #
  3. # P2P service discovery test cases
  4. # Copyright (c) 2013, Jouni Malinen <j@w1.fi>
  5. #
  6. # This software may be distributed under the terms of the BSD license.
  7. # See README for more details.
  8. import logging
  9. logger = logging.getLogger()
  10. import hwsim_utils
  11. def add_bonjour_services(dev):
  12. dev.request("P2P_SERVICE_ADD bonjour 0b5f6166706f766572746370c00c000c01 074578616d706c65c027")
  13. dev.request("P2P_SERVICE_ADD bonjour 076578616d706c650b5f6166706f766572746370c00c001001 00")
  14. dev.request("P2P_SERVICE_ADD bonjour 045f697070c00c000c01 094d795072696e746572c027")
  15. dev.request("P2P_SERVICE_ADD bonjour 096d797072696e746572045f697070c00c001001 09747874766572733d311a70646c3d6170706c69636174696f6e2f706f7374736372797074")
  16. def add_upnp_services(dev):
  17. dev.request("P2P_SERVICE_ADD upnp 10 uuid:6859dede-8574-59ab-9332-123456789012::upnp:rootdevice")
  18. dev.request("P2P_SERVICE_ADD upnp 10 uuid:5566d33e-9774-09ab-4822-333456785632::upnp:rootdevice")
  19. dev.request("P2P_SERVICE_ADD upnp 10 uuid:1122de4e-8574-59ab-9322-333456789044::urn:schemas-upnp-org:service:ContentDirectory:2")
  20. dev.request("P2P_SERVICE_ADD upnp 10 uuid:5566d33e-9774-09ab-4822-333456785632::urn:schemas-upnp-org:service:ContentDirectory:2")
  21. dev.request("P2P_SERVICE_ADD upnp 10 uuid:6859dede-8574-59ab-9332-123456789012::urn:schemas-upnp-org:device:InternetGatewayDevice:1")
  22. def run_sd(dev, dst, query, exp_query=None):
  23. addr0 = dev[0].p2p_dev_addr()
  24. addr1 = dev[1].p2p_dev_addr()
  25. add_bonjour_services(dev[0])
  26. add_upnp_services(dev[0])
  27. dev[0].p2p_listen()
  28. dev[1].request("P2P_FLUSH")
  29. dev[1].request("P2P_SERV_DISC_REQ " + dst + " " + query)
  30. if not dev[1].discover_peer(addr0, social=True):
  31. raise Exception("Peer " + addr0 + " not found")
  32. ev = dev[0].wait_event(["P2P-SERV-DISC-REQ"], timeout=10)
  33. if ev is None:
  34. raise Exception("Service discovery timed out")
  35. if addr1 not in ev:
  36. raise Exception("Unexpected service discovery request source")
  37. if exp_query is None:
  38. exp_query = query
  39. if exp_query not in ev:
  40. raise Exception("Unexpected service discovery request contents")
  41. ev = dev[1].wait_event(["P2P-SERV-DISC-RESP"], timeout=10)
  42. if ev is None:
  43. raise Exception("Service discovery timed out")
  44. if addr0 not in ev:
  45. raise Exception("Unexpected service discovery response source")
  46. return ev
  47. def test_p2p_service_discovery(dev):
  48. """P2P service discovery"""
  49. ev = run_sd(dev, "00:00:00:00:00:00", "02000001")
  50. if "0b5f6166706f766572746370c00c000c01" not in ev:
  51. raise Exception("Unexpected service discovery response contents (Bonjour)")
  52. if "496e7465726e6574" not in ev:
  53. raise Exception("Unexpected service discovery response contents (UPnP)")
  54. def test_p2p_service_discovery_bonjour(dev):
  55. """P2P service discovery (Bonjour)"""
  56. ev = run_sd(dev, "00:00:00:00:00:00", "02000101")
  57. if "0b5f6166706f766572746370c00c000c01" not in ev:
  58. raise Exception("Unexpected service discovery response contents (Bonjour)")
  59. if "045f697070c00c000c01" not in ev:
  60. raise Exception("Unexpected service discovery response contents (Bonjour)")
  61. if "496e7465726e6574" in ev:
  62. raise Exception("Unexpected service discovery response contents (UPnP not expected)")
  63. def test_p2p_service_discovery_bonjour2(dev):
  64. """P2P service discovery (Bonjour AFS)"""
  65. ev = run_sd(dev, "00:00:00:00:00:00", "130001010b5f6166706f766572746370c00c000c01")
  66. if "0b5f6166706f766572746370c00c000c01" not in ev:
  67. raise Exception("Unexpected service discovery response contents (Bonjour)")
  68. if "045f697070c00c000c01" in ev:
  69. raise Exception("Unexpected service discovery response contents (Bonjour mismatching)")
  70. if "496e7465726e6574" in ev:
  71. raise Exception("Unexpected service discovery response contents (UPnP not expected)")
  72. def test_p2p_service_discovery_upnp(dev):
  73. """P2P service discovery (UPnP)"""
  74. ev = run_sd(dev, "00:00:00:00:00:00", "02000201")
  75. if "0b5f6166706f766572746370c00c000c01" in ev:
  76. raise Exception("Unexpected service discovery response contents (Bonjour not expected)")
  77. if "496e7465726e6574" not in ev:
  78. raise Exception("Unexpected service discovery response contents (UPnP)")
  79. def test_p2p_service_discovery_upnp2(dev):
  80. """P2P service discovery (UPnP using request helper)"""
  81. ev = run_sd(dev, "00:00:00:00:00:00", "upnp 10 ssdp:all", "0b00020110737364703a616c6c")
  82. if "0b5f6166706f766572746370c00c000c01" in ev:
  83. raise Exception("Unexpected service discovery response contents (Bonjour not expected)")
  84. if "496e7465726e6574" not in ev:
  85. raise Exception("Unexpected service discovery response contents (UPnP)")
  86. def test_p2p_service_discovery_ws(dev):
  87. """P2P service discovery (WS-Discovery)"""
  88. ev = run_sd(dev, "00:00:00:00:00:00", "02000301")
  89. if "0b5f6166706f766572746370c00c000c01" in ev:
  90. raise Exception("Unexpected service discovery response contents (Bonjour not expected)")
  91. if "496e7465726e6574" in ev:
  92. raise Exception("Unexpected service discovery response contents (UPnP not expected)")
  93. if "0300030101" not in ev:
  94. raise Exception("Unexpected service discovery response contents (WS)")