|
46 | 46 | import threading
|
47 | 47 | import time
|
48 | 48 | import warnings
|
49 |
| -from typing import Any, List, Optional |
| 49 | +from typing import Any, List, Optional, Union |
50 | 50 |
|
51 | 51 | import pytest
|
52 | 52 |
|
|
61 | 61 |
|
62 | 62 | from bson import decode, encode, json_util
|
63 | 63 | from gridfs import GridFSBucket
|
64 |
| -from pymongo import MongoClient |
| 64 | +from pymongo import ( |
| 65 | + DeleteOne, |
| 66 | + InsertOne, |
| 67 | + MongoClient, |
| 68 | + ReplaceOne, |
| 69 | +) |
65 | 70 |
|
66 | 71 | pytestmark = pytest.mark.perf
|
67 | 72 |
|
@@ -390,6 +395,15 @@ def setUp(self):
|
390 | 395 | self.documents = [self.document.copy() for _ in range(NUM_DOCS)]
|
391 | 396 |
|
392 | 397 |
|
| 398 | +class SmallDocMixedTest(TestDocument): |
| 399 | + dataset = "small_doc.json" |
| 400 | + |
| 401 | + def setUp(self): |
| 402 | + super().setUp() |
| 403 | + self.data_size = len(encode(self.document)) * NUM_DOCS * 2 |
| 404 | + self.documents = [self.document.copy() for _ in range(NUM_DOCS)] |
| 405 | + |
| 406 | + |
393 | 407 | class TestSmallDocInsertOne(SmallDocInsertTest, unittest.TestCase):
|
394 | 408 | def do_task(self):
|
395 | 409 | insert_one = self.corpus.insert_one
|
@@ -429,11 +443,69 @@ def do_task(self):
|
429 | 443 | self.corpus.insert_many(self.documents, ordered=True)
|
430 | 444 |
|
431 | 445 |
|
| 446 | +class TestSmallDocClientBulkInsert(SmallDocInsertTest, unittest.TestCase): |
| 447 | + @client_context.require_version_min(8, 0, 0, -24) |
| 448 | + def setUp(self): |
| 449 | + super().setUp() |
| 450 | + self.models = [] |
| 451 | + for doc in self.documents: |
| 452 | + self.models.append(InsertOne(namespace="perftest.corpus", document=doc.copy())) |
| 453 | + |
| 454 | + @client_context.require_version_min(8, 0, 0, -24) |
| 455 | + def do_task(self): |
| 456 | + self.client.bulk_write(self.models, ordered=True) |
| 457 | + |
| 458 | + |
| 459 | +class TestSmallDocBulkMixedOps(SmallDocMixedTest, unittest.TestCase): |
| 460 | + def setUp(self): |
| 461 | + super().setUp() |
| 462 | + self.models: list[Union[InsertOne, ReplaceOne, DeleteOne]] = [] |
| 463 | + for doc in self.documents: |
| 464 | + self.models.append(InsertOne(document=doc.copy())) |
| 465 | + self.models.append(ReplaceOne(filter={}, replacement=doc.copy(), upsert=True)) |
| 466 | + self.models.append(DeleteOne(filter={})) |
| 467 | + |
| 468 | + def do_task(self): |
| 469 | + self.corpus.bulk_write(self.models, ordered=True) |
| 470 | + |
| 471 | + |
| 472 | +class TestSmallDocClientBulkMixedOps(SmallDocMixedTest, unittest.TestCase): |
| 473 | + @client_context.require_version_min(8, 0, 0, -24) |
| 474 | + def setUp(self): |
| 475 | + super().setUp() |
| 476 | + self.models: list[Union[InsertOne, ReplaceOne, DeleteOne]] = [] |
| 477 | + for doc in self.documents: |
| 478 | + self.models.append(InsertOne(namespace="perftest.corpus", document=doc.copy())) |
| 479 | + self.models.append( |
| 480 | + ReplaceOne( |
| 481 | + namespace="perftest.corpus", filter={}, replacement=doc.copy(), upsert=True |
| 482 | + ) |
| 483 | + ) |
| 484 | + self.models.append(DeleteOne(namespace="perftest.corpus", filter={})) |
| 485 | + |
| 486 | + @client_context.require_version_min(8, 0, 0, -24) |
| 487 | + def do_task(self): |
| 488 | + self.client.bulk_write(self.models, ordered=True) |
| 489 | + |
| 490 | + |
432 | 491 | class TestLargeDocBulkInsert(LargeDocInsertTest, unittest.TestCase):
|
433 | 492 | def do_task(self):
|
434 | 493 | self.corpus.insert_many(self.documents, ordered=True)
|
435 | 494 |
|
436 | 495 |
|
| 496 | +class TestLargeDocClientBulkInsert(LargeDocInsertTest, unittest.TestCase): |
| 497 | + @client_context.require_version_min(8, 0, 0, -24) |
| 498 | + def setUp(self): |
| 499 | + super().setUp() |
| 500 | + self.models = [] |
| 501 | + for doc in self.documents: |
| 502 | + self.models.append(InsertOne(namespace="perftest.corpus", document=doc.copy())) |
| 503 | + |
| 504 | + @client_context.require_version_min(8, 0, 0, -24) |
| 505 | + def do_task(self): |
| 506 | + self.client.bulk_write(self.models, ordered=True) |
| 507 | + |
| 508 | + |
437 | 509 | class GridFsTest(PerformanceTest):
|
438 | 510 | def setUp(self):
|
439 | 511 | super().setUp()
|
|
0 commit comments