Browse Source

tests: Additional P2P SD coverage

This adds P2P_SERV_DISC_REQ, P2P_SERVICE_ADD, and P2P_SERVICE_DEL error
cases and P2P_SERVICE_FLUSH and P2P_SERC_DISC_EXTERNAL testing.

Signed-off-by: Jouni Malinen <j@w1.fi>
Jouni Malinen 10 years ago
parent
commit
c703a1da70
1 changed files with 137 additions and 1 deletions
  1. 137 1
      tests/hwsim/test_p2p_service.py

+ 137 - 1
tests/hwsim/test_p2p_service.py

@@ -88,13 +88,23 @@ def run_sd(dev, dst, query, exp_query=None, fragment=False, query2=None):
 
 def test_p2p_service_discovery(dev):
     """P2P service discovery"""
-    for dst in [ "00:00:00:00:00:00", dev[0].p2p_dev_addr() ]:
+    addr0 = dev[0].p2p_dev_addr()
+    for dst in [ "00:00:00:00:00:00", addr0 ]:
         ev = run_sd(dev, dst, "02000001")
         if "0b5f6166706f766572746370c00c000c01" not in ev:
             raise Exception("Unexpected service discovery response contents (Bonjour)")
         if "496e7465726e6574" not in ev:
             raise Exception("Unexpected service discovery response contents (UPnP)")
 
+    for req in [ "foo 02000001",
+                 addr0,
+                 addr0 + " upnp qq urn:schemas-upnp-org:device:InternetGatewayDevice:1",
+                 addr0 + " upnp 10",
+                 addr0 + " 123",
+                 addr0 + " qq" ]:
+        if "FAIL" not in dev[1].request("P2P_SERV_DISC_REQ " + req):
+            raise Exception("Invalid P2P_SERV_DISC_REQ accepted: " + req)
+
 def test_p2p_service_discovery2(dev):
     """P2P service discovery with one peer having no services"""
     dev[2].p2p_listen()
@@ -233,6 +243,8 @@ def test_p2p_service_discovery_req_cancel(dev):
     """Cancel a P2P service discovery request"""
     if "FAIL" not in dev[0].request("P2P_SERV_DISC_CANCEL_REQ ab"):
         raise Exception("Unexpected SD cancel success")
+    if "FAIL" not in dev[0].request("P2P_SERV_DISC_CANCEL_REQ qq"):
+        raise Exception("Unexpected SD cancel success")
     query = dev[0].request("P2P_SERV_DISC_REQ " + dev[1].p2p_dev_addr() + " 02000001")
     if "OK" not in dev[0].request("P2P_SERV_DISC_CANCEL_REQ " + query):
         raise Exception("Unexpected SD cancel failure")
@@ -280,3 +292,127 @@ def test_p2p_service_discovery_go(dev):
         raise Exception("Unexpected service discovery response contents (Bonjour)")
     if "496e7465726e6574" not in ev:
         raise Exception("Unexpected service discovery response contents (UPnP)")
