#!/usr/bin/python
#
# Copyright (c) 2010 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

__author__ = 'kdlucas@chromium.org (Kelly Lucas)'

import logging
import os

from autotest_lib.client.bin import utils, test
from autotest_lib.client.common_lib import error


class platform_MemCheck(test.test):
    """
    Verify memory usage looks correct.
    """
    version = 1

    def run_once(self):
        errors = 0
        # The total memory will shrink if the system bios grabs more of the
        # reserved memory. We derived the value below by giving a small
        # cushion to allow for more system BIOS usage of ram. The memref value
        # is driven by the supported netbook model with the least amount of
        # total memory.  ARM and x86 values differ considerably.
        cpuType = utils.get_cpu_arch()
        memref = 986392
        vmemref = 102400
        if cpuType == "arm":
            memref = 700000
            vmemref = 210000

        less_refs = ['MemTotal', 'MemFree', 'VmallocTotal']
        equal_refs = ['SwapCached', 'SwapTotal']

        ref = {'MemTotal': memref,
               'MemFree': memref/2,
               'SwapCached': 0,
               'SwapTotal': 0,
               'VmallocTotal': vmemref,
              }

        for k in ref:
            value = utils.read_from_meminfo(k)
            if k in less_refs:
                if value < ref[k]:
                    logging.warn('%s is %d' % (k, value))
                    logging.warn('%s should be at least %d' % (k, ref[k]))
                    errors += 1
            elif k in equal_refs:
                if value != ref[k]:
                    logging.warn('%s is %d' % (k, value))
                    logging.warn('%s should be %d' % (k, ref[k]))
                    errors += 1

        # If self.error is not zero, there were errors.
        if errors > 0:
            raise error.TestFail('Found %d incorrect values' % errors)
