/* * Copyright 2018 The WebRTC Project Authors. All rights reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ package org.webrtc; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertFalse; import android.support.test.InstrumentationRegistry; import android.support.test.filters.SmallTest; import android.support.test.runner.AndroidJUnit4; import java.util.ArrayList; import org.junit.Test; import org.junit.runner.RunWith; import org.webrtc.PeerConnectionFactory; import org.webrtc.Logging.Severity; import org.webrtc.Loggable; @RunWith(AndroidJUnit4.class) public class LoggableTest { private static String TAG = "LoggableTest"; private static String NATIVE_FILENAME_TAG = "loggable_test.cc"; private static class MockLoggable implements Loggable { private ArrayList messages = new ArrayList<>(); private ArrayList sevs = new ArrayList<>(); private ArrayList tags = new ArrayList<>(); @Override public void onLogMessage(String message, Severity sev, String tag) { messages.add(message); sevs.add(sev); tags.add(tag); } public boolean isMessageReceived(String message) { for (int i = 0; i < messages.size(); i++) { if (messages.get(i).contains(message)) { return true; } } return false; } public boolean isMessageReceived(String message, Severity sev, String tag) { for (int i = 0; i < messages.size(); i++) { if (messages.get(i).contains(message) && sevs.get(i) == sev && tags.get(i).equals(tag)) { return true; } } return false; } } private final MockLoggable mockLoggable = new MockLoggable(); @Test @SmallTest public void testLoggableSetWithoutError() throws InterruptedException { PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions .builder(InstrumentationRegistry.getTargetContext()) .setInjectableLogger(mockLoggable, Severity.LS_INFO) .setNativeLibraryName(TestConstants.NATIVE_LIBRARY) .createInitializationOptions()); } @Test @SmallTest public void testMessageIsLoggedCorrectly() throws InterruptedException { PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions .builder(InstrumentationRegistry.getTargetContext()) .setInjectableLogger(mockLoggable, Severity.LS_INFO) .setNativeLibraryName(TestConstants.NATIVE_LIBRARY) .createInitializationOptions()); String msg = "Message that should be logged"; Logging.d(TAG, msg); assertTrue(mockLoggable.isMessageReceived(msg, Severity.LS_INFO, TAG)); } @Test @SmallTest public void testLowSeverityIsFiltered() throws InterruptedException { // Set severity to LS_WARNING to filter out LS_INFO and below. PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions .builder(InstrumentationRegistry.getTargetContext()) .setInjectableLogger(mockLoggable, Severity.LS_WARNING) .setNativeLibraryName(TestConstants.NATIVE_LIBRARY) .createInitializationOptions()); String msg = "Message that should NOT be logged"; Logging.d(TAG, msg); assertFalse(mockLoggable.isMessageReceived(msg)); } @Test @SmallTest public void testLoggableDoesNotReceiveMessagesAfterUnsetting() { PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions .builder(InstrumentationRegistry.getTargetContext()) .setInjectableLogger(mockLoggable, Severity.LS_INFO) .setNativeLibraryName(TestConstants.NATIVE_LIBRARY) .createInitializationOptions()); // Reinitialize without Loggable PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions .builder(InstrumentationRegistry.getTargetContext()) .setNativeLibraryName(TestConstants.NATIVE_LIBRARY) .createInitializationOptions()); String msg = "Message that should NOT be logged"; Logging.d(TAG, msg); assertFalse(mockLoggable.isMessageReceived(msg)); } @Test @SmallTest public void testNativeMessageIsLoggedCorrectly() throws InterruptedException { PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions .builder(InstrumentationRegistry.getTargetContext()) .setInjectableLogger(mockLoggable, Severity.LS_INFO) .setNativeLibraryName(TestConstants.NATIVE_LIBRARY) .createInitializationOptions()); String msg = "Message that should be logged"; nativeLogInfoTestMessage(msg); assertTrue(mockLoggable.isMessageReceived(msg, Severity.LS_INFO, NATIVE_FILENAME_TAG)); } @Test @SmallTest public void testNativeLowSeverityIsFiltered() throws InterruptedException { PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions .builder(InstrumentationRegistry.getTargetContext()) .setInjectableLogger(mockLoggable, Severity.LS_WARNING) .setNativeLibraryName(TestConstants.NATIVE_LIBRARY) .createInitializationOptions()); String msg = "Message that should NOT be logged"; nativeLogInfoTestMessage(msg); assertFalse(mockLoggable.isMessageReceived(msg)); } @Test @SmallTest public void testNativeLoggableDoesNotReceiveMessagesAfterUnsetting() { PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions .builder(InstrumentationRegistry.getTargetContext()) .setInjectableLogger(mockLoggable, Severity.LS_INFO) .setNativeLibraryName(TestConstants.NATIVE_LIBRARY) .createInitializationOptions()); // Reinitialize without Loggable PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions .builder(InstrumentationRegistry.getTargetContext()) .setNativeLibraryName(TestConstants.NATIVE_LIBRARY) .createInitializationOptions()); String msg = "Message that should NOT be logged"; nativeLogInfoTestMessage(msg); assertFalse(mockLoggable.isMessageReceived(msg)); } private static native void nativeLogInfoTestMessage(String message); }