blob: 860afc1a29e67a54a786eeca4b35d6c8e451772a [file] [log] [blame]
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
from __future__ import unicode_literals
import unittest
from mozunit import main
from mozbuild.controller.building import CCacheStats
class TestCcacheStats(unittest.TestCase):
STAT_GARBAGE = """A garbage line which should be failed to parse"""
STAT0 = """
cache directory /home/tlin/.ccache
cache hit (direct) 0
cache hit (preprocessed) 0
cache miss 0
files in cache 0
cache size 0 Kbytes
max cache size 16.0 Gbytes"""
STAT1 = """
cache directory /home/tlin/.ccache
cache hit (direct) 100
cache hit (preprocessed) 200
cache miss 2500
called for link 180
called for preprocessing 6
compile failed 11
preprocessor error 3
bad compiler arguments 6
unsupported source language 9
autoconf compile/link 60
unsupported compiler option 2
no input file 21
files in cache 7344
cache size 1.9 Gbytes
max cache size 16.0 Gbytes"""
STAT2 = """
cache directory /home/tlin/.ccache
cache hit (direct) 1900
cache hit (preprocessed) 300
cache miss 2600
called for link 361
called for preprocessing 12
compile failed 22
preprocessor error 6
bad compiler arguments 12
unsupported source language 18
autoconf compile/link 120
unsupported compiler option 4
no input file 48
files in cache 7392
cache size 2.0 Gbytes
max cache size 16.0 Gbytes"""
STAT3 = """
cache directory /Users/tlin/.ccache
primary config /Users/tlin/.ccache/ccache.conf
secondary config (readonly) /usr/local/Cellar/ccache/3.2/etc/ccache.conf
cache hit (direct) 12004
cache hit (preprocessed) 1786
cache miss 26348
called for link 2338
called for preprocessing 6313
compile failed 399
preprocessor error 390
bad compiler arguments 86
unsupported source language 66
autoconf compile/link 2439
unsupported compiler option 187
no input file 1068
files in cache 18044
cache size 7.5 GB
max cache size 8.6 GB
"""
STAT4 = """
cache directory /Users/tlin/.ccache
primary config /Users/tlin/.ccache/ccache.conf
secondary config (readonly) /usr/local/Cellar/ccache/3.2.1/etc/ccache.conf
cache hit (direct) 21039
cache hit (preprocessed) 2315
cache miss 39370
called for link 3651
called for preprocessing 6693
compile failed 723
ccache internal error 1
preprocessor error 588
bad compiler arguments 128
unsupported source language 99
autoconf compile/link 3669
unsupported compiler option 187
no input file 1711
files in cache 18313
cache size 6.3 GB
max cache size 6.0 GB
"""
STAT5 = """
cache directory /Users/tlin/.ccache
primary config /Users/tlin/.ccache/ccache.conf
secondary config (readonly) /usr/local/Cellar/ccache/3.2.1/etc/ccache.conf
cache hit (direct) 21039
cache hit (preprocessed) 2315
cache miss 39372
called for link 3653
called for preprocessing 6693
compile failed 723
ccache internal error 1
preprocessor error 588
bad compiler arguments 128
unsupported source language 99
autoconf compile/link 3669
unsupported compiler option 187
no input file 1711
files in cache 17411
cache size 6.0 GB
max cache size 6.0 GB
"""
def test_parse_garbage_stats_message(self):
self.assertRaises(ValueError, CCacheStats, self.STAT_GARBAGE)
def test_parse_zero_stats_message(self):
stats = CCacheStats(self.STAT0)
self.assertEqual(stats.cache_dir, "/home/tlin/.ccache")
self.assertEqual(stats.hit_rates(), (0, 0, 0))
def test_hit_rate_of_diff_stats(self):
stats1 = CCacheStats(self.STAT1)
stats2 = CCacheStats(self.STAT2)
stats_diff = stats2 - stats1
self.assertEqual(stats_diff.hit_rates(), (0.9, 0.05, 0.05))
def test_stats_contains_data(self):
stats0 = CCacheStats(self.STAT0)
stats1 = CCacheStats(self.STAT1)
stats2 = CCacheStats(self.STAT2)
stats_diff_zero = stats1 - stats1
stats_diff_negative1 = stats0 - stats1
stats_diff_negative2 = stats1 - stats2
self.assertFalse(stats0)
self.assertTrue(stats1)
self.assertTrue(stats2)
self.assertFalse(stats_diff_zero)
self.assertFalse(stats_diff_negative1)
self.assertFalse(stats_diff_negative2)
def test_stats_version32(self):
stat2 = CCacheStats(self.STAT2)
stat3 = CCacheStats(self.STAT3)
stats_diff = stat3 - stat2
self.assertTrue(stat3)
self.assertTrue(stats_diff)
def test_cache_size_shrinking(self):
stat4 = CCacheStats(self.STAT4)
stat5 = CCacheStats(self.STAT5)
stats_diff = stat5 - stat4
self.assertTrue(stat4)
self.assertTrue(stat5)
self.assertTrue(stats_diff)
if __name__ == '__main__':
main()