1# Copyright 2013 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4import os
5import logging
6import unittest
7
8from telemetry.core import util
9from telemetry.core.platform import proc_supporting_platform_backend
10
11
12class TestBackend(
13    proc_supporting_platform_backend.ProcSupportingPlatformBackend):
14
15  # pylint: disable=W0223
16
17  def __init__(self):
18    super(TestBackend, self).__init__()
19    self._mock_files = {}
20
21  def SetMockFile(self, filename, output):
22    self._mock_files[filename] = output
23
24  def _GetFileContents(self, filename):
25    return self._mock_files[filename]
26
27
28class ProcSupportingPlatformBackendTest(unittest.TestCase):
29
30  def testGetMemoryStatsBasic(self):
31    if not proc_supporting_platform_backend.resource:
32      logging.warning('Test not supported')
33      return
34
35    backend = TestBackend()
36    backend.SetMockFile(
37        '/proc/1/stat',
38        open(os.path.join(util.GetUnittestDataDir(), 'stat')).read())
39    backend.SetMockFile(
40        '/proc/1/status',
41        open(os.path.join(util.GetUnittestDataDir(), 'status')).read())
42    result = backend.GetMemoryStats(1)
43    self.assertEquals(result, {'VM': 1025978368,
44                               'VMPeak': 1050099712,
45                               'WorkingSetSize': 84000768,
46                               'WorkingSetSizePeak': 144547840})
47
48  def testGetMemoryStatsNoHWM(self):
49    if not proc_supporting_platform_backend.resource:
50      logging.warning('Test not supported')
51      return
52
53    backend = TestBackend()
54    backend.SetMockFile(
55        '/proc/1/stat',
56        open(os.path.join(util.GetUnittestDataDir(), 'stat')).read())
57    backend.SetMockFile(
58        '/proc/1/status',
59        open(os.path.join(util.GetUnittestDataDir(), 'status_nohwm')).read())
60    result = backend.GetMemoryStats(1)
61    self.assertEquals(result, {'VM': 1025978368,
62                               'VMPeak': 1025978368,
63                               'WorkingSetSize': 84000768,
64                               'WorkingSetSizePeak': 84000768})
65