|
11 | 11 | from splitio.engine.telemetry import TelemetryStorageProducer |
12 | 12 |
|
13 | 13 | from splitio.storage.inmemmory import InMemorySplitStorage, InMemorySegmentStorage, \ |
14 | | - InMemoryImpressionStorage, InMemoryEventStorage, InMemoryTelemetryStorage, InMemorySplitStorageAsync |
15 | | - |
| 14 | + InMemoryImpressionStorage, InMemoryEventStorage, InMemoryTelemetryStorage, InMemorySegmentStorageAsync, InMemorySplitStorageAsync |
16 | 15 |
|
17 | 16 | class InMemorySplitStorageTests(object): |
18 | 17 | """In memory split storage test cases.""" |
@@ -455,6 +454,71 @@ def test_segment_update(self): |
455 | 454 | assert storage.get_change_number('some_segment') == 456 |
456 | 455 |
|
457 | 456 |
|
| 457 | +class InMemorySegmentStorageAsyncTests(object): |
| 458 | + """In memory segment storage tests.""" |
| 459 | + |
| 460 | + @pytest.mark.asyncio |
| 461 | + async def test_segment_storage_retrieval(self, mocker): |
| 462 | + """Test storing and retrieving segments.""" |
| 463 | + storage = InMemorySegmentStorageAsync() |
| 464 | + segment = mocker.Mock(spec=Segment) |
| 465 | + name_property = mocker.PropertyMock() |
| 466 | + name_property.return_value = 'some_segment' |
| 467 | + type(segment).name = name_property |
| 468 | + |
| 469 | + await storage.put(segment) |
| 470 | + assert await storage.get('some_segment') == segment |
| 471 | + assert await storage.get('nonexistant-segment') is None |
| 472 | + |
| 473 | + @pytest.mark.asyncio |
| 474 | + async def test_change_number(self, mocker): |
| 475 | + """Test storing and retrieving segment changeNumber.""" |
| 476 | + storage = InMemorySegmentStorageAsync() |
| 477 | + await storage.set_change_number('some_segment', 123) |
| 478 | + # Change number is not updated if segment doesn't exist |
| 479 | + assert await storage.get_change_number('some_segment') is None |
| 480 | + assert await storage.get_change_number('nonexistant-segment') is None |
| 481 | + |
| 482 | + # Change number is updated if segment does exist. |
| 483 | + storage = InMemorySegmentStorageAsync() |
| 484 | + segment = mocker.Mock(spec=Segment) |
| 485 | + name_property = mocker.PropertyMock() |
| 486 | + name_property.return_value = 'some_segment' |
| 487 | + type(segment).name = name_property |
| 488 | + await storage.put(segment) |
| 489 | + await storage.set_change_number('some_segment', 123) |
| 490 | + assert await storage.get_change_number('some_segment') == 123 |
| 491 | + |
| 492 | + @pytest.mark.asyncio |
| 493 | + async def test_segment_contains(self, mocker): |
| 494 | + """Test using storage to determine whether a key belongs to a segment.""" |
| 495 | + storage = InMemorySegmentStorageAsync() |
| 496 | + segment = mocker.Mock(spec=Segment) |
| 497 | + name_property = mocker.PropertyMock() |
| 498 | + name_property.return_value = 'some_segment' |
| 499 | + type(segment).name = name_property |
| 500 | + await storage.put(segment) |
| 501 | + |
| 502 | + await storage.segment_contains('some_segment', 'abc') |
| 503 | + assert segment.contains.mock_calls[0] == mocker.call('abc') |
| 504 | + |
| 505 | + @pytest.mark.asyncio |
| 506 | + async def test_segment_update(self): |
| 507 | + """Test updating a segment.""" |
| 508 | + storage = InMemorySegmentStorageAsync() |
| 509 | + segment = Segment('some_segment', ['key1', 'key2', 'key3'], 123) |
| 510 | + await storage.put(segment) |
| 511 | + assert await storage.get('some_segment') == segment |
| 512 | + |
| 513 | + await storage.update('some_segment', ['key4', 'key5'], ['key2', 'key3'], 456) |
| 514 | + assert await storage.segment_contains('some_segment', 'key1') |
| 515 | + assert await storage.segment_contains('some_segment', 'key4') |
| 516 | + assert await storage.segment_contains('some_segment', 'key5') |
| 517 | + assert not await storage.segment_contains('some_segment', 'key2') |
| 518 | + assert not await storage.segment_contains('some_segment', 'key3') |
| 519 | + assert await storage.get_change_number('some_segment') == 456 |
| 520 | + |
| 521 | + |
458 | 522 | class InMemoryImpressionsStorageTests(object): |
459 | 523 | """InMemory impressions storage test cases.""" |
460 | 524 |
|
|
0 commit comments