blob: 04321af14751fb5d0e165c7efb2a379cc2a83f7f [file] [log] [blame] [edit]
# Copyright (c) 2014 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, time
from autotest_lib.server import autotest, test
from autotest_lib.client.common_lib import error
_CHROME_PATH = '/opt/google/chrome/chrome'
class platform_TotalMemory(test.test):
version = 1
ALLOWED_VARIANCE = 4
WAIT_BEFORE_GET_MEMINFO = 10
def action_login(self):
"""Login i.e. runs running client test"""
self.autotest_client.run_test('desktopui_SimpleLogin',
exit_without_logout=True)
def is_chrome_available(self):
"""check if _CHROME_PATH exists
@return true if _CHROME_PATH exists
"""
return self.host.run('ls %s' % _CHROME_PATH,
ignore_status=True).exit_status == 0
def get_meminfo(self, key):
"""Get memtotal form meminfo
@param key memory info title
@return mem_total value
"""
mem_total = self.host.read_from_meminfo(key)
if mem_total is None:
raise error.TestFail('Memory return no data' )
return mem_total
def run_once(self, host, reboot_counts):
self.host = host
mem_total_list = list()
mem_free_list = list()
self.autotest_client = autotest.Autotest(self.host)
for reboot_count in xrange(reboot_counts):
logging.info('Iteration %d', (reboot_count + 1))
self.host.reboot()
if self.is_chrome_available():
self.action_login()
time.sleep(self.WAIT_BEFORE_GET_MEMINFO)
mem_total_size = self.get_meminfo('MemTotal')
mem_total_list.append((mem_total_size))
logging.info('MemTotalSize %d', mem_total_size)
mem_free_size = self.get_meminfo('MemFree')
mem_free_list.append(mem_free_size)
logging.info('MemFreeSize %d', mem_free_size)
errors = list()
mem_total_diff = max(mem_total_list) - min(mem_total_list)
if mem_total_diff > self.ALLOWED_VARIANCE:
errors.append('MemoryTotal is not consistent. variance=%dKB' %
mem_total_diff)
mem_free_diff = max(mem_free_list) - min(mem_free_list)
quarter_mem_total = max(mem_total_list) / 3
if mem_free_diff > quarter_mem_total:
errors.append('The difference between Free Memory readings '
'[%d] is bigger than 1/3 of Total Memory [%d]' %
(mem_free_diff, quarter_mem_total))
if errors:
raise error.TestFail('; '.join(errors))