// // Copyright Amazon.com Inc. or its affiliates. // All Rights Reserved. // // SPDX-License-Identifier: Apache-2.0 // import AWSCloudWatchLogs import Amplify import Foundation import XCTest @testable import AWSCloudWatchLoggingPlugin final class CloudWatchLogConsumerTests: XCTestCase { var systemUnderTest: CloudWatchLoggingConsumer! var client: MockCloudWatchLogsClient! var logGroupName: String! var logStreamName: String! var entries: [LogEntry]! var interactions: [String]! override func setUp() async throws { entries = [] interactions = [] client = MockCloudWatchLogsClient() logGroupName = UUID().uuidString logStreamName = UUID().uuidString systemUnderTest = try CloudWatchLoggingConsumer(client: client, logGroupName: logGroupName, userIdentifier: "guest") } override func tearDown() async throws { entries = nil interactions = nil client = nil logGroupName = nil logStreamName = nil systemUnderTest = nil } /// - Given: a single log entry /// - When: CloudWatchLoggingConsumer consumes a log batch /// - Then: the batch is read and completed func testConsumerProcessValidLogBatch() async throws { self.entries = [LogEntry(category: "CloudWatchLogConsumerTests", namespace:nil, level: .error, message: "")] try await systemUnderTest.consume(batch: self) XCTAssertEqual(client.interactions, [ "describeLogStreams(input:)", "createLogStream(input:)", "putLogEvents(input:)" ]) XCTAssertEqual(interactions, [ "readEntries()", "complete()" ]) } /// - Given: a list of log entries /// - When: CloudWatchLoggingConsumer consumes a log batch /// - Then: the batch is read and completed func testConsumerProcessValidLargeBatch() async throws { let batchSize = 32 for _ in 0.. [LogEntry] { interactions.append(#function) return entries } func complete() { interactions.append(#function) } }