1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
#include "storage.hpp"
#include <mbgl/storage/default_file_source.hpp>
#include <mbgl/storage/online_file_source.hpp>
#include <mbgl/util/chrono.hpp>
#include <mbgl/util/run_loop.hpp>
#include <mbgl/util/timer.hpp>
TEST_F(Storage, TEST_REQUIRES_SERVER(HTTPRetryDelayOnExpiredTile)) {
SCOPED_TEST(HTTPRetryDelayOnExpiredTile)
using namespace mbgl;
util::RunLoop loop;
OnlineFileSource fs;
int counter = 0;
const Resource resource { Resource::Unknown, "http://127.0.0.1:3000/test?expires=10000" };
std::unique_ptr<FileRequest> req = fs.request(resource, [&](Response res) {
counter++;
EXPECT_EQ(nullptr, res.error);
EXPECT_GT(SystemClock::now(), res.expires);
});
util::Timer timer;
timer.start(Milliseconds(500), Duration::zero(), [&] () {
loop.stop();
});
loop.run();
EXPECT_EQ(1, counter);
HTTPRetryDelayOnExpiredTile.finish();
}
TEST_F(Storage, TEST_REQUIRES_SERVER(HTTPRetryOnClockSkew)) {
SCOPED_TEST(HTTPRetryOnClockSkew)
using namespace mbgl;
util::RunLoop loop;
DefaultFileSource fs(":memory:", ".");
int counter = 0;
const Resource resource { Resource::Unknown, "http://127.0.0.1:3000/clockskew" };
std::unique_ptr<FileRequest> req1 = fs.request(resource, [&](Response res) {
switch (counter++) {
case 0: {
EXPECT_EQ(nullptr, res.error);
EXPECT_GT(SystemClock::now(), res.expires);
} break;
case 1: {
EXPECT_EQ(nullptr, res.error);
auto now = SystemClock::now();
EXPECT_LT(now + Seconds(40), res.expires) << "Expiration not interpolated to 60s";
EXPECT_GT(now + Seconds(80), res.expires) << "Expiration not interpolated to 60s";
loop.stop();
} break;
}
});
loop.run();
HTTPRetryOnClockSkew.finish();
}
TEST_F(Storage, TEST_REQUIRES_SERVER(HTTPRespectPriorExpires)) {
SCOPED_TEST(HTTPRespectPriorExpires)
using namespace mbgl;
util::RunLoop loop;
DefaultFileSource fs(":memory:", ".");
// Very long expiration time, should never arrive.
Resource resource1{ Resource::Unknown, "http://127.0.0.1:3000/test" };
resource1.priorExpires = SystemClock::now() + Seconds(100000);
std::unique_ptr<FileRequest> req1 = fs.request(resource1, [&](Response) {
FAIL() << "Should never be called";
});
// No expiration time, should be requested immediately.
Resource resource2{ Resource::Unknown, "http://127.0.0.1:3000/test" };
std::unique_ptr<FileRequest> req2 = fs.request(resource2, [&](Response) {
HTTPRespectPriorExpires.finish();
loop.stop();
});
// Very long expiration time, should never arrive.
Resource resource3{ Resource::Unknown, "http://127.0.0.1:3000/test" };
resource3.priorExpires = SystemClock::now() + Seconds(100000);
std::unique_ptr<FileRequest> req3 = fs.request(resource3, [&](Response) {
FAIL() << "Should never be called";
});
loop.run();
}
|