Require optimistic behaviour to pass srcaddr_selection_test

Change-Id: I612a8e1427d976c154529540b89b9db3da2b25d5
diff --git a/net/test/srcaddr_selection_test.py b/net/test/srcaddr_selection_test.py
index eb09b7f..0781b2d 100755
--- a/net/test/srcaddr_selection_test.py
+++ b/net/test/srcaddr_selection_test.py
@@ -34,11 +34,6 @@
 IPV6_PREFER_SRC_PUBLIC = 0x0002
 
 
-USE_OPTIMISTIC_SYSCTL = "/proc/sys/net/ipv6/conf/default/use_optimistic"
-
-HAVE_USE_OPTIMISTIC = os.path.isfile(USE_OPTIMISTIC_SYSCTL)
-
-
 class IPv6SourceAddressSelectionTest(multinetwork_base.MultiNetworkBaseTest):
 
   def SetDAD(self, ifname, value):
@@ -123,20 +118,22 @@
       self.SetDAD(self.GetInterfaceName(netid), 0)
       self.SetOptimisticDAD(self.GetInterfaceName(netid), 0)
       self.SetUseTempaddrs(self.GetInterfaceName(netid), 0)
-      if HAVE_USE_OPTIMISTIC:
-        self.SetUseOptimistic(self.GetInterfaceName(netid), 0)
+      self.SetUseOptimistic(self.GetInterfaceName(netid), 0)
 
     # [1]  Pick an interface on which to test.
     self.test_netid = random.choice(self.tuns.keys())
     self.test_ip = self.MyAddress(6, self.test_netid)
     self.test_ifindex = self.ifindices[self.test_netid]
     self.test_ifname = self.GetInterfaceName(self.test_netid)
+    self.test_lladdr = net_test.GetLinkAddress(self.test_ifname, True)
 
     # [2]  Delete the test interface's IPv6 address.
     self.iproute.DelAddress(self.test_ip, 64, self.test_ifindex)
     self.assertAddressNotPresent(self.test_ip)
 
     self.assertAddressNotUsable(self.test_ip, self.test_netid)
+    # Verify that the link-local address is not tentative.
+    self.assertFalse(self.AddressIsTentative(self.test_lladdr));
 
 
 class TentativeAddressTest(MultiInterfaceSourceAddressSelectionTest):
@@ -194,7 +191,6 @@
 
 class OptimisticAddressOkayTest(MultiInterfaceSourceAddressSelectionTest):
 
-  @unittest.skipUnless(HAVE_USE_OPTIMISTIC, "use_optimistic not supported")
   def testModifiedRfc6724Behaviour(self):
     # [3]  Get an IPv6 address back, in optimistic DAD start-up.
     self.SetDAD(self.test_ifname, 1)  # Enable DAD
@@ -214,7 +210,6 @@
 
 class ValidBeforeOptimisticTest(MultiInterfaceSourceAddressSelectionTest):
 
-  @unittest.skipUnless(HAVE_USE_OPTIMISTIC, "use_optimistic not supported")
   def testModifiedRfc6724Behaviour(self):
     # [3]  Add a valid IPv6 address to this interface and verify it is
     # selected as the source address.
@@ -243,7 +238,6 @@
 
 class DadFailureTest(MultiInterfaceSourceAddressSelectionTest):
 
-  @unittest.skipUnless(HAVE_USE_OPTIMISTIC, "use_optimistic not supported")
   def testDadFailure(self):
     # [3]  Get an IPv6 address back, in optimistic DAD start-up.
     self.SetDAD(self.test_ifname, 1)  # Enable DAD
@@ -275,9 +269,6 @@
 
 class NoNsFromOptimisticTest(MultiInterfaceSourceAddressSelectionTest):
 
-  @unittest.skipUnless(HAVE_USE_OPTIMISTIC, "use_optimistic not supported")
-  @unittest.skipUnless(net_test.LinuxVersion() >= (3, 18, 0),
-                       "correct optimistic bind() not supported")
   def testSendToOnlinkDestination(self):
     # [3]  Get an IPv6 address back, in optimistic DAD start-up.
     self.SetDAD(self.test_ifname, 1)  # Enable DAD
@@ -297,11 +288,14 @@
     onlink_dest = self.GetRandomDestination(self.IPv6Prefix(self.test_netid))
     self.SendWithSourceAddress(self.test_ip, self.test_netid, onlink_dest)
 
-    expected_ns = multinetwork_test.Packets.NS(
-        net_test.GetLinkAddress(self.test_ifname, True),
-        onlink_dest,
-        self.MyMacAddress(self.test_netid))[1]
-    self.ExpectPacketOn(self.test_netid, "link-local NS", expected_ns)
+    if net_test.LinuxVersion() >= (3, 18, 0):
+      # Older versions will actually choose the optimistic address to
+      # originate Neighbor Solications (RFC violation).
+      expected_ns = multinetwork_test.Packets.NS(
+          self.test_lladdr,
+          onlink_dest,
+          self.MyMacAddress(self.test_netid))[1]
+      self.ExpectPacketOn(self.test_netid, "link-local NS", expected_ns)
 
 
 # TODO(ek): add tests listening for netlink events.