generate_config.py 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #!/usr/bin/env python
  2. import collections, json, os, textwrap
  3. # This script generates the benchmark_config and setup_*.py files.
  4. # To add new tests, modify the `configurations` and `test_urls` tables.
  5. # Each line corresponds to a test application.
  6. # Format is: (language, orm, (opsys, ...), (test, ...))
  7. # See the dir_name logic below to see the directory name for each test application.
  8. configurations = [
  9. ('Java', None, ['Linux'], ['json']),
  10. ('Java', 'Ebean', ['Linux'], ['db', 'query']),
  11. ('Java', 'JPA', ['Linux'], ['db', 'query', 'fortune', 'update', 'plaintext']),
  12. ('Java', 'JPA HikariCP', ['Linux'], ['db', 'query', 'fortune', 'update', 'plaintext']),
  13. ('Scala', None, ['Linux'], ['json']),
  14. ('Scala', 'Anorm', ['Linux', 'Windows'], ['db', 'query', 'fortune', 'update']),
  15. ('Scala', 'Slick', ['Linux'], ['db', 'query', 'fortune', 'update']),
  16. ]
  17. # All play2 test applications must use the same URLs.
  18. test_urls = {
  19. 'json': '/json',
  20. 'db': '/db',
  21. 'query': '/queries?queries=',
  22. 'fortune': '/fortunes',
  23. 'update': '/update?queries=',
  24. 'plaintext': '/plaintext',
  25. }
  26. langs = {
  27. 'Java': ['Java', 'play2-java'],
  28. 'Scala': ['Scala', 'play2-scala']
  29. }
  30. def pathForLang(lang):
  31. return os.path.join(frameworksPath(), *langs[lang])
  32. def frameworksPath():
  33. 'Get the absolute path of ROOT/frameworks'
  34. return os.path.abspath(os.path.join(__file__, '..', '..', '..'))
  35. lang_test_configs = {}
  36. for lang, _ in langs.iteritems():
  37. lang_test_configs[lang] = collections.OrderedDict()
  38. for lang, orm, opsyses, tests in configurations:
  39. dir_name = 'play2-' + lang.lower() + (('-'+orm.replace(' ', '-').lower()) if orm else '')
  40. setup_name = 'setup_' + lang.lower() + (('_'+orm.replace(' ', '_').lower()) if orm else '')
  41. setup_path = os.path.join(pathForLang(lang), setup_name+'.py')
  42. print 'Generating', setup_path
  43. with open(setup_path, 'w') as f:
  44. f.write(textwrap.dedent("""
  45. # This file was generated by frameworks/Java/play2-java/generate_config.py.
  46. # Do not edit this file directly, use the script to regenerate.
  47. from .setup_common import make_setup_for_dir
  48. make_setup_for_dir(globals(), '"""+dir_name+"""')
  49. """))
  50. for opsys in opsyses:
  51. if len(opsyses) == 1:
  52. test_name = lang.lower() + (('-'+orm.replace(' ', '-').lower()) if orm else '')
  53. else:
  54. test_name = lang.lower() + (('-'+orm.replace(' ', '-').lower()) if orm else '') + '-'+opsys.lower()
  55. test_config_json = collections.OrderedDict([
  56. ('display_name', 'play2-'+test_name),
  57. ('setup_file', setup_name),
  58. ('framework', 'play2'),
  59. ('language', lang),
  60. ('orm', 'Full' if orm else 'Raw'),
  61. ('os', opsys),
  62. ('database', 'MySQL' if orm else 'None'),
  63. ('approach', 'Realistic'),
  64. ('classification', 'Fullstack'),
  65. ('platform', 'Netty'),
  66. ('webserver', 'None'),
  67. ('database_os', 'Linux'),
  68. ('notes', ''),
  69. ('versus', 'netty'),
  70. ('port', '9000'),
  71. ])
  72. for test in tests:
  73. test_config_json[test+'_url'] = test_urls[test]
  74. lang_test_configs[lang][test_name] = test_config_json
  75. for lang, _ in langs.iteritems():
  76. benchmark_config_path = os.path.join(pathForLang(lang), 'benchmark_config')
  77. print 'Generating', benchmark_config_path
  78. with open(benchmark_config_path, 'w') as f:
  79. json_str = json.dumps({
  80. 'framework': 'play2',
  81. 'tests': [lang_test_configs[lang]]
  82. }, indent=2)
  83. f.write(json_str)