Merge 73a25c640038e55af64bb2efa87f7dd21f1aa20b on remote branch

Change-Id: I918be6fe7eca0932b0dc74b1c5d3b4ae42862985
diff --git a/net/test/all_tests.py b/net/test/all_tests.py
index bbef3ac..38c4eac 100755
--- a/net/test/all_tests.py
+++ b/net/test/all_tests.py
@@ -54,7 +54,14 @@
       sys.modules[name].InjectTests()
 
   loader = unittest.defaultTestLoader
-  test_suite = loader.loadTestsFromNames(test_modules)
+  if len(sys.argv) > 1:
+    test_suite = loader.loadTestsFromNames(sys.argv[1:])
+  else:
+    test_suite = loader.loadTestsFromNames(test_modules)
+
+  assert test_suite.countTestCases() > 0, (
+      "Inconceivable: no tests found! Command line: %s" % " ".join(sys.argv))
+
   runner = unittest.TextTestRunner(verbosity=2)
   result = runner.run(test_suite)
   sys.exit(not result.wasSuccessful())
diff --git a/net/test/run_net_test.sh b/net/test/run_net_test.sh
index ebfb15f..d1a66f5 100755
--- a/net/test/run_net_test.sh
+++ b/net/test/run_net_test.sh
@@ -178,16 +178,17 @@
 test_args=${@:2}
 
 function isRunningTest() {
-  [[ -n "$test" ]] && ! (( norun ))
+  ! (( norun ))
 }
 
 function isBuildOnly() {
-  [[ -z "$test" ]] && (( norun )) && ! (( nobuild ))
+  (( norun )) && ! (( nobuild ))
 }
 
 if ! isRunningTest && ! isBuildOnly; then
   echo "Usage:" >&2
-  echo "  $0 [--builder] [--readonly|--ro|--readwrite|--rw] [--nobuild] [--verbose] <test>" >&2
+  echo "  $0 [--builder] [--readonly|--ro|--readwrite|--rw] [--nobuild] [--verbose] [<test>]" >&2
+  echo "      - if [<test>] is not specified, run all_tests.sh" >&2
   echo "  $0 --norun" >&2
   exit 1
 fi
diff --git a/net/test/srcaddr_selection_test.py b/net/test/srcaddr_selection_test.py
index 45a8140..e57ce16 100755
--- a/net/test/srcaddr_selection_test.py
+++ b/net/test/srcaddr_selection_test.py
@@ -72,6 +72,9 @@
   def SetUseOptimistic(self, ifname, value):
     self.SetSysctl("/proc/sys/net/ipv6/conf/%s/use_optimistic" % ifname, value)
 
+  def SetForwarding(self, value):
+    self.SetSysctl("/proc/sys/net/ipv6/conf/all/forwarding", value)
+
   def GetSourceIP(self, netid, mode="mark"):
     s = self.BuildSocket(6, net_test.UDPSocket, netid, mode)
     # Because why not...testing for temporary addresses is a separate thing.
@@ -163,6 +166,12 @@
     # link-local address is generated.
     self.WaitForDad(self.test_lladdr)
 
+    # Disable forwarding, because optimistic addresses don't work when
+    # forwarding is on. Forwarding will be re-enabled when the sysctls are
+    # restored by MultiNetworkBaseTest.tearDownClass.
+    # TODO: Fix this and remove this hack.
+    self.SetForwarding("0")
+
 
 class TentativeAddressTest(MultiInterfaceSourceAddressSelectionTest):