PageRenderTime 25ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/packages/constraint-solver/benchmark-tests.js

https://gitlab.com/0072016/SDK-JavaScript-
JavaScript | 324 lines | 294 code | 22 blank | 8 comment | 7 complexity | ae67d8a8cc3898a6b1cfd444776081e4 MD5 | raw file
  1. // "Benchmarks" here are just slow tests of the constraint solver.
  2. // You can see roughly how long they take by looking at how long the
  3. // test takes to run. Because they are slow, they don't run when you
  4. // run tests unless you turn them on with an environment variable.
  5. // The benchmarks can totally be run on the client, it's just harder to
  6. // detect the environment variable.
  7. var runBenchmarks = Meteor.isServer && !!process.env.CONSTRAINT_SOLVER_BENCHMARK;
  8. var railsCatalog = getCatalogStub(railsGems);
  9. var sinatraCatalog = getCatalogStub(sinatraGems);
  10. runBenchmarks && Tinytest.add("constraint solver - benchmark on gems - sinatra", function (test) {
  11. var r = new ConstraintSolver.PackagesResolver(sinatraCatalog);
  12. var args = splitArgs({
  13. 'capistrano': '2.14.2',
  14. 'data-mapper': '1.2.0',
  15. 'dm-core': '1.2.0',
  16. 'dm-sqlite-adapter': '1.2.0',
  17. 'dm-timestamps': '1.2.0',
  18. 'haml': '3.1.7',
  19. 'sass': '3.2.1',
  20. 'shotgun': '0.9.0',
  21. 'sinatra': '1.3.5',
  22. 'sqlite3': '1.3.7'
  23. });
  24. r.resolve(args.dependencies, args.constraints);
  25. });
  26. runBenchmarks && Tinytest.add("constraint solver - benchmark on gems - rails", function (test) {
  27. var r = new ConstraintSolver.PackagesResolver(railsCatalog);
  28. var args = splitArgs({
  29. 'rails': '4.0.4'
  30. });
  31. r.resolve(args.dependencies, args.constraints);
  32. });
  33. runBenchmarks && Tinytest.add("constraint solver - benchmark on gems - rails, gitlabhq", function (test) {
  34. var r = new ConstraintSolver.PackagesResolver(railsCatalog);
  35. var args = splitArgs({
  36. 'rails': '4.0.0',
  37. 'protected-attributes': null,
  38. 'rails-observers': null,
  39. 'actionpack-page-caching': null,
  40. 'actionpack-action-caching': null,
  41. 'default-value-for': '3.0.0',
  42. 'mysql2': null,
  43. 'devise': '3.0.4',
  44. 'devise-async': '0.8.0',
  45. 'omniauth': '1.1.3',
  46. 'omniauth-google-oauth2': null,
  47. 'omniauth-twitter': null,
  48. 'omniauth-github': null,
  49. 'gitlab-git': '5.7.1',
  50. 'gitlab-grack': '2.0.0',
  51. 'gitlab-omniauth-ldap': '1.0.4',
  52. 'gitlab-gollum-lib': '1.1.0',
  53. 'gitlab-linguist': '3.0.0',
  54. 'grape': '0.6.1',
  55. 'rack-cors': null,
  56. 'email-validator': '1.4.0',
  57. 'stamp': null,
  58. 'enumerize': null,
  59. 'kaminari': '0.15.1',
  60. 'haml-rails': null,
  61. 'carrierwave': null,
  62. 'fog': '1.3.1',
  63. 'six': null,
  64. 'seed-fu': null,
  65. 'redcarpet': '2.2.2',
  66. 'github-markup': null,
  67. 'asciidoctor': null,
  68. 'unicorn': '4.6.3',
  69. 'unicorn-worker-killer': null,
  70. 'state-machine': null,
  71. 'acts-as-taggable-on': null,
  72. 'slim': null,
  73. 'sinatra': null,
  74. 'sidekiq': null,
  75. 'httparty': null,
  76. 'colored': null,
  77. 'settingslogic': null,
  78. 'foreman': null,
  79. 'version-sorter': null,
  80. 'redis-rails': null,
  81. 'tinder': '1.9.2',
  82. 'hipchat': '0.14.0',
  83. 'gemnasium-gitlab-service': '0.2.1',
  84. 'slack-notifier': '0.2.0',
  85. 'd3-rails': '3.1.4',
  86. 'underscore-rails': '1.4.4',
  87. 'sanitize': null,
  88. 'rack-attack': null,
  89. 'ace-rails-ap': null,
  90. 'sass-rails': null,
  91. 'coffee-rails': null,
  92. 'uglifier': null,
  93. 'therubyracer': null,
  94. 'turbolinks': null,
  95. 'jquery-turbolinks': null,
  96. 'select2-rails': null,
  97. 'jquery-atwho-rails': '0.3.3',
  98. 'jquery-rails': '2.1.3',
  99. 'jquery-ui-rails': '2.0.2',
  100. 'modernizr': '2.6.2',
  101. 'raphael-rails': '2.1.2',
  102. 'bootstrap-sass': '3.0.0',
  103. 'font-awesome-rails': '3.2.0',
  104. 'gitlab-emoji': '0.0.1',
  105. 'gon': '5.0.0'
  106. });
  107. r.resolve(args.dependencies, args.constraints);
  108. });
  109. runBenchmarks && Tinytest.add("constraint solver - benchmark on gems - rails, gitlabhq, additions to the existing smaller solution", function (test) {
  110. var r = new ConstraintSolver.PackagesResolver(railsCatalog);
  111. var args = splitArgs({
  112. 'rails': '4.0.0',
  113. 'protected-attributes': null,
  114. 'rails-observers': null,
  115. 'actionpack-page-caching': null,
  116. 'actionpack-action-caching': null,
  117. 'default-value-for': '3.0.0',
  118. 'mysql2': null,
  119. 'devise': '3.0.4',
  120. 'devise-async': '0.8.0',
  121. 'omniauth': '1.1.3',
  122. 'omniauth-google-oauth2': null,
  123. 'omniauth-twitter': null,
  124. 'omniauth-github': null,
  125. 'gitlab-git': '5.7.1',
  126. 'gitlab-grack': '2.0.0',
  127. 'gitlab-omniauth-ldap': '1.0.4',
  128. 'gitlab-gollum-lib': '1.1.0',
  129. 'gitlab-linguist': '3.0.0',
  130. 'grape': '0.6.1',
  131. 'rack-cors': null,
  132. 'email-validator': '1.4.0',
  133. 'stamp': null,
  134. 'enumerize': null,
  135. 'kaminari': '0.15.1',
  136. 'haml-rails': null,
  137. 'carrierwave': null,
  138. 'fog': '1.3.1',
  139. 'six': null,
  140. 'seed-fu': null,
  141. 'redcarpet': '2.2.2',
  142. 'github-markup': null,
  143. 'asciidoctor': null,
  144. 'unicorn': '4.6.3',
  145. 'unicorn-worker-killer': null,
  146. 'state-machine': null,
  147. 'acts-as-taggable-on': null,
  148. 'slim': null,
  149. 'sinatra': null,
  150. 'sidekiq': null,
  151. 'httparty': null,
  152. 'colored': null,
  153. 'settingslogic': null,
  154. 'foreman': null,
  155. 'version-sorter': null,
  156. 'redis-rails': null,
  157. 'tinder': '1.9.2',
  158. 'hipchat': '0.14.0',
  159. 'gemnasium-gitlab-service': '0.2.1',
  160. 'slack-notifier': '0.2.0',
  161. 'd3-rails': '3.1.4',
  162. 'underscore-rails': '1.4.4',
  163. 'sanitize': null,
  164. 'rack-attack': null,
  165. 'ace-rails-ap': null,
  166. 'sass-rails': null,
  167. 'coffee-rails': null,
  168. 'uglifier': null,
  169. 'therubyracer': null,
  170. 'turbolinks': null,
  171. 'jquery-turbolinks': null,
  172. 'select2-rails': null,
  173. 'jquery-atwho-rails': '0.3.3',
  174. 'jquery-rails': '2.1.3',
  175. 'jquery-ui-rails': '2.0.2',
  176. 'modernizr': '2.6.2',
  177. 'raphael-rails': '2.1.2',
  178. 'bootstrap-sass': '3.0.0',
  179. 'font-awesome-rails': '3.2.0',
  180. 'gitlab-emoji': '0.0.1',
  181. 'gon': '5.0.0'
  182. });
  183. var previousSolution = {
  184. "actionmailer": "4.0.0",
  185. "actionpack": "4.0.0",
  186. "activemodel": "4.0.0",
  187. "activerecord": "4.0.0",
  188. "activerecord-deprecated-finders": "1.0.3",
  189. "activesupport": "4.0.0",
  190. "arel": "4.0.2",
  191. "asciidoctor": "0.1.4",
  192. "bcrypt": "3.1.7",
  193. "bcrypt-ruby": "3.1.5",
  194. "builder": "3.1.4",
  195. "carrierwave": "0.10.0",
  196. "coffee-rails": "4.0.1",
  197. "coffee-script": "2.2.0",
  198. "coffee-script-source": "1.7.0",
  199. "d3-rails": "3.1.10",
  200. "default-value-for": "3.0.0",
  201. "devise": "3.0.4",
  202. "devise-async": "0.8.0",
  203. "erubis": "2.7.0",
  204. "execjs": "2.0.2",
  205. "faraday": "0.9.0",
  206. "github-markup": "1.1.0",
  207. "haml": "4.0.5",
  208. "haml-rails": "0.5.3",
  209. "hashie": "2.0.3",
  210. "hike": "1.2.3",
  211. "httpauth": "0.2.1",
  212. "i18n": "0.6.9",
  213. "jquery-turbolinks": "2.0.2",
  214. "json": "1.8.1",
  215. "jwt": "0.1.10",
  216. "kaminari": "0.15.1",
  217. "mail": "2.5.4",
  218. "mime-types": "1.25.1",
  219. "minitest": "4.7.5",
  220. "multi-json": "1.9.0",
  221. "multipart-post": "2.0.0",
  222. "oauth": "0.4.7",
  223. "oauth2": "0.8.1",
  224. "omniauth": "1.1.4",
  225. "omniauth-github": "1.0.3",
  226. "omniauth-google-oauth2": "0.2.2",
  227. "omniauth-oauth": "1.0.1",
  228. "omniauth-oauth2": "1.1.1",
  229. "omniauth-twitter": "1.0.1",
  230. "orm-adapter": "0.5.0",
  231. "polyglot": "0.3.4",
  232. "posix-spawn": "0.3.8",
  233. "protected-attributes": "1.0.7",
  234. "rack": "1.5.2",
  235. "rack-test": "0.6.2",
  236. "rails": "4.0.4",
  237. "rails-observers": "0.1.2",
  238. "railties": "4.0.0",
  239. "rake": "10.1.1",
  240. "redcarpet": "2.2.2",
  241. "ref": "1.0.5",
  242. "sass": "3.2.17",
  243. "sass-rails": "4.0.2",
  244. "seed-fu": "2.3.0",
  245. "six": "0.2.0",
  246. "sprockets": "2.11.0",
  247. "sprockets-rails": "2.0.1",
  248. "therubyracer": "0.12.1",
  249. "thor": "0.19.1",
  250. "thread-safe": "0.3.1",
  251. "tilt": "1.4.1",
  252. "treetop": "1.4.15",
  253. "turbolinks": "2.2.1",
  254. "tzinfo": "0.3.39",
  255. "uglifier": "2.5.0",
  256. "warden": "1.2.3"
  257. };
  258. var solution = r.resolve(args.dependencies, args.constraints, { previousSolution: previousSolution }).answer;
  259. // check that root deps are the same
  260. _.each(args.dependencies, function (dep) {
  261. if (previousSolution[dep])
  262. test.equal(solution[dep], previousSolution[dep], dep);
  263. });
  264. });
  265. // Given a set of gems definitions returns a Catalog-like object
  266. function getCatalogStub (gems) {
  267. return {
  268. getSortedVersionRecords: function (name) {
  269. var versions = _.chain(gems)
  270. .filter(function (pv) { return pv.name === name; })
  271. .pluck('number')
  272. .filter(function (v) {
  273. return PackageVersion.getValidServerVersion(v);
  274. })
  275. .sort(PackageVersion.compare)
  276. .uniq(true)
  277. .value();
  278. return _.map(versions, function (version) {
  279. var gem = _.find(gems, function (pv) {
  280. return pv.name === name && pv.number === version;
  281. });
  282. var packageVersion = {
  283. packageName: gem.name,
  284. version: gem.number,
  285. dependencies: {}
  286. };
  287. _.each(gem.dependencies, function (dep) {
  288. var name = dep[0];
  289. var constraint = dep[1];
  290. packageVersion.dependencies[name] = {
  291. constraint: constraint,
  292. references: [{
  293. "arch": "web"
  294. }, {
  295. "arch": "os" }]
  296. };
  297. });
  298. return packageVersion;
  299. });
  300. }
  301. };
  302. }