StreamWrapperTest.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. namespace yiiunit\extensions\mongodb\file;
  3. use yiiunit\extensions\mongodb\TestCase;
  4. class StreamWrapperTest extends TestCase
  5. {
  6. protected function tearDown()
  7. {
  8. $connection = $this->getConnection();
  9. if (in_array($connection->fileStreamProtocol, stream_get_wrappers())) {
  10. stream_wrapper_unregister($connection->fileStreamProtocol);
  11. }
  12. $this->dropFileCollection('fs');
  13. parent::tearDown();
  14. }
  15. // Tests :
  16. public function testCreateFromDownload()
  17. {
  18. $collection = $this->getConnection()->getFileCollection();
  19. $upload = $collection->createUpload();
  20. $document = $upload->addContent('test content')->complete();
  21. $document = $collection->findOne(['_id' => $document['_id']]);
  22. $resource = $document['file']->toResource();
  23. $this->assertTrue(is_resource($resource));
  24. $this->assertEquals('test content', stream_get_contents($resource));
  25. }
  26. public function testWriteResource()
  27. {
  28. $connection = $this->getConnection();
  29. $this->mockApplication([
  30. 'components' => [
  31. 'mongodb' => $connection
  32. ],
  33. ]);
  34. $connection->registerFileStreamWrapper(true);
  35. $databaseName = $connection->getDefaultDatabaseName();
  36. $url = "gridfs://{$databaseName}.fs?filename=test.txt";
  37. $resource = fopen($url, 'w');
  38. fwrite($resource, 'begin ');
  39. fwrite($resource, 'end');
  40. fclose($resource);
  41. $collection = $connection->getFileCollection();
  42. $document = $collection->findOne(['filename' => 'test.txt']);
  43. $this->assertNotEmpty($document);
  44. $this->assertEquals('begin end', $document['file']->toString());
  45. }
  46. public function testReadResource()
  47. {
  48. $connection = $this->getConnection();
  49. $this->mockApplication([
  50. 'components' => [
  51. 'mongodb' => $connection
  52. ],
  53. ]);
  54. $collection = $connection->getFileCollection();
  55. $upload = $collection->createUpload();
  56. $document = $upload->addContent('test content')->complete();
  57. $connection->registerFileStreamWrapper(true);
  58. $databaseName = $connection->getDefaultDatabaseName();
  59. $url = "gridfs://{$databaseName}.fs?_id=" . $document['_id'];
  60. $resource = fopen($url, 'r');
  61. $this->assertEquals('test content', stream_get_contents($resource));
  62. }
  63. public function testSeek()
  64. {
  65. $connection = $this->getConnection();
  66. $this->mockApplication([
  67. 'components' => [
  68. 'mongodb' => $connection
  69. ],
  70. ]);
  71. $connection->registerFileStreamWrapper(true);
  72. $databaseName = $connection->getDefaultDatabaseName();
  73. $url = "gridfs://{$databaseName}.fs?filename=test.txt";
  74. $resource = fopen($url, 'w');
  75. fwrite($resource, 'begin end');
  76. fclose($resource);
  77. $url = "gridfs://{$databaseName}.fs?filename=test.txt";
  78. $resource = fopen($url, 'r');
  79. $data = fgets($resource);
  80. fseek($resource, 0);
  81. $position = ftell($resource);
  82. $this->assertEquals(0, $position);
  83. fseek($resource, 2, SEEK_CUR);
  84. $position = ftell($resource);
  85. $this->assertEquals(2, $position);
  86. fseek($resource, 0, SEEK_END);
  87. $position = ftell($resource);
  88. $this->assertEquals(9, $position);
  89. }
  90. }