ninjalog_uploader_test.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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. self.assertFalse(ninjalog_uploader.IsGoogler())
  23. with unittest.mock.patch('subprocess.run') as run_mock:
  24. run_mock.return_value.returncode = 0
  25. run_mock.return_value.stdout = ''
  26. self.assertFalse(ninjalog_uploader.IsGoogler())
  27. with unittest.mock.patch('subprocess.run') as run_mock:
  28. run_mock.return_value.returncode = 0
  29. run_mock.return_value.stdout = 'Login as foo@example.com\n'
  30. self.assertFalse(ninjalog_uploader.IsGoogler())
  31. def test_parse_gn_args(self):
  32. self.assertEqual(ninjalog_uploader.ParseGNArgs(json.dumps([])), {})
  33. # Extract current configs from GN's output json.
  34. self.assertEqual(
  35. ninjalog_uploader.ParseGNArgs(
  36. json.dumps([
  37. {
  38. 'current': {
  39. 'value': 'true'
  40. },
  41. 'default': {
  42. 'value': 'false'
  43. },
  44. 'name': 'is_component_build'
  45. },
  46. {
  47. 'default': {
  48. 'value': '"x64"'
  49. },
  50. 'name': 'host_cpu'
  51. },
  52. ])), {
  53. 'is_component_build': 'true',
  54. 'host_cpu': '"x64"',
  55. })
  56. self.assertEqual(
  57. ninjalog_uploader.ParseGNArgs(
  58. json.dumps([
  59. {
  60. 'current': {
  61. 'value': 'true'
  62. },
  63. 'default': {
  64. 'value': 'false'
  65. },
  66. 'name': 'is_component_build'
  67. },
  68. {
  69. 'current': {
  70. 'value': 'false'
  71. },
  72. 'default': {
  73. 'value': 'false'
  74. },
  75. 'name': 'use_goma'
  76. },
  77. ])), {
  78. 'is_component_build': 'true',
  79. 'use_goma': 'false'
  80. })
  81. def test_get_ninjalog(self):
  82. # No args => default to cwd.
  83. self.assertEqual(ninjalog_uploader.GetNinjalog(['ninja']),
  84. './.ninja_log')
  85. # Specified by -C case.
  86. self.assertEqual(
  87. ninjalog_uploader.GetNinjalog(['ninja', '-C', 'out/Release']),
  88. 'out/Release/.ninja_log')
  89. self.assertEqual(
  90. ninjalog_uploader.GetNinjalog(['ninja', '-Cout/Release']),
  91. 'out/Release/.ninja_log')
  92. # Invalid -C flag case.
  93. self.assertEqual(ninjalog_uploader.GetNinjalog(['ninja', '-C']),
  94. './.ninja_log')
  95. # Multiple target directories => use the last directory.
  96. self.assertEqual(
  97. ninjalog_uploader.GetNinjalog(
  98. ['ninja', '-C', 'out/Release', '-C', 'out/Debug']),
  99. 'out/Debug/.ninja_log')
  100. def test_get_build_target_from_command_line(self):
  101. self.assertEqual(
  102. ninjalog_uploader.GetBuildTargetFromCommandLine(
  103. ['python3', 'ninja.py', 'chrome']), ['chrome'])
  104. self.assertEqual(
  105. ninjalog_uploader.GetBuildTargetFromCommandLine(
  106. ['python3', 'ninja.py']), [])
  107. self.assertEqual(
  108. ninjalog_uploader.GetBuildTargetFromCommandLine(
  109. ['python3', 'ninja.py', '-j', '1000', 'chrome']), ['chrome'])
  110. self.assertEqual(
  111. ninjalog_uploader.GetBuildTargetFromCommandLine(
  112. ['python3', 'ninja.py', 'chrome', '-j', '1000']), ['chrome'])
  113. self.assertEqual(
  114. ninjalog_uploader.GetBuildTargetFromCommandLine(
  115. ['python3', 'ninja.py', '-C', 'chrome']), [])
  116. self.assertEqual(
  117. ninjalog_uploader.GetBuildTargetFromCommandLine(
  118. ['python3', 'ninja.py', '-Cout/Release', 'chrome']), ['chrome'])
  119. self.assertEqual(
  120. ninjalog_uploader.GetBuildTargetFromCommandLine(
  121. ['python3', 'ninja.py', '-C', 'out/Release', 'chrome', 'all']),
  122. ['chrome', 'all'])
  123. @unittest.skipIf(sys.platform == 'win32', 'posix path test')
  124. def test_get_build_target_from_command_line_filter_posix(self):
  125. self.assertEqual(
  126. ninjalog_uploader.GetBuildTargetFromCommandLine([
  127. 'python3', 'ninja.py', '-C', 'out/Release', 'chrome', 'all',
  128. '/path/to/foo', '-p'
  129. ]), ['chrome', 'all'])
  130. @unittest.skipUnless(sys.platform == 'win32', 'Windows path test')
  131. def test_get_build_target_from_command_line_filter_win(self):
  132. self.assertEqual(
  133. ninjalog_uploader.GetBuildTargetFromCommandLine([
  134. 'python3', 'ninja.py', '-C', 'out/Release', 'chrome', 'all',
  135. 'C:\\path\\to\\foo', '-p'
  136. ]), ['chrome', 'all'])
  137. def test_get_j_flag(self):
  138. self.assertEqual(ninjalog_uploader.GetJflag(['ninja']), None)
  139. self.assertEqual(ninjalog_uploader.GetJflag(['ninja', '-j', '1000']),
  140. 1000)
  141. self.assertEqual(ninjalog_uploader.GetJflag(['ninja', '-j', '1000a']),
  142. None)
  143. self.assertEqual(ninjalog_uploader.GetJflag(['ninja', '-j', 'a']), None)
  144. self.assertEqual(ninjalog_uploader.GetJflag(['ninja', '-j1000']), 1000)
  145. self.assertEqual(ninjalog_uploader.GetJflag(['ninja', '-ja']), None)
  146. self.assertEqual(ninjalog_uploader.GetJflag(['ninja', '-j']), None)
  147. if __name__ == '__main__':
  148. unittest.main()