garbagecollection.test 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <?php
  2. /**
  3. * Test class for garbage collection of VDE export data.
  4. */
  5. class ViewsDataExportGarbageCollectionTest extends ViewsDataExportBaseTest {
  6. protected $profile = 'testing';
  7. public static function getInfo() {
  8. return array(
  9. 'name' => 'Garbage collection',
  10. 'description' => 'Checks garbage collection of batched exports',
  11. 'group' => 'Views Data Export',
  12. );
  13. }
  14. /**
  15. * Test that VDE export can only be downloaded by the user that created them.
  16. */
  17. public function testExportedGarbageCollection() {
  18. // Run a batched export.
  19. $path = 'vde_test/' . $this->randomName();
  20. list($view, $expected) = $this->getExportView($path);
  21. $display = &$view->display['vde_test']->handler;
  22. // Set this view to be batched.
  23. $display->override_option('use_batch', 'batch');
  24. // Save this view so we can hit the path.
  25. $view->save();
  26. // Ensure that the menu router system is rebuilt on the next page load.
  27. variable_set('menu_rebuild_needed', TRUE);
  28. $exports = $this->getNumberOfStoredExports();
  29. $files = $this->getNumberOfFiles();
  30. $this->assertBatchedExportEqual($path, $expected, 'Batched access export matched expected output.');
  31. // We should have created a new export and file.
  32. $this->assertEqual($this->getNumberOfStoredExports(), $exports + 1, 'A single new batched export was created');
  33. $this->assertEqual($this->getNumberOfFiles(), $files + 1, 'A single new temporary file was created');
  34. $middle_timestamp = time();
  35. sleep(1);
  36. $this->assertBatchedExportEqual($path, $expected, 'Batched access export matched expected output.');
  37. // We should have created a new export and file.
  38. $this->assertEqual($this->getNumberOfStoredExports(), $exports + 2, 'A single new batched export was created');
  39. $this->assertEqual($this->getNumberOfFiles(), $files + 2, 'A single new temporary file was created');
  40. // Garbage collect the first export only.
  41. views_data_export_garbage_collect(REQUEST_TIME - $middle_timestamp);
  42. $this->assertEqual($this->getNumberOfStoredExports(), $exports + 1, 'Garbage collection removed 1 old export');
  43. $this->assertEqual($this->getNumberOfFiles(), $files + 1, 'Garbage collection removed 1 old temporary file');
  44. }
  45. protected function getNumberOfStoredExports() {
  46. return (int) db_select('views_data_export')->countQuery()->execute()->fetchField();
  47. }
  48. protected function getNumberOfFiles() {
  49. return (int) db_select('file_managed')->countQuery()->execute()->fetchField();
  50. }
  51. /**
  52. * Build and return a basic view of the views_test table.
  53. *
  54. * @return view
  55. */
  56. protected function getBasicExportView() {
  57. views_include('view');
  58. // Create the basic view.
  59. $view = new view();
  60. $view->vid = 'new';
  61. $view->base_table = 'views_test';
  62. // Set up the fields we need.
  63. $display = $view->new_display('default', 'Master', 'default');
  64. $display->override_option('fields', array(
  65. 'id' => array(
  66. 'id' => 'id',
  67. 'table' => 'views_test',
  68. 'field' => 'id',
  69. 'relationship' => 'none',
  70. ),
  71. 'name' => array(
  72. 'id' => 'name',
  73. 'table' => 'views_test',
  74. 'field' => 'name',
  75. 'relationship' => 'none',
  76. ),
  77. 'age' => array(
  78. 'id' => 'age',
  79. 'table' => 'views_test',
  80. 'field' => 'age',
  81. 'relationship' => 'none',
  82. ),
  83. ));
  84. // Set up the sort order.
  85. $display->override_option('sorts', array(
  86. 'id' => array(
  87. 'order' => 'ASC',
  88. 'id' => 'id',
  89. 'table' => 'views_test',
  90. 'field' => 'id',
  91. 'relationship' => 'none',
  92. ),
  93. ));
  94. // Set up the pager.
  95. $display->override_option('pager', array(
  96. 'type' => 'none',
  97. 'options' => array('offset' => 0),
  98. ));
  99. return $view;
  100. }
  101. protected function getStylePluginName() {
  102. return 'views_data_export_txt';
  103. }
  104. protected function getExportView($path = 'vde_test') {
  105. // Create the basic view.
  106. $view = $this->getBasicExportView();
  107. $display = $view->new_display('views_data_export', 'Data export', 'vde_test');
  108. $display->override_option('style_plugin', $this->getStylePluginName());
  109. $display->override_option('path', $path);
  110. $expected = '[ID]
  111. 1
  112. [Name]
  113. John
  114. [Age]
  115. 25
  116. ----------------------------------------
  117. [ID]
  118. 2
  119. [Name]
  120. George
  121. [Age]
  122. 27
  123. ----------------------------------------
  124. [ID]
  125. 3
  126. [Name]
  127. Ringo
  128. [Age]
  129. 28
  130. ----------------------------------------
  131. [ID]
  132. 4
  133. [Name]
  134. Paul
  135. [Age]
  136. 26
  137. ----------------------------------------
  138. [ID]
  139. 5
  140. [Name]
  141. Meredith
  142. [Age]
  143. 30
  144. ----------------------------------------';
  145. return array(&$view, $expected);
  146. }
  147. }