/atlasboard/test/test-job-manager.js

https://gitlab.com/etteplan/dynamic-dashboard · JavaScript · 290 lines · 229 code · 52 blank · 9 comment · 5 complexity · 3e849bf26b6e40623d90a7695621adba MD5 · raw file

  1. var assert = require ('assert');
  2. var path = require ('path');
  3. var jobs_manager = require('../lib/job-manager');
  4. describe ('job manager', function(){
  5. var packagesLocalFolder = path.join(process.cwd(), "/test/fixtures/packages");
  6. var packagesWithInvalidJob = path.join(process.cwd(), "/test/fixtures/package_invalid_job");
  7. var packagesWithInvalidDashboard = path.join(process.cwd(), "/test/fixtures/package_invalid_format");
  8. var packagesWithNoWidgetField = path.join(process.cwd(), "/test/fixtures/package_dashboard_with_no_widgets");
  9. var packagesWithNoLayoutField = path.join(process.cwd(), "/test/fixtures/package_dashboard_with_no_layout");
  10. var packagesNoSharedStateForJobs = path.join(process.cwd(), "/test/fixtures/package_job_sharing_state");
  11. var packageMultipleConfigs = path.join(process.cwd(), "/test/fixtures/package_with_multiple_configs");
  12. //we use only wallboard local folder, since we don´t want our tests to depend on atlasboard jobs
  13. //var packagesAtlasboardFolder = path.join(process.cwd(), "/packages");
  14. var configPath = path.join(process.cwd(), "/test/fixtures/config");
  15. var invalidConfigPath = path.join(process.cwd(), "/test/fixtures/invalid-config");
  16. var validJsonWithInvalidFormatConfigPath = path.join(process.cwd(), "/test/fixtures/valid-json-invalid-structure-config");
  17. var noExistentConfigPath = path.join(process.cwd(), "/test/fixtures/THIS-PATH-DOES-NOT-EXISTS");
  18. it('should load dashboard', function(done){
  19. var options = {
  20. packagesPath: [packagesLocalFolder],
  21. configPath: configPath
  22. };
  23. jobs_manager.getJobs(options, function(err, job_workers){
  24. assert.ok(!err, err);
  25. assert.equal(job_workers.length, 8);
  26. assert.equal(job_workers[0].dashboard_name, "test_dashboard1");
  27. assert.equal(job_workers[1].dashboard_name, "test_dashboard1");
  28. assert.equal(job_workers[2].dashboard_name, "test_dashboard2");
  29. assert.equal(job_workers[3].dashboard_name, "test_dashboard2");
  30. assert.equal(job_workers[4].dashboard_name, "test_dashboard2");
  31. assert.equal(job_workers[5].dashboard_name, "other_test_dashboard1");
  32. done();
  33. });
  34. });
  35. it('should not load filtered dashboards', function(done){
  36. var options = {
  37. packagesPath: [packagesLocalFolder],
  38. configPath: configPath,
  39. filters: {
  40. dashboardFilter: "other_"
  41. }
  42. };
  43. jobs_manager.getJobs(options, function(err, job_workers){
  44. assert.ok(!err, err);
  45. assert.equal(job_workers.length, 3); // 4 job items, 3 valid jobs
  46. assert.equal(job_workers[0].dashboard_name, "other_test_dashboard1");
  47. assert.equal(job_workers[1].dashboard_name, "other_test_dashboards2");
  48. assert.equal(job_workers[2].dashboard_name, "other_test_dashboards2");
  49. done();
  50. });
  51. });
  52. it('should not load filtered jobs', function(done){
  53. var options = {
  54. packagesPath: [packagesLocalFolder],
  55. configPath: configPath,
  56. filters: {
  57. jobFilter: "job1"
  58. }
  59. };
  60. jobs_manager.getJobs(options, function(err, job_workers){
  61. assert.ok(!err, err);
  62. assert.equal(job_workers.length, 3);
  63. assert.equal(job_workers[0].dashboard_name, "test_dashboard1");
  64. assert.equal(job_workers[1].dashboard_name, "test_dashboard2");
  65. assert.equal(job_workers[2].dashboard_name, "other_test_dashboards2");
  66. done();
  67. });
  68. });
  69. it('should be able to get disable widgets', function(done){
  70. var options = {
  71. packagesPath: [packagesLocalFolder],
  72. configPath: configPath
  73. };
  74. jobs_manager.getJobs(options, function(err, job_workers){
  75. assert.ok(!err);
  76. var disabled_jobs = job_workers.filter(function(job){ return job.widget_item.enabled;});
  77. assert.equal(disabled_jobs.length, 6);
  78. done();
  79. });
  80. });
  81. it('should not return error if invalid dashboard is found since it has been filtered by item manager before', function(done){
  82. var options = {
  83. packagesPath: [packagesWithInvalidDashboard],
  84. configPath: configPath
  85. };
  86. jobs_manager.getJobs(options, function(err, job_workers){
  87. assert.ok(!err);
  88. assert.equal(job_workers.length, 0);
  89. done();
  90. });
  91. });
  92. it('should return error if layout field is not found in dashboard file', function(done){
  93. var options = {
  94. packagesPath: [packagesWithNoLayoutField],
  95. configPath: configPath
  96. };
  97. jobs_manager.getJobs(options, function(err, job_workers){
  98. assert.ok(err.indexOf('No layout field found')>-1);
  99. done();
  100. });
  101. });
  102. it('should return error if widgets field is not found in dashboard file', function(done){
  103. var options = {
  104. packagesPath: [packagesWithNoWidgetField],
  105. configPath: configPath
  106. };
  107. jobs_manager.getJobs(options, function(err, job_workers){
  108. assert.ok(err.indexOf('No widgets field found')>-1);
  109. done();
  110. });
  111. });
  112. it('should return error if invalid job is found on dashboard', function(done){
  113. var options = {
  114. packagesPath: [packagesWithInvalidJob],
  115. configPath: configPath
  116. };
  117. jobs_manager.getJobs(options, function(err, job_workers){
  118. assert.ok(err);
  119. done();
  120. });
  121. });
  122. it('should have an onRun function', function(done){
  123. var options = {
  124. packagesPath: [packagesLocalFolder],
  125. configPath: configPath
  126. };
  127. jobs_manager.getJobs(options, function(err, job_workers){
  128. assert.ok(!err);
  129. job_workers.forEach(function(job){
  130. assert.ok(typeof job.onRun === "function" );
  131. });
  132. done();
  133. });
  134. });
  135. it('should have config', function(done){
  136. var options = {
  137. packagesPath: [packagesLocalFolder],
  138. configPath: configPath
  139. };
  140. jobs_manager.getJobs(options, function(err, job_workers){
  141. assert.ok(!err);
  142. // job_conf1 is defined in general config file (shared config)
  143. // the rest of them are defined in the related dashboard file.
  144. job_workers.forEach(function(job){
  145. assert.ok(job.config.interval);
  146. });
  147. done();
  148. });
  149. });
  150. it('should be able to extend global config file with custom dashboards properties', function(done){
  151. var options = {
  152. packagesPath: [packagesLocalFolder],
  153. configPath: configPath
  154. };
  155. jobs_manager.getJobs(options, function(err, job_workers){
  156. assert.ok(!err);
  157. // job_conf1 should have some properties from the global config files
  158. // and other properties from the dashboard file
  159. var jobsWithJob1Config = job_workers.filter(function(job){return job.widget_item.config === "job1_conf";});
  160. assert.equal(jobsWithJob1Config.length, 3);
  161. // test_dasboard1 has aditional "other_configuration_option_to_extend_test_dashboard1" config key
  162. assert.ok(jobsWithJob1Config[0].config.interval);
  163. assert.ok(jobsWithJob1Config[0].config.other_configuration_option_to_extend_test_dashboard1);
  164. assert.ok(!jobsWithJob1Config[0].config.other_configuration_option_to_extend_test_dashboard2);
  165. // test_dasboard1 has aditional "other_configuration_option_to_extend_test_dashboard2" config key
  166. assert.ok(jobsWithJob1Config[1].config.interval);
  167. assert.ok(!jobsWithJob1Config[1].config.other_configuration_option_to_extend_test_dashboard1);
  168. assert.ok(jobsWithJob1Config[1].config.other_configuration_option_to_extend_test_dashboard2);
  169. // other_test_dashboard2 doesn´t have any of those
  170. assert.ok(jobsWithJob1Config[2].config.interval);
  171. assert.ok(!jobsWithJob1Config[2].config.other_configuration_option_to_extend_test_dashboard1);
  172. assert.ok(!jobsWithJob1Config[2].config.other_configuration_option_to_extend_test_dashboard2);
  173. done();
  174. });
  175. });
  176. it('should have independent states for each job', function(done){
  177. var options = {
  178. packagesPath: [packagesNoSharedStateForJobs],
  179. configPath: configPath
  180. };
  181. jobs_manager.getJobs(options, function(err, job_workers){
  182. assert.ok(!err, err);
  183. assert.equal(job_workers.length, 2);
  184. job_workers[0].onRun(null, null, function(err, data){
  185. assert.ok(!data);
  186. job_workers[1].onRun(null, null, function(err, data){
  187. assert.ok(!data);
  188. done();
  189. });
  190. });
  191. });
  192. });
  193. it('should not work with an invalid global config file', function(done){
  194. var options = {
  195. packagesPath: [packagesNoSharedStateForJobs],
  196. configPath: invalidConfigPath
  197. };
  198. jobs_manager.getJobs(options, function(err, job_workers){
  199. assert.ok(err);
  200. done();
  201. });
  202. });
  203. it('should not work with an global config file with wrong structure', function(done){
  204. var options = {
  205. packagesPath: [packagesNoSharedStateForJobs],
  206. configPath: validJsonWithInvalidFormatConfigPath
  207. };
  208. jobs_manager.getJobs(options, function(err, job_workers){
  209. assert.ok(err);
  210. done();
  211. });
  212. });
  213. it('should work with no global config file', function(done){
  214. var options = {
  215. packagesPath: [packagesNoSharedStateForJobs],
  216. configPath: noExistentConfigPath
  217. };
  218. jobs_manager.getJobs(options, function(err, job_workers){
  219. assert.ok(!err, err);
  220. done();
  221. });
  222. });
  223. it('should work with multiple configs', function(done){
  224. var options = {
  225. packagesPath: [packageMultipleConfigs],
  226. configPath: configPath
  227. };
  228. jobs_manager.getJobs(options, function(err, job_workers){
  229. var job = job_workers[0];
  230. var cfg = job.config;
  231. assert.equal(cfg.interval, 30000, 'Config B interval should override config A interval');
  232. assert.equal(cfg.config_a_unique, 'unique-config-1', 'Config A unique value should be available');
  233. assert.equal(cfg.config_b_unique, 'unique-config-2', 'Config B unique value should be available');
  234. assert.equal(cfg.jira_server, 'https://jira.atlassian.com', 'Global config value should be available');
  235. done();
  236. });
  237. });
  238. });