forked from BasedHardware/omi
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhttp_pool_manager_retry_test.dart
More file actions
115 lines (91 loc) · 3.12 KB
/
Copy pathhttp_pool_manager_retry_test.dart
File metadata and controls
115 lines (91 loc) · 3.12 KB
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
106
107
108
109
110
111
112
113
114
115
import 'dart:io';
import 'package:flutter_test/flutter_test.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:omi/backend/http/api/action_items.dart' as action_items_api;
import 'package:omi/backend/http/api/knowledge_graph_api.dart';
import 'package:omi/backend/preferences.dart';
import 'package:omi/env/env.dart';
import 'package:omi/utils/platform/platform_manager.dart';
void main() {
final env = _TestEnvFields();
setUpAll(() async {
Env.init(env);
SharedPreferences.setMockInitialValues({});
await SharedPreferencesUtil.init();
PackageInfo.setMockInitialValues(
appName: 'Omi Test',
packageName: 'com.omi.test',
version: '1.0.0',
buildNumber: '1',
buildSignature: '',
);
await PlatformManager.initializeServices();
});
group('expensive read retry policy', () {
late HttpServer server;
setUp(() async {
server = await HttpServer.bind(InternetAddress.loopbackIPv4, 0);
env.routeNextRequestTo('http://${server.address.host}:${server.port}/');
});
tearDown(() async {
await server.close(force: true);
});
test('tryGetActionItems makes one request when the backend returns 504', () async {
var attempts = 0;
server.listen((request) async {
attempts++;
expect(request.uri.path, '/v1/action-items');
request.response.statusCode = HttpStatus.gatewayTimeout;
await request.response.close();
});
final response = await action_items_api.tryGetActionItems();
expect(response, isNull);
expect(attempts, 1);
});
test('getKnowledgeGraph makes one request when the backend returns 504', () async {
var attempts = 0;
server.listen((request) async {
attempts++;
expect(request.uri.path, '/v1/knowledge-graph');
request.response.statusCode = HttpStatus.gatewayTimeout;
await request.response.close();
});
await expectLater(KnowledgeGraphApi.getKnowledgeGraph(), throwsA(isA<Exception>()));
expect(attempts, 1);
});
});
}
class _TestEnvFields implements EnvFields {
String _requestBaseUrl = '';
var _apiBaseUrlReads = 0;
void routeNextRequestTo(String baseUrl) {
_requestBaseUrl = baseUrl;
_apiBaseUrlReads = 0;
}
@override
String? get apiBaseUrl {
_apiBaseUrlReads++;
// The production API uses the first read to build the request URL and the
// second to decide whether auth is required. Returning a distinct base on
// the second read keeps this loopback test focused on retry behavior.
return _apiBaseUrlReads.isOdd ? _requestBaseUrl : 'https://auth-not-required.invalid/';
}
@override
String? get googleClientId => null;
@override
String? get googleClientSecret => null;
@override
@override
String? get intercomAppId => null;
@override
String? get intercomIOSApiKey => null;
@override
String? get intercomAndroidApiKey => null;
@override
String? get posthogApiKey => null;
@override
bool? get useAuthCustomToken => false;
@override
bool? get useWebAuth => false;
}