87 lines
3 KiB
Dart
87 lines
3 KiB
Dart
import 'package:podman/podman.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
import 'support/fake_podman_transport.dart';
|
|
|
|
void main() {
|
|
group('PodmanClient events API', () {
|
|
test('lists events with filters and since/until', () async {
|
|
final since = DateTime.fromMillisecondsSinceEpoch(
|
|
1700000000000,
|
|
isUtc: true,
|
|
);
|
|
final until = DateTime.fromMillisecondsSinceEpoch(
|
|
1700000060000,
|
|
isUtc: true,
|
|
);
|
|
|
|
final transport = FakePodmanTransport()
|
|
..enqueue(
|
|
method: HttpMethod.get,
|
|
path: '/v5.0.0/libpod/events',
|
|
queryParameters: const <String, List<String>>{
|
|
'stream': <String>['false'],
|
|
'since': <String>['1700000000'],
|
|
'until': <String>['1700000060'],
|
|
'filters': <String>['type=container', 'event=start'],
|
|
},
|
|
responseBody:
|
|
'{"Type":"container","Action":"start","status":"start","id":"c1","time":1700000001,"timeNano":1700000001000000000,"Actor":{"ID":"c1","Attributes":{"name":"web"}}}\n'
|
|
'{"Type":"container","Action":"stop","status":"stop","id":"c1","time":1700000059,"timeNano":1700000059000000000,"Actor":{"ID":"c1","Attributes":{"name":"web"}}}\n',
|
|
);
|
|
|
|
final client = PodmanClient(transport: transport);
|
|
final events = await client.listEvents(
|
|
since: since,
|
|
until: until,
|
|
filters: const <PodmanEventFilter>[
|
|
PodmanEventFilter('type', 'container'),
|
|
PodmanEventFilter('event', 'start'),
|
|
],
|
|
);
|
|
|
|
expect(events, hasLength(2));
|
|
expect(events.first.type, 'container');
|
|
expect(events.first.action, 'start');
|
|
expect(events.first.name, 'web');
|
|
transport.expectNoPending();
|
|
});
|
|
|
|
test('watchEvents reconnects and emits events', () async {
|
|
final transport = FakePodmanTransport()
|
|
..enqueue(
|
|
method: HttpMethod.get,
|
|
path: '/v5.0.0/libpod/events',
|
|
queryParameters: const <String, List<String>>{
|
|
'stream': <String>['false'],
|
|
},
|
|
statusCode: 500,
|
|
responseBody: const <String, Object?>{'message': 'temporary'},
|
|
)
|
|
..enqueue(
|
|
method: HttpMethod.get,
|
|
path: '/v5.0.0/libpod/events',
|
|
queryParameters: const <String, List<String>>{
|
|
'stream': <String>['false'],
|
|
},
|
|
responseBody:
|
|
'{"Type":"container","Action":"start","status":"start","id":"c1","time":1700000100,"timeNano":1700000100000000000,"Actor":{"ID":"c1","Attributes":{"name":"web"}}}\n',
|
|
);
|
|
|
|
final client = PodmanClient(transport: transport);
|
|
|
|
final first = await client
|
|
.watchEvents(
|
|
reconnect: true,
|
|
reconnectDelay: Duration.zero,
|
|
pollInterval: const Duration(days: 1),
|
|
)
|
|
.first
|
|
.timeout(const Duration(seconds: 2));
|
|
|
|
expect(first.id, 'c1');
|
|
expect(first.action, 'start');
|
|
transport.expectNoPending();
|
|
});
|
|
});
|
|
}
|