#!/usr/bin/env python3
#
# Copyright (C) 2016 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
from acts import base_test
from acts.controllers.sniffer import Sniffer
class SnifferSanityTest(base_test.BaseTestClass):
def setup_class(self):
self._channels = [6, 44]
# capture (sniff) for 30 seconds or 10 packets - whichever comes first
self._capture_sec = 30
self._packet_count = 10
self._filter = {"tcpdump": "type mgt subtype beacon",
"tshark": "type mgt subtype beacon"}
def test_sniffer_validation_using_with(self):
"""Validate sniffer configuration & capture API using the 'with' clause.
This is the standard example - this syntax should typically be used.
"""
index = 0
for sniffer in self.sniffers:
for channel in self._channels:
with sniffer.start_capture(
override_configs={Sniffer.CONFIG_KEY_CHANNEL: channel},
duration=self._capture_sec,
packet_count=self._packet_count):
self.log.info("Capture: %s", sniffer.get_capture_file())
def test_sniffer_validation_manual(self):
"""Validate sniffer configuration & capture API using a manual/raw
API mechanism.
The standard process should use a with clause. This demonstrates the
manual process which uses an explicit wait_for_capture() call.
Alternatively, could also use a sleep() + stop_capture() process
(though that mechanism won't terminate early if the capture is done).
"""
index = 0
for sniffer in self.sniffers:
for channel in self._channels:
sniffer.start_capture(
override_configs={Sniffer.CONFIG_KEY_CHANNEL: channel},
packet_count=self._packet_count)
self.log.info("Capture: %s", sniffer.get_capture_file())
sniffer.wait_for_capture(timeout=self._capture_sec)
def test_sniffer_validation_capture_3_beacons(self):
"""Demonstrate the use of additional configuration.
"""
index = 0
for sniffer in self.sniffers:
for channel in self._channels:
with sniffer.start_capture(
override_configs={Sniffer.CONFIG_KEY_CHANNEL: channel},
duration=self._capture_sec,
packet_count=3,
additional_args=self._filter[sniffer.get_subtype()]):
self.log.info("Capture: %s", sniffer.get_capture_file())