blob: 5a6a25d229b0108b2c93926490f882178fffbebc [file] [log] [blame]
// Copyright 2019 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:convert';
import 'dart:math';
import 'package:auto_submit/request_handling/pubsub.dart';
import 'package:googleapis/pubsub/v1.dart';
class FakePubSub extends PubSub {
List<dynamic> messagesQueue = <dynamic>[];
// Number of messages in each Pub/Sub pull call. This mocks the API
// returning random number of messages each time.
int messageSize = 2;
@override
Future<void> publish(String topicName, dynamic json) async {
final String messageData = jsonEncode(json);
final List<int> messageBytes = utf8.encode(messageData);
final String messageBase64 = base64Encode(messageBytes);
messagesQueue.add(messageBase64);
}
@override
Future<PullResponse> pull(String subscription, int maxMessages) async {
// The list will be empty if there are no more messages available in the backlog.
List<ReceivedMessage> receivedMessages = <ReceivedMessage>[];
if (messagesQueue.isNotEmpty) {
int i = 0;
// Returns only allowed max number of messages. The number should not be greater than
// `maxMessages`, the available messages, and the number allowed in each call. The
// last number is to mock real `pull` API call.
while (i < min(min(maxMessages, messagesQueue.length), messageSize)) {
receivedMessages.add(ReceivedMessage(message: PubsubMessage(data: messagesQueue[i] as String), ackId: '1'));
i++;
}
return PullResponse(receivedMessages: receivedMessages);
}
return PullResponse(receivedMessages: receivedMessages);
}
@override
Future<void> acknowledge(String subscription, String ackId) async {
if (messagesQueue.isNotEmpty) {
messagesQueue.removeAt(messagesQueue.length - 1);
}
}
}