podman/test/podman_client_events_test.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();
});
});
}