| # Copyright 2015 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 common |
| from autotest_lib.client.common_lib import error |
| from autotest_lib.server import test |
| |
| |
| _DEFAULT_MIN_TOTAL = 32 * 1024 |
| _DEFAULT_MIN_FREE = 4 * 1024 |
| |
| |
| class brillo_MemorySizeTest(test.test): |
| """Verify that a Brillo device has enough memory.""" |
| version = 1 |
| |
| def run_once(self, host=None, min_total=_DEFAULT_MIN_TOTAL, |
| min_free=_DEFAULT_MIN_FREE): |
| """Check that there's enough total and free memory on the device. |
| |
| @param host: a host object representing the DUT. |
| @param min_total: Minimum total memory in 1K blocks. |
| @param min_free: Minimum free memory in 1K blocks. |
| |
| @raise TestError: Something went wrong while trying to execute the test. |
| @raise TestFail: The test failed. |
| """ |
| if int(min_total) < int(min_free): |
| raise error.TestError( |
| 'Requiring more free memory (%s) than total memory (%s)' % |
| (min_free, min_total)) |
| |
| try: |
| meminfo_output = host.run_output('cat /proc/meminfo').splitlines() |
| except error.GenericHostRunError: |
| raise error.TestFail('Failed to cat /proc/meminfo') |
| |
| meminfo_dict = dict([[tok.strip() for tok in line.split(':', 1)] |
| for line in meminfo_output]) |
| |
| for mem_type, min_mem in (('MemTotal', min_total), ('MemFree', min_free)): |
| actual_mem = meminfo_dict.get(mem_type) |
| if not (actual_mem and actual_mem.endswith(' kB')): |
| raise error.TestFail( |
| 'Failed to read %s from /proc/meminfo' % mem_type) |
| actual_mem = actual_mem.split()[0] |
| if int(actual_mem) < int(min_mem): |
| raise error.TestFail( |
| '%s (%s kB) is less than required (%s kB)' % |
| (mem_type, actual_mem, min_mem)) |