summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorLorenzo Colitti <lorenzo@google.com>2016-01-21 12:02:27 +0900
committerLorenzo Colitti <lorenzo@google.com>2016-01-25 17:06:08 +0900
commit67e7828e5f236f00572bd1747419419e135ca267 (patch)
tree8382c3e29a643e872d549f58d47c33290c91869c /tests
parent9bffc5397e0750ea4d3e439e220bd922d2a05a9b (diff)
downloadextras-67e7828e5f236f00572bd1747419419e135ca267.tar.gz
Teach more sock_diag code and tests about mapped sockets.
Change-Id: Ife74d135f4af33ccebe10ce7d42d4b43e37f9523
Diffstat (limited to 'tests')
-rw-r--r--tests/net_test/multinetwork_base.py5
-rwxr-xr-xtests/net_test/sock_diag_test.py51
2 files changed, 33 insertions, 23 deletions
diff --git a/tests/net_test/multinetwork_base.py b/tests/net_test/multinetwork_base.py
index c178bdd9..31fcc4c6 100644
--- a/tests/net_test/multinetwork_base.py
+++ b/tests/net_test/multinetwork_base.py
@@ -188,6 +188,7 @@ class MultiNetworkBaseTest(net_test.NetworkTest):
@classmethod
def MyAddress(cls, version, netid):
return {4: cls._MyIPv4Address(netid),
+ 5: "::ffff:" + cls._MyIPv4Address(netid),
6: cls._MyIPv6Address(netid)}[version]
@classmethod
@@ -428,7 +429,9 @@ class MultiNetworkBaseTest(net_test.NetworkTest):
s.setsockopt(net_test.SOL_IPV6, IPV6_UNICAST_IF, ifindex)
def GetRemoteAddress(self, version):
- return {4: self.IPV4_ADDR, 6: self.IPV6_ADDR}[version]
+ return {4: self.IPV4_ADDR,
+ 5: "::ffff:" + self.IPV4_ADDR,
+ 6: self.IPV6_ADDR}[version]
def SelectInterface(self, s, netid, mode):
if mode == "uid":
diff --git a/tests/net_test/sock_diag_test.py b/tests/net_test/sock_diag_test.py
index 35301a72..20cc4ca1 100755
--- a/tests/net_test/sock_diag_test.py
+++ b/tests/net_test/sock_diag_test.py
@@ -30,7 +30,7 @@ import sock_diag
import threading
-NUM_SOCKETS = 100
+NUM_SOCKETS = 30
NO_BYTECODE = ""
# TODO: Backport SOCK_DESTROY and delete this.
@@ -44,7 +44,10 @@ class SockDiagBaseTest(multinetwork_base.MultiNetworkBaseTest):
# Dict mapping (addr, sport, dport) tuples to socketpairs.
socketpairs = {}
for i in xrange(NUM_SOCKETS):
- family, addr = random.choice([(AF_INET, "127.0.0.1"), (AF_INET6, "::1")])
+ family, addr = random.choice([
+ (AF_INET, "127.0.0.1"),
+ (AF_INET6, "::1"),
+ (AF_INET6, "::ffff:127.0.0.1")])
socketpair = net_test.CreateSocketPair(family, SOCK_STREAM, addr)
sport, dport = (socketpair[0].getsockname()[1],
socketpair[1].getsockname()[1])
@@ -88,6 +91,21 @@ class SockDiagTest(SockDiagBaseTest):
else:
assertRaisesErrno(ENOTCONN, s.getpeername)
+ def testFindsMappedSockets(self):
+ """Tests that inet_diag_find_one_icsk can find mapped sockets.
+
+ Relevant kernel commits:
+ android-3.10:
+ f77e059 net: diag: support v4mapped sockets in inet_diag_find_one_icsk()
+ """
+ socketpair = net_test.CreateSocketPair(AF_INET6, SOCK_STREAM,
+ "::ffff:127.0.0.1")
+ for sock in socketpair:
+ diag_msg = self.sock_diag.FindSockDiagFromFd(sock)
+ diag_req = self.sock_diag.DiagReqFromDiagMsg(diag_msg, IPPROTO_TCP)
+ self.sock_diag.GetSockDiag(diag_req)
+ # No errors? Good.
+
def testFindsAllMySockets(self):
"""Tests that basic socket dumping works.
@@ -311,8 +329,8 @@ class TcpTest(SockDiagBaseTest):
def OpenListenSocket(self, version):
self.port = packets.RandomPort()
- family = {4: AF_INET, 6: AF_INET6}[version]
- address = {4: "0.0.0.0", 6: "::"}[version]
+ family = {4: AF_INET, 5: AF_INET6, 6: AF_INET6}[version]
+ address = {4: "0.0.0.0", 5: "::", 6: "::"}[version]
s = net_test.Socket(family, SOCK_STREAM, IPPROTO_TCP)
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
s.bind((address, self.port))
@@ -336,25 +354,14 @@ class TcpTest(SockDiagBaseTest):
self.last_packet)
def IncomingConnection(self, version, end_state, netid):
- if version == 5:
- mapped = True
- socket_version = 6
- version = 4
- else:
- socket_version = version
- mapped = False
-
- self.version = version
- self.s = self.OpenListenSocket(socket_version)
+ self.s = self.OpenListenSocket(version)
self.end_state = end_state
- def MaybeMappedAddress(addr):
- return "::ffff:%s" % addr if mapped else addr
+ remoteaddr = self.remoteaddr = self.GetRemoteAddress(version)
+ myaddr = self.myaddr = self.MyAddress(version, netid)
- remoteaddr = self.remoteaddr = MaybeMappedAddress(
- self.GetRemoteAddress(version))
- myaddr = self.myaddr = MaybeMappedAddress(
- self.MyAddress(version, netid))
+ if version == 5: version = 4
+ self.version = version
if end_state == sock_diag.TCP_LISTEN:
return
@@ -420,7 +427,7 @@ class TcpTest(SockDiagBaseTest):
sock.close()
def CheckTcpReset(self, state, statename):
- for version in [4, 6]:
+ for version in [4, 5, 6]:
msg = "Closing incoming IPv%d %s socket" % (version, statename)
self.IncomingConnection(version, state, self.netid)
self.CheckRstOnClose(self.s, None, False, msg)
@@ -446,7 +453,7 @@ class TcpTest(SockDiagBaseTest):
for d, _ in children]
def CheckChildSocket(self, state, statename, parent_first):
- for version in [4, 6]:
+ for version in [4, 5, 6]:
self.IncomingConnection(version, state, self.netid)
d = self.sock_diag.FindSockDiagFromFd(self.s)