+    dev[1].p2p_stop_find()
+
+    dev[0].request("P2P_SERVICE_FLUSH")
+
+    dev[1].request("P2P_FLUSH")
+    dev[1].request("P2P_SERV_DISC_REQ " + addr0 + " 02000001")
+    if not dev[1].discover_peer(addr0, social=True, force_find=True):
+        raise Exception("Peer " + addr0 + " not found")
+    ev = dev[0].wait_event(["P2P-SERV-DISC-REQ"], timeout=10)
+    if ev is None:
+        raise Exception("Service discovery timed out")
+    if addr1 not in ev:
+        raise Exception("Unexpected service discovery request source")
+
+    ev = dev[1].wait_event(["P2P-SERV-DISC-RESP"], timeout=10)
+    if ev is None:
+        raise Exception("Service discovery timed out")
+    if addr0 not in ev:
+        raise Exception("Unexpected service discovery response source")
+    if "0300000101" not in ev:
+        raise Exception("Unexpected service discovery response contents (Bonjour)")
+    dev[1].p2p_stop_find()
+
+def _test_p2p_service_discovery_external(dev):
+    addr0 = dev[0].p2p_dev_addr()
+    addr1 = dev[1].p2p_dev_addr()
+
+    if "FAIL" not in dev[0].request("P2P_SERV_DISC_EXTERNAL 2"):
+        raise Exception("Invalid P2P_SERV_DISC_EXTERNAL accepted")
+    if "OK" not in dev[0].request("P2P_SERV_DISC_EXTERNAL 1"):
+        raise Exception("P2P_SERV_DISC_EXTERNAL failed")
+    dev[0].p2p_listen()
+    dev[1].request("P2P_FLUSH")
+    dev[1].request("P2P_SERV_DISC_REQ " + addr0 + " 02000001")
+    if not dev[1].discover_peer(addr0, social=True, force_find=True):
+        raise Exception("Peer " + addr0 + " not found")
+
+    ev = dev[0].wait_global_event(["P2P-SERV-DISC-REQ"], timeout=10)
+    if ev is None:
+        raise Exception("Service discovery timed out")
+    if addr1 not in ev:
+        raise Exception("Unexpected service discovery request source")
+    arg = ev.split(' ')
+    resp = "0300000101"
+    if "OK" not in dev[0].global_request("P2P_SERV_DISC_RESP %s %s %s %s" % (arg[2], arg[3], arg[4], resp)):
+        raise Exception("P2P_SERV_DISC_RESP failed")
+
+    ev = dev[1].wait_global_event(["P2P-SERV-DISC-RESP"], timeout=15)
+    if ev is None:
+        raise Exception("Service discovery timed out")
+    if addr0 not in ev:
+        raise Exception("Unexpected address in SD Response: " + ev)
+    if ev.split(' ')[4] != resp:
+        raise Exception("Unexpected response data SD Response: " + ev)
+    ver = ev.split(' ')[3]
+
+    dev[0].request("P2P_SERVICE_UPDATE")
+
+    dev[1].request("P2P_FLUSH")
+    dev[1].request("P2P_SERV_DISC_REQ " + addr0 + " 02000001")
+    if not dev[1].discover_peer(addr0, social=True, force_find=True):
+        raise Exception("Peer " + addr0 + " not found")
+
+    ev = dev[0].wait_global_event(["P2P-SERV-DISC-REQ"], timeout=10)
+    if ev is None:
+        raise Exception("Service discovery timed out")
+    if addr1 not in ev:
+        raise Exception("Unexpected service discovery request source")
+    arg = ev.split(' ')
+    resp = "0300000101"
+    if "OK" not in dev[0].global_request("P2P_SERV_DISC_RESP %s %s %s %s" % (arg[2], arg[3], arg[4], resp)):
+        raise Exception("P2P_SERV_DISC_RESP failed")
+
+    ev = dev[1].wait_global_event(["P2P-SERV-DISC-RESP"], timeout=15)
+    if ev is None:
+        raise Exception("Service discovery timed out")
+    if addr0 not in ev:
+        raise Exception("Unexpected address in SD Response: " + ev)
+    if ev.split(' ')[4] != resp:
+        raise Exception("Unexpected response data SD Response: " + ev)
+    ver2 = ev.split(' ')[3]
+    if ver == ver2:
+        raise Exception("Service list version did not change")
+
+    for cmd in [ "%s%s%s%s" % (arg[2], arg[3], arg[4], resp),
+                 "%s %s %s %s" % ("0", arg[3], arg[4], resp),
+                 "%s %s %s %s" % (arg[2], "foo", arg[4], resp),
+                 "%s %s%s%s" % (arg[2], arg[3], arg[4], resp),
+                 "%s %s %s%s" % (arg[2], arg[3], arg[4], resp),
+                 "%s %s %s %s" % (arg[2], arg[3], arg[4], "12345"),
+                 "%s %s %s %s" % (arg[2], arg[3], arg[4], "qq") ]:
+        if "FAIL" not in dev[0].global_request("P2P_SERV_DISC_RESP " + cmd):
+            raise Exception("Invalid P2P_SERV_DISC_RESP accepted: " + cmd)
+
+def test_p2p_service_discovery_external(dev):
+    """P2P service discovery using external response"""
+    try:
+        _test_p2p_service_discovery_external(dev)
+    finally:
+        dev[0].request("P2P_SERV_DISC_EXTERNAL 0")
+
+def test_p2p_service_discovery_invalid_commands(dev):
+    """P2P service discovery invalid commands"""
+    for cmd in [ "bonjour",
+                 "bonjour 12",
+                 "bonjour 123 12",
+                 "bonjour qq 12",
+                 "bonjour 12 123",
+                 "bonjour 12 qq",
+                 "upnp 10",
+                 "upnp qq uuid:",
+                 "foo bar" ]:
+        if "FAIL" not in dev[0].request("P2P_SERVICE_ADD " + cmd):
+            raise Exception("Invalid P2P_SERVICE_ADD accepted: " + cmd)
+
+    for cmd in [ "bonjour",
+                 "bonjour 123",
+                 "bonjour qq",
+                 "upnp 10",
+                 "upnp  ",
+                 "upnp qq uuid:",
+                 "foo bar" ]:
+        if "FAIL" not in dev[0].request("P2P_SERVICE_DEL " + cmd):
+            raise Exception("Invalid P2P_SERVICE_DEL accepted: " + cmd)