resultsDatastore.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. var fs = require('fs');
  2. var rimraf = require('rimraf');
  3. var path = require('path');
  4. var Q = require('q');
  5. function ResultsDatastore() {
  6. 'use strict';
  7. var resultFileName = 'results.json';
  8. var resultsFolderName = 'results';
  9. var resultsDir = path.join(__dirname, '..', '..', '..', resultsFolderName);
  10. this.saveResult = function(testResults) {
  11. var promise = createResultFolder(testResults.runId);
  12. promise.then(function() {
  13. var resultFilePath = path.join(resultsDir, testResults.runId, resultFileName);
  14. return Q.nfcall(fs.writeFile, resultFilePath, JSON.stringify(testResults, null, 2));
  15. });
  16. return promise;
  17. };
  18. this.getResult = function(runId) {
  19. var resultFilePath = path.join(resultsDir, runId, resultFileName);
  20. return Q.nfcall(fs.readFile, resultFilePath, {encoding: 'utf8'}).then(function(data) {
  21. return JSON.parse(data);
  22. });
  23. };
  24. this.deleteResult = function(runId) {
  25. var folder = path.join(resultsDir, runId);
  26. return Q.nfcall(rimraf, folder);
  27. };
  28. // The folder /results/folderName/
  29. function createResultFolder(folderName) {
  30. var folder = path.join(resultsDir, folderName);
  31. return createGlobalFolder().then(function() {
  32. return Q.nfcall(fs.mkdir, folder);
  33. });
  34. }
  35. // The folder /results/
  36. function createGlobalFolder() {
  37. var deferred = Q.defer();
  38. // Create the results folder if it doesn't exist
  39. fs.exists(resultsDir, function(exists) {
  40. if (exists) {
  41. deferred.resolve();
  42. } else {
  43. fs.mkdir(resultsDir, function(err) {
  44. if (err) {
  45. deferred.reject(err);
  46. } else {
  47. deferred.resolve();
  48. }
  49. });
  50. }
  51. });
  52. return deferred.promise;
  53. }
  54. }
  55. module.exports = ResultsDatastore;