• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2019 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.internal.protolog;
18 
19 import static org.junit.Assert.assertSame;
20 import static org.mockito.ArgumentMatchers.eq;
21 import static org.mockito.Mockito.mock;
22 import static org.mockito.Mockito.verify;
23 
24 import android.platform.test.annotations.Presubmit;
25 
26 import androidx.test.filters.SmallTest;
27 
28 import com.android.internal.protolog.common.IProtoLog;
29 import com.android.internal.protolog.common.IProtoLogGroup;
30 import com.android.internal.protolog.common.LogLevel;
31 
32 import org.junit.After;
33 import org.junit.Test;
34 import org.junit.runner.RunWith;
35 import org.junit.runners.JUnit4;
36 
37 /**
38  * Test class for {@link ProtoLogImpl}.
39  */
40 @SuppressWarnings("ConstantConditions")
41 @SmallTest
42 @Presubmit
43 @RunWith(JUnit4.class)
44 public class ProtoLogImplTest {
45     @After
tearDown()46     public void tearDown() {
47         ProtoLogImpl.setSingleInstance(null);
48     }
49 
50     @Test
getSingleInstance()51     public void getSingleInstance() {
52         IProtoLog mockedProtoLog = mock(IProtoLog.class);
53         ProtoLogImpl.setSingleInstance(mockedProtoLog);
54         assertSame(mockedProtoLog, ProtoLogImpl.getSingleInstance());
55     }
56 
57     @Test
d_logCalled()58     public void d_logCalled() {
59         IProtoLog mockedProtoLog = mock(IProtoLog.class);
60         ProtoLogImpl.setSingleInstance(mockedProtoLog);
61         ProtoLogImpl.d(TestProtoLogGroup.TEST_GROUP, 1234, 4321);
62         verify(mockedProtoLog).log(eq(LogLevel.DEBUG), eq(
63                 TestProtoLogGroup.TEST_GROUP),
64                 eq(1234L), eq(4321), eq(new Object[]{}));
65     }
66 
67     @Test
v_logCalled()68     public void v_logCalled() {
69         IProtoLog mockedProtoLog = mock(IProtoLog.class);
70         ProtoLogImpl.setSingleInstance(mockedProtoLog);
71         ProtoLogImpl.v(TestProtoLogGroup.TEST_GROUP, 1234, 4321);
72         verify(mockedProtoLog).log(eq(LogLevel.VERBOSE), eq(
73                 TestProtoLogGroup.TEST_GROUP),
74                 eq(1234L), eq(4321), eq(new Object[]{}));
75     }
76 
77     @Test
i_logCalled()78     public void i_logCalled() {
79         IProtoLog mockedProtoLog = mock(IProtoLog.class);
80         ProtoLogImpl.setSingleInstance(mockedProtoLog);
81         ProtoLogImpl.i(TestProtoLogGroup.TEST_GROUP, 1234, 4321);
82         verify(mockedProtoLog).log(eq(LogLevel.INFO), eq(
83                 TestProtoLogGroup.TEST_GROUP),
84                 eq(1234L), eq(4321), eq(new Object[]{}));
85     }
86 
87     @Test
w_logCalled()88     public void w_logCalled() {
89         IProtoLog mockedProtoLog = mock(IProtoLog.class);
90         ProtoLogImpl.setSingleInstance(mockedProtoLog);
91         ProtoLogImpl.w(TestProtoLogGroup.TEST_GROUP, 1234, 4321);
92         verify(mockedProtoLog).log(eq(LogLevel.WARN), eq(
93                 TestProtoLogGroup.TEST_GROUP),
94                 eq(1234L), eq(4321), eq(new Object[]{}));
95     }
96 
97     @Test
e_logCalled()98     public void e_logCalled() {
99         IProtoLog mockedProtoLog = mock(IProtoLog.class);
100         ProtoLogImpl.setSingleInstance(mockedProtoLog);
101         ProtoLogImpl.e(TestProtoLogGroup.TEST_GROUP, 1234, 4321);
102         verify(mockedProtoLog).log(eq(LogLevel.ERROR), eq(
103                 TestProtoLogGroup.TEST_GROUP),
104                 eq(1234L), eq(4321), eq(new Object[]{}));
105     }
106 
107     @Test
wtf_logCalled()108     public void wtf_logCalled() {
109         IProtoLog mockedProtoLog = mock(IProtoLog.class);
110         ProtoLogImpl.setSingleInstance(mockedProtoLog);
111         ProtoLogImpl.wtf(TestProtoLogGroup.TEST_GROUP,
112                 1234, 4321);
113         verify(mockedProtoLog).log(eq(LogLevel.WTF), eq(
114                 TestProtoLogGroup.TEST_GROUP),
115                 eq(1234L), eq(4321), eq(new Object[]{}));
116     }
117 
118     private enum TestProtoLogGroup implements IProtoLogGroup {
119         TEST_GROUP(true, true, false, "WindowManagetProtoLogTest");
120 
121         private final boolean mEnabled;
122         private volatile boolean mLogToProto;
123         private volatile boolean mLogToLogcat;
124         private final String mTag;
125 
126         /**
127          * @param enabled     set to false to exclude all log statements for this group from
128          *                    compilation,
129          *                    they will not be available in runtime.
130          * @param logToProto  enable binary logging for the group
131          * @param logToLogcat enable text logging for the group
132          * @param tag         name of the source of the logged message
133          */
TestProtoLogGroup(boolean enabled, boolean logToProto, boolean logToLogcat, String tag)134         TestProtoLogGroup(boolean enabled, boolean logToProto, boolean logToLogcat, String tag) {
135             this.mEnabled = enabled;
136             this.mLogToProto = logToProto;
137             this.mLogToLogcat = logToLogcat;
138             this.mTag = tag;
139         }
140 
141         @Override
isEnabled()142         public boolean isEnabled() {
143             return mEnabled;
144         }
145 
146         @Override
isLogToProto()147         public boolean isLogToProto() {
148             return mLogToProto;
149         }
150 
151         @Override
isLogToLogcat()152         public boolean isLogToLogcat() {
153             return mLogToLogcat;
154         }
155 
156         @Override
isLogToAny()157         public boolean isLogToAny() {
158             return mLogToLogcat || mLogToProto;
159         }
160 
161         @Override
getTag()162         public String getTag() {
163             return mTag;
164         }
165 
166         @Override
setLogToProto(boolean logToProto)167         public void setLogToProto(boolean logToProto) {
168             this.mLogToProto = logToProto;
169         }
170 
171         @Override
setLogToLogcat(boolean logToLogcat)172         public void setLogToLogcat(boolean logToLogcat) {
173             this.mLogToLogcat = logToLogcat;
174         }
175 
176         @Override
getId()177         public int getId() {
178             return ordinal();
179         }
180 
181     }
182 }
183