blob: 9f9f826fa659c7b7c3f032fe337c913c30d89472 [file] [log] [blame]
// Copyright 2018 The Fuchsia 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:typed_data';
import 'package:lib.app.dart/logging.dart';
import 'package:mockito/mockito.dart';
import 'package:test/test.dart';
import 'package:zircon/zircon.dart';
import 'socket_validate.dart';
class MockSocket extends Mock implements Socket {}
void main() {
test('_testLogToSocketWithStacktrace', _testLogToSocketWithStacktrace);
}
const int _socketBufferLength = 2032;
const String _errorMsg = 'this error message plus the stacktrace need to be '
'long enough to hit the max block size to validate that truncation of long '
'messages works properly';
void _testLogToSocketWithStacktrace() {
MockSocket mockSocket = MockSocket();
setupLogger(
name: 'TEST',
forceShowCodeLocation: false,
logSocket: mockSocket,
);
log.severe(_errorMsg, Exception('because'), StackTrace.current);
ByteData byteData = verify(mockSocket.write(captureAny)).captured.single;
List<int> logged = byteData.buffer.asInt8List(0, byteData.lengthInBytes);
validateFixedBlock(logged, 2);
expect(logged[32], equals(4));
expect(utf8.decode(logged.sublist(33, 37)), equals('TEST'));
int end = 37;
// dividing 0 byte
expect(logged[end++], equals(0));
String msg = utf8.decode(logged.sublist(end));
expect(msg, startsWith('$_errorMsg: Exception: because\n'));
expect(msg, matches(r'.*_testLogToSocketWithStacktrace'));
expect(logged.length, equals(_socketBufferLength));
expect(
utf8.decode(
logged.sublist(_socketBufferLength - 4, _socketBufferLength - 1)),
equals('...'));
mockSocket.close();
}