Home | History | Annotate | Download | only in shill
      1 
      2 Copyright (C) 2012 The Android Open Source Project
      3 
      4 Licensed under the Apache License, Version 2.0 (the "License");
      5 you may not use this file except in compliance with the License.
      6 You may obtain a copy of the License at
      7 
      8      http://www.apache.org/licenses/LICENSE-2.0
      9 
     10 Unless required by applicable law or agreed to in writing, software
     11 distributed under the License is distributed on an "AS IS" BASIS,
     12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 See the License for the specific language governing permissions and
     14 limitations under the License.
     15 
     16 Intro
     17 -----
     18 We test shill using two sets of tests: unit tests, and integration
     19 tests. The unit tests are built using Google Test [1] and Google Mock
     20 [2]; the integration tests use autotest [3].
     21 
     22 Running unit tests for Chrome OS
     23 --------------------------------
     24 Here ${BOARD} is a valid board name, like link or x86-generic.
     25 - build the shill_unittest target
     26 - run the resulting shill_unittest binary
     27 - run the unit tests from your host machine under gdb
     28   (chroot)$ FEATURES=test emerge-${BOARD} shill
     29   (chroot)$ gdb_x86_local --board ${BOARD} \
     30                 /build/${BOARD}/var/cache/portage/chromeos-base/platform2/out/Default/shill_unittest
     31   (Of course if the unit tests segfaulted, you wouldn't need the emerge
     32   step since the build directory would have been retained in the course
     33   of the test failing.)
     34 - The emerge workflow given above is incremental. It uses ninja to rebuild only
     35   relevant objects in the shill target.
     36 - You can restrict the test runs to only shill unittests by using
     37   (chroot)$ P2_TEST_FILTER="shill::*" FEATURES=test emerge-${BOARD} shill
     38   The filter can be made more specific to include googletest filters like
     39   "shill::CellularTest.StartGSMRegister"
     40 - if you want to set a breakpoint in gdb, make sure to include the shill
     41   namespace. e.g., run
     42     (cros-gdb) b shill::EthernetService::GetStorageIdentifier
     43     Breakpoint 2 at 0x5555563cc270: file ethernet_service.cc, line 63.
     44   rather than
     45     (cros-gdb) b EthernetService::GetStorageIdentifier
     46     Function "EthernetService::GetStorageIdentifier" not defined.
     47     Make breakpoint pending on future shared library load? (y or [n]) n
     48 
     49 - alternate build command:
     50   - Another way to build which uses the emerge command behind the scenes:
     51     (chroot)$ cros_workon_make --board ${BOARD} shill
     52   - to see the actual compiler commands that are run:
     53     (chroot)$ CFLAGS="-print-cmdline" cros_workon_make --reconf \
     54                 --board=${BOARD} shill
     55   - to abort compilation on the first error
     56     (chroot)$ MAKEFLAGS="--stop" cros_workon_make --test --board=${BOARD} \
     57                 --reconf shill
     58 
     59 Running unit tests for Chrome OS with the address sanitizer
     60 -----------------------------------------------------------
     61 USE="asan clang wimax" TEST_FILTER="shill::*" emerge-${BOARD} shill
     62 
     63 This also turns on "wimax" and its tests, since this is disabled on most
     64 platforms.
     65 
     66 Running unit tests for Android
     67 ------------------------------
     68 Currently, only native unit tests are supported on Android, meaning that unit tests
     69 can only be run on the target device.
     70 
     71 The test binary is located at /data/nativetest/shill_test/shill_test.
     72 By default, it does not have the execute permissions due to inherited
     73 directory security policy. Consequently, before running the unit tests,
     74 you will need to grant execute permissions to the test binary using
     75 the following command:
     76   chmod +x /data/nativetest/shill_test/shill_test
     77 
     78 To run all unit tests:
     79   /data/nativetest/shill_test/shill_test
     80 
     81 To run specific unit tests using filter:
     82   /data/nativetest/shill_test/shill_test --gtest_filter=<TestClassName>.<TestName>
     83 
     84 For example:
     85   /data/nativetest/shill_test/shill_test --gtest_filter=WiFiMainTest.OnNewWiphy
     86   /data/nativetest/shill_test/shill_test --gtest_filter=WiFiMainTest.*
     87 
     88 Running integration tests
     89 -------------------------
     90 - build a test image, suitable for a VM:
     91   (chroot) src/scripts$ ./build_packages --board=${BOARD}
     92   (chroot) src/scripts$ ./build_image --board=${BOARD} \
     93                             --noenable_rootfs_verification test
     94   (chroot) src/scripts$ ./image_to_vm.sh --board=${BOARD} --test_image
     95 
     96 - start the VM
     97   (host)$ sudo kvm -m 2048 -vga std -pidfile /tmp/kvm.pid \
     98               -net nic,model=virtio -net user,hostfwd=tcp::9222-:22 \
     99               -hda <path to chroot>/src/build/images/${BOARD}/latest/chromiumos_qemu_image.bin
    100 
    101 - DO NOT log in on the console.
    102   (doing so will load a user profile onto shill's profile stack; this
    103   interferes with the test profile that we use in the autotests)
    104 
    105 - if you've modified the source after building the image, update shill on
    106   the image, and then restart shill:
    107   (chroot) src/scripts$ ./start_devserver
    108   (chroot) src/scripts$ ssh-keygen -R '[127.0.0.1]:9222'
    109   (chroot) src/scripts$ emerge-${BOARD} platform2
    110   (chroot) src/scripts$ cros deploy 127.0.0.1:9222 platform2
    111 
    112   (chroot) src/scripts$ ssh -p 9222 root (a] 127.0.0.1
    113   localhost / # restart shill
    114 
    115 - run the tests
    116   (chroot) src/scripts$ test_that 127.0.0.1 WiFiManager
    117                                   --args="config_file=wifi_vm_config"
    118                                   --ssh_options="-p 9222"
    119 
    120   To run a specific test out of the test suite, use test_pat option to --args.
    121   # Example: To just run the 035CheckWEPKeySyntax test:
    122   (chroot) src/scripts$ test_that 127.0.0.1 WiFiManager
    123                                   --args="config_file=wifi_vm_config test_pat=035CheckWEPKeySyntax"
    124                                   --ssh_options="-p 9222"
    125 
    126 - configuration note: if you use a different port
    127   (e.g. hostfwd=tcp::9223-:22), you'll need to change:
    128     - the ssh_port argument to test_that
    129     - the port numbers in
    130       <chroot>/third_party/autotest/files/client/config/wifi_vm_config
    131 
    132 - debugging test failures
    133   - "grep shill /var/log/messages" for log messages
    134   - "grep wpa_supplicant /var/log/messages" for supplicant log messages
    135   - "wpa_debug debug" to increase supplicant log level
    136   - try resetting the test infrastructure
    137     - rmmod mac80211_hwsim mac80211 cfg80211
    138     - restart wpasupplicant
    139     - rm /tmp/hostapd-test.control/*
    140   - examine autotest log files
    141     - check how far the test got before it failed
    142       $ grep -a ': step ' <test output>/<suite name>/<suite name>.<test name>/debug/<suite name>.<test name>.INFO
    143       e.g.
    144       (chroot) $ grep -a ': step ' /tmp/test_that_latest/network_WiFiRoaming/network_WiFiRoaming.002Suspend/debug/network_WiFiRoaming.002Suspend.INFO
    145     - read the log file
    146       (chroot) $ LESSOPEN= less /tmp/test_that_latest/network_WiFiRoaming/network_WiFiRoaming.002Suspend/debug/network_WiFiRoaming.002Suspend.INFO
    147 
    148       (LESSOPEN= prevents less from misinterpreting the logs as binary files,
    149        and piping them through hexdump.)
    150 
    151 - additional test suites: we have a number of other WiFi test suites
    152   (in addition to WiFiManager). these are: WiFiMatFunc, WiFiPerf,
    153   WiFiRoaming, WiFiSecMat. the WiFiPerf tests are probably not too
    154   relevant to shill (just yet), but the rest probably are.
    155 
    156 [1] http://code.google.com/p/googletest/
    157 [2] http://code.google.com/p/googlemock/
    158 [3] http://autotest.kernel.org/,
    159     http://www.chromium.org/chromium-os/testing/testing-faq
    160