Skip to content

Commit

Permalink
Performance: Keep collections and indexes between GridFS tests (#1421)
Browse files Browse the repository at this point in the history
  • Loading branch information
GromNaN authored Sep 18, 2024
1 parent 45b5205 commit b27a61d
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 3 deletions.
13 changes: 13 additions & 0 deletions tests/GridFS/BucketFunctionalTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -814,9 +814,22 @@ public function testUploadingFirstFileCreatesIndexes(): void

public function testExistingIndexIsReused(): void
{
// The collections may exist from other tests, ensure they are removed
// before and after to avoid potential conflicts.
$this->dropCollection($this->getDatabaseName(), 'fs.chunks');
$this->dropCollection($this->getDatabaseName(), 'fs.files');

// Create indexes with different numeric types before interacting with
// GridFS to assert that the library respects the existing indexes and
// does not attempt to create its own.
$this->filesCollection->createIndex(['filename' => 1.0, 'uploadDate' => 1], ['name' => 'test']);
$this->chunksCollection->createIndex(['files_id' => 1.0, 'n' => 1], ['name' => 'test', 'unique' => true]);

$this->assertIndexExists('fs.files', 'test');
$this->assertIndexExists('fs.chunks', 'test', function (IndexInfo $info): void {
$this->assertTrue($info->isUnique());
});

$this->bucket->uploadFromStream('filename', self::createStream('foo'));

$this->assertIndexNotExists($this->filesCollection->getCollectionName(), 'filename_1_uploadDate_1');
Expand Down
30 changes: 27 additions & 3 deletions tests/GridFS/FunctionalTestCase.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use MongoDB\Collection;
use MongoDB\GridFS\Bucket;
use MongoDB\Operation\DropCollection;
use MongoDB\Tests\FunctionalTestCase as BaseFunctionalTestCase;

use function fopen;
Expand All @@ -28,10 +29,33 @@ public function setUp(): void
parent::setUp();

$this->bucket = new Bucket($this->manager, $this->getDatabaseName());
$this->bucket->drop();

$this->chunksCollection = $this->createCollection($this->getDatabaseName(), 'fs.chunks');
$this->filesCollection = $this->createCollection($this->getDatabaseName(), 'fs.files');
$this->chunksCollection = new Collection($this->manager, $this->getDatabaseName(), 'fs.chunks');
$this->filesCollection = new Collection($this->manager, $this->getDatabaseName(), 'fs.files');
}

public function tearDown(): void
{
$this->chunksCollection->deleteMany([]);
$this->filesCollection->deleteMany([]);

parent::tearDown();
}

/**
* The bucket's collections are created by the first test that runs and
* kept for all subsequent tests. This is done to avoid creating the
* collections and their indexes for each test, which would be slow.
*
* @beforeClass
* @afterClass
*/
public static function dropCollectionsBeforeAfterClass(): void
{
$manager = static::createTestManager();

(new DropCollection(self::getDatabaseName(), 'fs.chunks'))->execute($manager->selectServer());
(new DropCollection(self::getDatabaseName(), 'fs.files'))->execute($manager->selectServer());
}

/**
Expand Down

0 comments on commit b27a61d

Please sign in to comment.