| OLD | NEW | 
|   1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |   1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|   2 # Use of this source code is governed by a BSD-style license that can be |   2 # Use of this source code is governed by a BSD-style license that can be | 
|   3 # found in the LICENSE file. |   3 # found in the LICENSE file. | 
|   4  |   4  | 
|   5 import android_commands |   5 import android_commands | 
|   6 import constants |   6 import constants | 
|   7 import logging |   7 import logging | 
|   8 import os |   8 import os | 
|   9 import subprocess |   9 import subprocess | 
|  10 import time |  10 import time | 
|  11  |  11  | 
|  12  |  12  | 
|  13 class FakeDns(object): |  13 class FakeDns(object): | 
|  14   """Wrapper class for the fake_dns tool.""" |  14   """Wrapper class for the fake_dns tool.""" | 
|  15   _FAKE_DNS_PATH = '/data/local/tmp/fake_dns' |  15   _FAKE_DNS_PATH = '/data/local/tmp/fake_dns' | 
|  16  |  16  | 
|  17   def __init__(self, adb): |  17   def __init__(self, adb, build_type): | 
|  18     """ |  18     """ | 
|  19       Args: |  19       Args: | 
|  20         adb: the AndroidCommands to use. |  20         adb: the AndroidCommands to use. | 
 |  21         build_type: 'Release' or 'Debug'. | 
|  21     """ |  22     """ | 
|  22     self._adb = adb |  23     self._adb = adb | 
 |  24     self._build_type = build_type | 
|  23     self._fake_dns = None |  25     self._fake_dns = None | 
|  24     self._original_dns = None |  26     self._original_dns = None | 
|  25  |  27  | 
|  26   def _PushAndStartFakeDns(self): |  28   def _PushAndStartFakeDns(self): | 
|  27     """Starts the fake_dns server that replies all name queries 127.0.0.1. |  29     """Starts the fake_dns server that replies all name queries 127.0.0.1. | 
|  28  |  30  | 
|  29     Returns: |  31     Returns: | 
|  30       subprocess instance connected to the fake_dns process on the device. |  32       subprocess instance connected to the fake_dns process on the device. | 
|  31     """ |  33     """ | 
|  32     self._adb.PushIfNeeded( |  34     self._adb.PushIfNeeded( | 
|  33         os.path.join(constants.CHROME_DIR, 'out', 'Release', 'fake_dns'), |  35         os.path.join(constants.CHROME_DIR, 'out', self._build_type, 'fake_dns'), | 
|  34         FakeDns._FAKE_DNS_PATH) |  36         FakeDns._FAKE_DNS_PATH) | 
|  35     return subprocess.Popen( |  37     return subprocess.Popen( | 
|  36         ['adb', '-s', self._adb._adb.GetSerialNumber(), |  38         ['adb', '-s', self._adb._adb.GetSerialNumber(), | 
|  37          'shell', '%s -D' % FakeDns._FAKE_DNS_PATH]) |  39          'shell', '%s -D' % FakeDns._FAKE_DNS_PATH]) | 
|  38  |  40  | 
|  39   def SetUp(self): |  41   def SetUp(self): | 
|  40     """Configures the system to point to a DNS server that replies 127.0.0.1. |  42     """Configures the system to point to a DNS server that replies 127.0.0.1. | 
|  41  |  43  | 
|  42     This can be used in combination with the forwarder to forward all web |  44     This can be used in combination with the forwarder to forward all web | 
|  43     traffic to a replay server. |  45     traffic to a replay server. | 
|  44  |  46  | 
|  45     The TearDown() method will perform all cleanup. |  47     The TearDown() method will perform all cleanup. | 
|  46     """ |  48     """ | 
|  47     self._adb.RunShellCommand('ip route add 8.8.8.0/24 via 127.0.0.1 dev lo') |  49     self._adb.RunShellCommand('ip route add 8.8.8.0/24 via 127.0.0.1 dev lo') | 
|  48     self._fake_dns = self._PushAndStartFakeDns() |  50     self._fake_dns = self._PushAndStartFakeDns() | 
|  49     self._original_dns = self._adb.RunShellCommand('getprop net.dns1')[0] |  51     self._original_dns = self._adb.RunShellCommand('getprop net.dns1')[0] | 
|  50     self._adb.RunShellCommand('setprop net.dns1 127.0.0.1') |  52     self._adb.RunShellCommand('setprop net.dns1 127.0.0.1') | 
|  51     time.sleep(2)  # Time for server to start and the setprop to take effect. |  53     time.sleep(2)  # Time for server to start and the setprop to take effect. | 
|  52  |  54  | 
|  53   def TearDown(self): |  55   def TearDown(self): | 
|  54     """Shuts down the fake_dns.""" |  56     """Shuts down the fake_dns.""" | 
|  55     if self._fake_dns: |  57     if self._fake_dns: | 
|  56       if not self._original_dns or self._original_dns == '127.0.0.1': |  58       if not self._original_dns or self._original_dns == '127.0.0.1': | 
|  57         logging.warning('Bad original DNS, falling back to Google DNS.') |  59         logging.warning('Bad original DNS, falling back to Google DNS.') | 
|  58         self._original_dns = '8.8.8.8' |  60         self._original_dns = '8.8.8.8' | 
|  59       self._adb.RunShellCommand('setprop net.dns1 %s' % self._original_dns) |  61       self._adb.RunShellCommand('setprop net.dns1 %s' % self._original_dns) | 
|  60       self._fake_dns.kill() |  62       self._fake_dns.kill() | 
|  61       self._adb.RunShellCommand('ip route del 8.8.8.0/24 via 127.0.0.1 dev lo') |  63       self._adb.RunShellCommand('ip route del 8.8.8.0/24 via 127.0.0.1 dev lo') | 
| OLD | NEW |