blob: 8231545ccb5f72d46810974a90d07f8ac4a2e103 [file] [log] [blame]
# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import logging, os, subprocess
import dbus, dbus.mainloop.glib, gobject
from autotest_lib.client.bin import test
from autotest_lib.client.common_lib import error
from autotest_lib.client.cros.cellular import sms, mmtest
from autotest_lib.client.cros.mainloop import GenericTesterMainLoop
from autotest_lib.client.cros.mainloop import ExceptionForward
class SmsTester(GenericTesterMainLoop):
def __init__(self, autodir, srcdir, mmt, *args, **kwargs):
self.autodir = autodir
self.srcdir = srcdir
self.mmt = mmt
self.remaining_requirements = ['Received', 'Completed']
super(SmsTester, self).__init__(*args, timeout_s = 10, **kwargs)
# The GenericTesterMainLoop will run this routine from the idle
# loop. In a successful test, the two SMS signals will be
# recieved by the routines registered in the main test class and
# will call in to the methods below. Order of reception is not
# important.
@ExceptionForward
def perform_one_test(self):
self.gsmsms = self.mmt.mm.GsmSms(self.mmt.modem_object_path)
self.smstest = sms.SmsTest(self.gsmsms)
self.smsstore = sms.SmsStore(self.mmt.fakemodem)
# Actual test
self.smstest.test_has_none()
self.testsms = sms.sample
self.smsstore.sms_receive(1, self.testsms['pdu'])
@ExceptionForward
def SmsReceived(self, index, complete):
if index != 1:
raise error.TestFail("Wrong index %d != 1" % index)
if complete == False:
raise error.TestFail("Message not complete")
self.requirement_completed('Received')
@ExceptionForward
def SmsCompleted(self, index, complete):
if index != 1:
raise error.TestFail("Wrong index %d != 1" % index)
if complete == False:
raise error.TestFail("Message not complete")
self.smstest.test_has_one(self.testsms['parsed'])
self.smsstore.sms_remove(1)
self.smstest.test_has_none()
self.requirement_completed('Completed')
class SmsMultipartTester(GenericTesterMainLoop):
def __init__(self, autodir, srcdir, mmt, *args, **kwargs):
self.autodir = autodir
self.srcdir = srcdir
self.mmt = mmt
self.remaining_requirements = ['Received', 'Received', 'Completed']
super(SmsMultipartTester, self).__init__(*args, timeout_s = 10,
**kwargs)
# The GenericTesterMainLoop will run this routine from the idle
# loop. In a successful test, the first SMSReceived signal will
# be recieved by the routine registered in the main test class and
# will call SmsReceived below; that routine will send the second
# part of the message, and the two resulting signals will call
# SmsReceived and SmsCompleted.
@ExceptionForward
def perform_one_test(self):
self.gsmsms = self.mmt.mm.GsmSms(self.mmt.modem_object_path)
self.smstest = sms.SmsTest(self.gsmsms)
self.smsstore = sms.SmsStore(self.mmt.fakemodem)
# Actual test
self.smstest.test_has_none()
self.testsms = sms.sample_multipart
self.smsstore.sms_receive(1, self.testsms['pdu'][0])
self.second = False
@ExceptionForward
def SmsReceived(self, index, complete):
logging.info("Received, index %d"%index)
if index != 1:
raise error.TestFail("Wrong index %d != 1" % index)
if complete != self.second:
raise error.TestFail("Complete is wrong, should be %s" %
self.second)
self.requirement_completed('Received')
if self.second == False:
self.smsstore.sms_receive(2, self.testsms['pdu'][1])
self.second = True
@ExceptionForward
def SmsCompleted(self, index, complete):
logging.info("Completed, index %d"%index)
if index != 1:
raise error.TestFail("Wrong index %d != 1" % index)
if complete == False:
raise error.TestFail("Message not complete")
self.smstest.test_has_one(self.testsms['parsed'])
self.smsstore.sms_remove(1)
self.smsstore.sms_remove(2)
self.smstest.test_has_none()
self.requirement_completed('Completed')
class network_ModemManagerSMSSignal(test.test):
version = 1
def setup(self):
self.job.setup_dep(['fakegudev', 'fakemodem'])
@ExceptionForward
def SmsReceived(self, *args, **kwargs):
self.smstester.SmsReceived(*args, **kwargs)
@ExceptionForward
def SmsCompleted(self, *args, **kwargs):
self.smstester.SmsCompleted(*args, **kwargs)
def run_once(self, **kwargs):
self.job.install_pkg('fakegudev', 'dep',
os.path.join(self.autodir, 'deps', 'fakegudev'))
self.job.install_pkg('fakemodem', 'dep',
os.path.join(self.autodir, 'deps', 'fakemodem'))
subprocess.check_call(["modprobe", "tun"])
subprocess.check_call(["initctl", "stop", "modemmanager"])
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
self.main_loop = gobject.MainLoop()
self.bus = dbus.SystemBus()
self.bus.add_signal_receiver(self.SmsReceived,
signal_name='SmsReceived')
self.bus.add_signal_receiver(self.SmsCompleted,
signal_name='Completed')
try:
paths = [os.path.join(self.srcdir, 'fake-gsm'),
os.path.join(self.srcdir, 'fake-icera')]
with mmtest.ModemManagerTest(self.autodir, paths) as mmt:
self.smstester = SmsTester(self.autodir, self.srcdir,
mmt, self, self.main_loop)
self.smstester.run(**kwargs)
with mmtest.ModemManagerTest(self.autodir, paths) as mmt:
self.smstester = SmsMultipartTester(self.autodir, self.srcdir,
mmt, self, self.main_loop)
self.smstester.run(**kwargs)
finally:
subprocess.check_call(["initctl", "start", "modemmanager"])
subprocess.check_call(["rmmod", "tun"])