Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sample of LRU test refactor #1424

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 38 additions & 26 deletions Firestore/Example/Tests/Local/FSTLRUGarbageCollectorTests.mm
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,35 @@ @implementation FSTLRUGarbageCollectorTests {
int _previousDocNum;
FSTObjectValue *_testValue;
FSTObjectValue *_bigObjectValue;
id<FSTPersistence> _persistence;
id<FSTQueryCache> _queryCache;
FSTLRUGarbageCollector *_gc;
FSTListenSequenceNumber _initialSequenceNumber;
}

- (void)newTestResources {
HARD_ASSERT(_persistence == nil, "Persistence already created");
_persistence = [self newPersistence];
_queryCache = [_persistence queryCache];
_initialSequenceNumber =
_persistence.run("start querycache", [&]() -> FSTListenSequenceNumber {
[_queryCache start];
_gc = [self gcForPersistence:_persistence];
return _persistence.currentSequenceNumber;
});
}

- (FSTListenSequenceNumber)sequenceNumberForQueryCount:(int)queryCount {
return _persistence.run("gc", [&]() -> FSTListenSequenceNumber {
return [_gc sequenceNumberForQueryCount:queryCount];
});
}

- (id<FSTPersistence>)newPersistence {
@throw FSTAbstractMethodException(); // NOLINT
}

// TODO(gsoltis): drop persistence param here and elsewhere when no longer required
- (FSTLRUGarbageCollector *)gcForPersistence:(id<FSTPersistence>)persistence {
id<FSTLRUDelegate> delegate = (id<FSTLRUDelegate>)persistence.referenceDelegate;
return delegate.gc;
Expand Down Expand Up @@ -121,20 +144,19 @@ - (void)testPickSequenceNumberPercentile {
// Fill the query cache.
int numQueries = testCases[i].queries;
int expectedTenthPercentile = testCases[i].expected;
id<FSTPersistence> persistence = [self newPersistence];
persistence.run("testPickSequenceNumberPercentile" + std::to_string(i), [&]() {
id<FSTQueryCache> queryCache = [persistence queryCache];
[queryCache start];
for (int j = 0; j < numQueries; j++) {
[queryCache addQueryData:[self nextTestQuery:persistence]];
}
FSTLRUGarbageCollector *gc = [self gcForPersistence:persistence];
[self newTestResources];
for (int j = 0; j < numQueries; j++) {
_persistence.run("add query", [&]() {
[_queryCache addQueryData:[self nextTestQuery:_persistence]];
});
}
_persistence.run("Check GC", [&]() {
FSTLRUGarbageCollector *gc = [self gcForPersistence:_persistence];
FSTListenSequenceNumber tenth = [gc queryCountForPercentile:10];
XCTAssertEqual(expectedTenthPercentile, tenth, @"Total query count: %i", numQueries);
});

// TODO(gsoltis): technically should shutdown query cache, but it doesn't do anything anymore.
[persistence shutdown];
[_persistence shutdown];
_persistence = nil;
}
}

Expand All @@ -157,23 +179,13 @@ - (void)testSequenceNumberForFiftyQueries {
if ([self isTestBaseClass]) return;
// Add 50 queries sequentially, aim to collect 10 of them.
// The sequence number to collect should be 10 past the initial sequence number.
id<FSTPersistence> persistence = [self newPersistence];
id<FSTQueryCache> queryCache = [persistence queryCache];
FSTListenSequenceNumber initial =
persistence.run("start querycache", [&]() -> FSTListenSequenceNumber {
[queryCache start];
return persistence.currentSequenceNumber;
});
[self newTestResources];
for (int i = 0; i < 50; i++) {
persistence.run("add query",
[&]() { [queryCache addQueryData:[self nextTestQuery:persistence]]; });
_persistence.run("add query",
[&]() { [_queryCache addQueryData:[self nextTestQuery:_persistence]]; });
}
persistence.run("gc", [&]() {
FSTLRUGarbageCollector *gc = [self gcForPersistence:persistence];
FSTListenSequenceNumber highestToCollect = [gc sequenceNumberForQueryCount:10];
XCTAssertEqual(10 + initial, highestToCollect);
});
[persistence shutdown];
XCTAssertEqual(_initialSequenceNumber + 10, [self sequenceNumberForQueryCount:10]);
[_persistence shutdown];
}

- (void)testSequenceNumberForMultipleQueriesInATransaction {
Expand Down