blob: 1b547e388f8cdc8f2abbb6558a1358040ffdc08a [file] [log] [blame]
#
# Copyright 2018 - 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 asserts
from acts_contrib.test_utils.net import connectivity_const as cconst
from queue import Empty
def _listen_for_keepalive_event(ad, key, msg, ka_event):
"""Listen for keepalive event and return status
Args:
ad: DUT object
key: keepalive key
msg: Error message
event: Keepalive event type
"""
ad.droid.socketKeepaliveStartListeningForEvent(key, ka_event)
try:
event = ad.ed.pop_event("SocketKeepaliveCallback")
status = event["data"]["socketKeepaliveEvent"] == ka_event
except Empty:
asserts.fail(msg)
finally:
ad.droid.socketKeepaliveStopListeningForEvent(key, ka_event)
if ka_event != "Started":
ad.droid.removeSocketKeepaliveReceiverKey(key)
if status:
ad.log.info("'%s' keepalive event successful" % ka_event)
return status
def start_natt_socket_keepalive(ad, udp_encap, src_ip, dst_ip, interval = 10):
"""Start NATT SocketKeepalive on DUT
Args:
ad: DUT object
udp_encap: udp_encap socket key
src_ip: IP addr of the client
dst_ip: IP addr of the keepalive server
interval: keepalive time interval
"""
ad.log.info("Starting Natt Socket Keepalive")
key = ad.droid.startNattSocketKeepalive(udp_encap, src_ip, dst_ip, interval)
msg = "Failed to receive confirmation of starting natt socket keeaplive"
status = _listen_for_keepalive_event(ad, key, msg, "Started")
return key if status else None
def start_tcp_socket_keepalive(ad, socket, time_interval = 10):
"""Start TCP socket keepalive on DUT
Args:
ad: DUT object
socket: TCP socket key
time_interval: Keepalive time interval
"""
ad.log.info("Starting TCP Socket Keepalive")
key = ad.droid.startTcpSocketKeepalive(socket, time_interval)
msg = "Failed to receive confirmation of starting tcp socket keeaplive"
status = _listen_for_keepalive_event(ad, key, msg, "Started")
return key if status else None
def socket_keepalive_error(ad, key):
"""Verify Error callback
Args:
ad: DUT object
key: Keepalive key
"""
ad.log.info("Verify Error callback on keepalive: %s" % key)
msg = "Failed to receive confirmation of Error callback"
return _listen_for_keepalive_event(ad, key, msg, "Error")
def socket_keepalive_data_received(ad, key):
"""Verify OnDataReceived callback
Args:
ad: DUT object
key: Keepalive key
"""
ad.log.info("Verify OnDataReceived callback on keepalive: %s" % key)
msg = "Failed to receive confirmation of OnDataReceived callback"
return _listen_for_keepalive_event(ad, key, msg, "OnDataReceived")
def stop_socket_keepalive(ad, key):
"""Stop SocketKeepalive on DUT
Args:
ad: DUT object
key: Keepalive key
"""
ad.log.info("Stopping Socket keepalive: %s" % key)
ad.droid.stopSocketKeepalive(key)
msg = "Failed to receive confirmation of stopping socket keepalive"
return _listen_for_keepalive_event(ad, key, msg, "Stopped")
def set_private_dns(ad, dns_mode, hostname=None):
""" Set private DNS mode and DNS server hostname on DUT
:param ad: Device under test (DUT)
:param dns_mode: DNS mode, including OFF, OPPORTUNISTIC, STRICT
:param hostname: DNS server hostname
"""
""" Set private DNS mode on dut """
if dns_mode == cconst.PRIVATE_DNS_MODE_OFF:
ad.droid.setPrivateDnsMode(False)
else:
ad.droid.setPrivateDnsMode(True, hostname)
mode = ad.droid.getPrivateDnsMode()
host = ad.droid.getPrivateDnsSpecifier()
ad.log.info("DNS mode is %s and DNS server is %s" % (mode, host))