ninjalog_uploader_test.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. #!/usr/bin/env python3
  2. # Copyright (c) 2018 The Chromium Authors. All rights reserved.
  3. # Use of this source code is governed by a BSD-style license that can be
  4. # found in the LICENSE file.
  5. import json
  6. import os
  7. import sys
  8. import unittest
  9. import unittest.mock
  10. ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  11. sys.path.insert(0, ROOT_DIR)
  12. import ninjalog_uploader
  13. class NinjalogUploaderTest(unittest.TestCase):
  14. def test_IsGoogler(self):
  15. with unittest.mock.patch('subprocess.run') as run_mock:
  16. run_mock.return_value.returncode = 0
  17. run_mock.return_value.stdout = ('Login as foo@google.com\n'
  18. 'goma is ready to use')
  19. self.assertTrue(ninjalog_uploader.IsGoogler())
  20. with unittest.mock.patch('subprocess.run') as run_mock:
  21. run_mock.return_value.returncode = 1
  22. run_mock.return_value.stdout = 'Not logged in\n'
  23. self.assertFalse(ninjalog_uploader.IsGoogler())
  24. with unittest.mock.patch('subprocess.run') as run_mock:
  25. run_mock.return_value.returncode = 0
  26. run_mock.return_value.stdout = 'Login as foo@example.com\n'
  27. self.assertFalse(ninjalog_uploader.IsGoogler())
  28. def test_parse_gn_args(self):
  29. self.assertEqual(ninjalog_uploader.ParseGNArgs(json.dumps([])), {})
  30. # Extract current configs from GN's output json.
  31. self.assertEqual(ninjalog_uploader.ParseGNArgs(json.dumps([
  32. {
  33. 'current': {'value': 'true'},
  34. 'default': {'value': 'false'},
  35. 'name': 'is_component_build'
  36. },
  37. {
  38. 'default': {'value': '"x64"'},
  39. 'name': 'host_cpu'
  40. },
  41. ])), {
  42. 'is_component_build': 'true',
  43. 'host_cpu': '"x64"',
  44. })
  45. self.assertEqual(ninjalog_uploader.ParseGNArgs(json.dumps([
  46. {
  47. 'current': {'value': 'true'},
  48. 'default': {'value': 'false'},
  49. 'name': 'is_component_build'
  50. },
  51. {
  52. 'current': {'value': 'false'},
  53. 'default': {'value': 'false'},
  54. 'name': 'use_goma'
  55. },
  56. ])), {'is_component_build': 'true',
  57. 'use_goma': 'false'})
  58. def test_get_ninjalog(self):
  59. # No args => default to cwd.
  60. self.assertEqual(ninjalog_uploader.GetNinjalog(['ninja']),
  61. './.ninja_log')
  62. # Specified by -C case.
  63. self.assertEqual(
  64. ninjalog_uploader.GetNinjalog(['ninja', '-C', 'out/Release']),
  65. 'out/Release/.ninja_log')
  66. self.assertEqual(
  67. ninjalog_uploader.GetNinjalog(['ninja', '-Cout/Release']),
  68. 'out/Release/.ninja_log')
  69. # Invalid -C flag case.
  70. self.assertEqual(ninjalog_uploader.GetNinjalog(['ninja', '-C']),
  71. './.ninja_log')
  72. # Multiple target directories => use the last directory.
  73. self.assertEqual(ninjalog_uploader.GetNinjalog(
  74. ['ninja', '-C', 'out/Release', '-C', 'out/Debug']),
  75. 'out/Debug/.ninja_log')
  76. def test_get_build_target_from_command_line(self):
  77. self.assertEqual(ninjalog_uploader.GetBuildTargetFromCommandLine(
  78. ['ninja', 'chrome']), ['chrome'])
  79. self.assertEqual(ninjalog_uploader.GetBuildTargetFromCommandLine(
  80. ['ninja']), [])
  81. self.assertEqual(ninjalog_uploader.GetBuildTargetFromCommandLine(
  82. ['ninja', '-j', '1000', 'chrome']), ['chrome'])
  83. self.assertEqual(ninjalog_uploader.GetBuildTargetFromCommandLine(
  84. ['ninja', 'chrome', '-j', '1000']), ['chrome'])
  85. self.assertEqual(ninjalog_uploader.GetBuildTargetFromCommandLine(
  86. ['ninja', '-C', 'chrome']), [])
  87. self.assertEqual(ninjalog_uploader.GetBuildTargetFromCommandLine(
  88. ['ninja', '-Cout/Release', 'chrome']), ['chrome'])
  89. self.assertEqual(ninjalog_uploader.GetBuildTargetFromCommandLine(
  90. ['ninja', '-C', 'out/Release', 'chrome', 'all']), ['chrome', 'all'])
  91. def test_get_j_flag(self):
  92. self.assertEqual(ninjalog_uploader.GetJflag(
  93. ['ninja']), None)
  94. self.assertEqual(ninjalog_uploader.GetJflag(
  95. ['ninja','-j', '1000']), 1000)
  96. self.assertEqual(ninjalog_uploader.GetJflag(
  97. ['ninja','-j', '1000a']), None)
  98. self.assertEqual(ninjalog_uploader.GetJflag(
  99. ['ninja','-j', 'a']), None)
  100. self.assertEqual(ninjalog_uploader.GetJflag(
  101. ['ninja','-j1000']), 1000)
  102. self.assertEqual(ninjalog_uploader.GetJflag(
  103. ['ninja','-ja']), None)
  104. self.assertEqual(ninjalog_uploader.GetJflag(
  105. ['ninja','-j']), None)
  106. if __name__ == '__main__':
  107. unittest.main()