19125068a991b24d27810b6392a562b32457b3f5dAdrian Roos/* 29125068a991b24d27810b6392a562b32457b3f5dAdrian Roos * Copyright (C) 2017 The Android Open Source Project 39125068a991b24d27810b6392a562b32457b3f5dAdrian Roos * 49125068a991b24d27810b6392a562b32457b3f5dAdrian Roos * Licensed under the Apache License, Version 2.0 (the "License"); 59125068a991b24d27810b6392a562b32457b3f5dAdrian Roos * you may not use this file except in compliance with the License. 69125068a991b24d27810b6392a562b32457b3f5dAdrian Roos * You may obtain a copy of the License at 79125068a991b24d27810b6392a562b32457b3f5dAdrian Roos * 89125068a991b24d27810b6392a562b32457b3f5dAdrian Roos * http://www.apache.org/licenses/LICENSE-2.0 99125068a991b24d27810b6392a562b32457b3f5dAdrian Roos * 109125068a991b24d27810b6392a562b32457b3f5dAdrian Roos * Unless required by applicable law or agreed to in writing, software 119125068a991b24d27810b6392a562b32457b3f5dAdrian Roos * distributed under the License is distributed on an "AS IS" BASIS, 129125068a991b24d27810b6392a562b32457b3f5dAdrian Roos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139125068a991b24d27810b6392a562b32457b3f5dAdrian Roos * See the License for the specific language governing permissions and 149125068a991b24d27810b6392a562b32457b3f5dAdrian Roos * limitations under the License 159125068a991b24d27810b6392a562b32457b3f5dAdrian Roos */ 169125068a991b24d27810b6392a562b32457b3f5dAdrian Roos 179125068a991b24d27810b6392a562b32457b3f5dAdrian Roospackage com.android.systemui.util.leak; 189125068a991b24d27810b6392a562b32457b3f5dAdrian Roos 199125068a991b24d27810b6392a562b32457b3f5dAdrian Roosimport static org.junit.Assert.assertTrue; 209125068a991b24d27810b6392a562b32457b3f5dAdrian Roosimport static org.mockito.ArgumentMatchers.any; 219125068a991b24d27810b6392a562b32457b3f5dAdrian Roosimport static org.mockito.ArgumentMatchers.anyInt; 229125068a991b24d27810b6392a562b32457b3f5dAdrian Roosimport static org.mockito.Mockito.doAnswer; 239125068a991b24d27810b6392a562b32457b3f5dAdrian Roosimport static org.mockito.Mockito.mock; 249125068a991b24d27810b6392a562b32457b3f5dAdrian Roosimport static org.mockito.Mockito.verify; 259125068a991b24d27810b6392a562b32457b3f5dAdrian Roos 269125068a991b24d27810b6392a562b32457b3f5dAdrian Roosimport android.app.NotificationManager; 2725a52b65b2cac1f49f37f4532cfa62282432957aJason Monkimport android.support.test.filters.MediumTest; 289125068a991b24d27810b6392a562b32457b3f5dAdrian Roosimport android.support.test.runner.AndroidJUnit4; 299125068a991b24d27810b6392a562b32457b3f5dAdrian Roos 309125068a991b24d27810b6392a562b32457b3f5dAdrian Roosimport com.android.systemui.SysuiTestCase; 319125068a991b24d27810b6392a562b32457b3f5dAdrian Roos 329125068a991b24d27810b6392a562b32457b3f5dAdrian Roosimport org.junit.After; 339125068a991b24d27810b6392a562b32457b3f5dAdrian Roosimport org.junit.Before; 3409ed8f6cfc3662d62d84fc65288408917906fa11Adrian Roosimport org.junit.Ignore; 359125068a991b24d27810b6392a562b32457b3f5dAdrian Roosimport org.junit.Test; 369125068a991b24d27810b6392a562b32457b3f5dAdrian Roosimport org.junit.runner.RunWith; 379125068a991b24d27810b6392a562b32457b3f5dAdrian Roos 389125068a991b24d27810b6392a562b32457b3f5dAdrian Roosimport java.io.File; 399125068a991b24d27810b6392a562b32457b3f5dAdrian Roosimport java.io.PrintWriter; 409125068a991b24d27810b6392a562b32457b3f5dAdrian Roos 419125068a991b24d27810b6392a562b32457b3f5dAdrian Roos@RunWith(AndroidJUnit4.class) 4225a52b65b2cac1f49f37f4532cfa62282432957aJason Monk@MediumTest 439125068a991b24d27810b6392a562b32457b3f5dAdrian Roospublic class LeakReporterTest extends SysuiTestCase { 449125068a991b24d27810b6392a562b32457b3f5dAdrian Roos 459125068a991b24d27810b6392a562b32457b3f5dAdrian Roos private LeakDetector mLeakDetector; 469125068a991b24d27810b6392a562b32457b3f5dAdrian Roos private LeakReporter mLeakReporter; 479125068a991b24d27810b6392a562b32457b3f5dAdrian Roos private File mLeakDir; 489125068a991b24d27810b6392a562b32457b3f5dAdrian Roos private File mLeakDump; 499125068a991b24d27810b6392a562b32457b3f5dAdrian Roos private File mLeakHprof; 509125068a991b24d27810b6392a562b32457b3f5dAdrian Roos private NotificationManager mNotificationManager; 519125068a991b24d27810b6392a562b32457b3f5dAdrian Roos 529125068a991b24d27810b6392a562b32457b3f5dAdrian Roos @Before 539125068a991b24d27810b6392a562b32457b3f5dAdrian Roos public void setup() { 549125068a991b24d27810b6392a562b32457b3f5dAdrian Roos mLeakDir = new File(mContext.getCacheDir(), LeakReporter.LEAK_DIR); 559125068a991b24d27810b6392a562b32457b3f5dAdrian Roos mLeakDump = new File(mLeakDir, LeakReporter.LEAK_DUMP); 569125068a991b24d27810b6392a562b32457b3f5dAdrian Roos mLeakHprof = new File(mLeakDir, LeakReporter.LEAK_HPROF); 579125068a991b24d27810b6392a562b32457b3f5dAdrian Roos 589125068a991b24d27810b6392a562b32457b3f5dAdrian Roos mNotificationManager = mock(NotificationManager.class); 599125068a991b24d27810b6392a562b32457b3f5dAdrian Roos mContext.addMockSystemService(NotificationManager.class, mNotificationManager); 609125068a991b24d27810b6392a562b32457b3f5dAdrian Roos 619125068a991b24d27810b6392a562b32457b3f5dAdrian Roos mLeakDetector = mock(LeakDetector.class); 629125068a991b24d27810b6392a562b32457b3f5dAdrian Roos doAnswer(invocation -> { 639125068a991b24d27810b6392a562b32457b3f5dAdrian Roos invocation.<PrintWriter>getArgument(1).println("test"); 649125068a991b24d27810b6392a562b32457b3f5dAdrian Roos return null; 659125068a991b24d27810b6392a562b32457b3f5dAdrian Roos }).when(mLeakDetector).dump(any(), any(), any()); 669125068a991b24d27810b6392a562b32457b3f5dAdrian Roos 679125068a991b24d27810b6392a562b32457b3f5dAdrian Roos mLeakReporter = new LeakReporter(mContext, mLeakDetector, "test@example.com"); 689125068a991b24d27810b6392a562b32457b3f5dAdrian Roos } 699125068a991b24d27810b6392a562b32457b3f5dAdrian Roos 709125068a991b24d27810b6392a562b32457b3f5dAdrian Roos @After 719125068a991b24d27810b6392a562b32457b3f5dAdrian Roos public void teardown() { 729125068a991b24d27810b6392a562b32457b3f5dAdrian Roos mLeakDump.delete(); 739125068a991b24d27810b6392a562b32457b3f5dAdrian Roos mLeakHprof.delete(); 749125068a991b24d27810b6392a562b32457b3f5dAdrian Roos mLeakDir.delete(); 759125068a991b24d27810b6392a562b32457b3f5dAdrian Roos } 769125068a991b24d27810b6392a562b32457b3f5dAdrian Roos 7709ed8f6cfc3662d62d84fc65288408917906fa11Adrian Roos @Ignore("slow") 789125068a991b24d27810b6392a562b32457b3f5dAdrian Roos @Test 799125068a991b24d27810b6392a562b32457b3f5dAdrian Roos public void testDump_postsNotification() { 809125068a991b24d27810b6392a562b32457b3f5dAdrian Roos mLeakReporter.dumpLeak(5); 819125068a991b24d27810b6392a562b32457b3f5dAdrian Roos verify(mNotificationManager).notify(any(), anyInt(), any()); 829125068a991b24d27810b6392a562b32457b3f5dAdrian Roos } 839125068a991b24d27810b6392a562b32457b3f5dAdrian Roos 8409ed8f6cfc3662d62d84fc65288408917906fa11Adrian Roos @Ignore("slow") 859125068a991b24d27810b6392a562b32457b3f5dAdrian Roos @Test 869125068a991b24d27810b6392a562b32457b3f5dAdrian Roos public void testDump_Repeated() { 879125068a991b24d27810b6392a562b32457b3f5dAdrian Roos mLeakReporter.dumpLeak(1); 889125068a991b24d27810b6392a562b32457b3f5dAdrian Roos mLeakReporter.dumpLeak(2); 899125068a991b24d27810b6392a562b32457b3f5dAdrian Roos } 909125068a991b24d27810b6392a562b32457b3f5dAdrian Roos 9109ed8f6cfc3662d62d84fc65288408917906fa11Adrian Roos @Ignore("slow") 929125068a991b24d27810b6392a562b32457b3f5dAdrian Roos @Test 939125068a991b24d27810b6392a562b32457b3f5dAdrian Roos public void testDump_ProducesNonZeroFiles() { 949125068a991b24d27810b6392a562b32457b3f5dAdrian Roos mLeakReporter.dumpLeak(5); 959125068a991b24d27810b6392a562b32457b3f5dAdrian Roos 969125068a991b24d27810b6392a562b32457b3f5dAdrian Roos assertTrue(mLeakDump.exists()); 979125068a991b24d27810b6392a562b32457b3f5dAdrian Roos assertTrue(mLeakDump.length() > 0); 989125068a991b24d27810b6392a562b32457b3f5dAdrian Roos 999125068a991b24d27810b6392a562b32457b3f5dAdrian Roos assertTrue(mLeakHprof.exists()); 1009125068a991b24d27810b6392a562b32457b3f5dAdrian Roos assertTrue(mLeakHprof.length() > 0); 1019125068a991b24d27810b6392a562b32457b3f5dAdrian Roos } 1029125068a991b24d27810b6392a562b32457b3f5dAdrian Roos}