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 logging
5import os
6import unittest
7
8from telemetry.core import util
9from telemetry.core.platform import linux_based_platform_backend
10
11
12class TestBackend(linux_based_platform_backend.LinuxBasedPlatformBackend):
13
14  # pylint: disable=W0223
15
16  def __init__(self):
17    super(TestBackend, self).__init__()
18    self._mock_files = {}
19
20  def SetMockFile(self, filename, output):
21    self._mock_files[filename] = output
22
23  def GetFileContents(self, filename):
24    return self._mock_files[filename]
25
26
27class LinuxBasedPlatformBackendTest(unittest.TestCase):
28
29  def testGetMemoryStatsBasic(self):
30    if not linux_based_platform_backend.resource:
31      logging.warning('Test not supported')
32      return
33
34    backend = TestBackend()
35    with open(os.path.join(util.GetUnittestDataDir(), 'stat')) as f:
36      backend.SetMockFile('/proc/1/stat', f.read())
37    with open(os.path.join(util.GetUnittestDataDir(), 'status')) as f:
38      backend.SetMockFile('/proc/1/status', f.read())
39    with open(os.path.join(util.GetUnittestDataDir(), 'smaps')) as f:
40      backend.SetMockFile('/proc/1/smaps', f.read())
41    result = backend.GetMemoryStats(1)
42    self.assertEquals(result, {'PrivateDirty': 5324800,
43                               'VM': 1025978368,
44                               'VMPeak': 1050099712,
45                               'WorkingSetSize': 84000768,
46                               'WorkingSetSizePeak': 144547840})
47
48  def testGetMemoryStatsNoHWM(self):
49    if not linux_based_platform_backend.resource:
50      logging.warning('Test not supported')
51      return
52
53    backend = TestBackend()
54    with open(os.path.join(util.GetUnittestDataDir(), 'stat')) as f:
55      backend.SetMockFile('/proc/1/stat', f.read())
56    with open(os.path.join(util.GetUnittestDataDir(), 'status_nohwm')) as f:
57      backend.SetMockFile('/proc/1/status', f.read())
58    with open(os.path.join(util.GetUnittestDataDir(), 'smaps')) as f:
59      backend.SetMockFile('/proc/1/smaps', f.read())
60    result = backend.GetMemoryStats(1)
61    self.assertEquals(result, {'PrivateDirty': 5324800,
62                               'VM': 1025978368,
63                               'VMPeak': 1025978368,
64                               'WorkingSetSize': 84000768,
65                               'WorkingSetSizePeak': 84000768})
66