blob: 9bdcaa6bfc240a57c5410209706dbfceb73fcf11 [file] [log] [blame]
/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.car.stats;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.when;
import android.car.vms.VmsLayer;
import android.content.Context;
import android.content.pm.PackageManager;
import androidx.test.filters.SmallTest;
import com.android.car.stats.VmsClientLogger.ConnectionState;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import java.io.PrintWriter;
import java.io.StringWriter;
@SmallTest
@RunWith(JUnit4.class)
public class CarStatsServiceTest {
private static final int CLIENT_UID = 10101;
private static final int CLIENT_UID2 = 10102;
private static final String CLIENT_PACKAGE = "test.package";
private static final String CLIENT_PACKAGE2 = "test.package2";
private static final VmsLayer LAYER = new VmsLayer(1, 2, 3);
private static final VmsLayer LAYER2 = new VmsLayer(2, 3, 4);
private static final VmsLayer LAYER3 = new VmsLayer(3, 4, 5);
@Rule
public MockitoRule mMockitoRule = MockitoJUnit.rule();
@Mock
private Context mContext;
@Mock
private PackageManager mPackageManager;
private CarStatsService mCarStatsService;
private StringWriter mDumpsysOutput;
private PrintWriter mDumpsysWriter;
@Before
public void setUp() {
when(mContext.getPackageManager()).thenReturn(mPackageManager);
when(mPackageManager.getNameForUid(CLIENT_UID)).thenReturn(CLIENT_PACKAGE);
when(mPackageManager.getNameForUid(CLIENT_UID2)).thenReturn(CLIENT_PACKAGE2);
mCarStatsService = new CarStatsService(mContext);
mDumpsysOutput = new StringWriter();
mDumpsysWriter = new PrintWriter(mDumpsysOutput);
}
@Test
public void testEmptyStats() {
mCarStatsService.dump(null, mDumpsysWriter, new String[0]);
assertEquals(
"uid,packageName,attempts,connected,disconnected,terminated,errors\n"
+ "\nuid,layerType,layerChannel,layerVersion,"
+ "txBytes,txPackets,rxBytes,rxPackets,droppedBytes,droppedPackets\n",
mDumpsysOutput.toString());
}
@Test
public void testLogConnectionState_Connecting() {
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logConnectionState(ConnectionState.CONNECTING);
validateConnectionStats("10101,test.package,1,0,0,0,0");
}
@Test
public void testLogConnectionState_Connected() {
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logConnectionState(ConnectionState.CONNECTED);
validateConnectionStats("10101,test.package,0,1,0,0,0");
}
@Test
public void testLogConnectionState_Disconnected() {
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logConnectionState(ConnectionState.DISCONNECTED);
validateConnectionStats("10101,test.package,0,0,1,0,0");
}
@Test
public void testLogConnectionState_Terminated() {
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logConnectionState(ConnectionState.TERMINATED);
validateConnectionStats("10101,test.package,0,0,0,1,0");
}
@Test
public void testLogConnectionState_ConnectionError() {
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logConnectionState(ConnectionState.CONNECTION_ERROR);
validateConnectionStats("10101,test.package,0,0,0,0,1");
}
@Test
public void testLogConnectionState_UnknownUID() {
mCarStatsService.getVmsClientLogger(-1)
.logConnectionState(ConnectionState.CONNECTING);
testEmptyStats();
}
@Test
public void testLogConnectionState_MultipleClients_MultipleStates() {
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logConnectionState(ConnectionState.CONNECTING);
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logConnectionState(ConnectionState.CONNECTED);
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logConnectionState(ConnectionState.DISCONNECTED);
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logConnectionState(ConnectionState.CONNECTED);
mCarStatsService.getVmsClientLogger(CLIENT_UID2)
.logConnectionState(ConnectionState.CONNECTING);
mCarStatsService.getVmsClientLogger(CLIENT_UID2)
.logConnectionState(ConnectionState.CONNECTED);
mCarStatsService.getVmsClientLogger(CLIENT_UID2)
.logConnectionState(ConnectionState.TERMINATED);
mCarStatsService.getVmsClientLogger(CLIENT_UID2)
.logConnectionState(ConnectionState.CONNECTING);
mCarStatsService.getVmsClientLogger(CLIENT_UID2)
.logConnectionState(ConnectionState.CONNECTION_ERROR);
validateConnectionStats(
"10101,test.package,1,2,1,0,0\n"
+ "10102,test.package2,2,1,0,1,1");
}
@Test
public void testLogPacketSent() {
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketSent(LAYER, 5);
validateClientStats("10101,1,2,3,5,1,0,0,0,0");
}
@Test
public void testLogPacketSent_MultiplePackets() {
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketSent(LAYER, 3);
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketSent(LAYER, 2);
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketSent(LAYER, 1);
validateClientStats("10101,1,2,3,6,3,0,0,0,0");
}
@Test
public void testLogPacketSent_MultipleLayers() {
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketSent(LAYER, 3);
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketSent(LAYER2, 2);
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketSent(LAYER3, 1);
validateClientStats(
"10101,1,2,3,3,1,0,0,0,0\n"
+ "10101,2,3,4,2,1,0,0,0,0\n"
+ "10101,3,4,5,1,1,0,0,0,0");
}
@Test
public void testLogPacketSent_MultipleClients() {
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketSent(LAYER, 3);
mCarStatsService.getVmsClientLogger(CLIENT_UID2)
.logPacketSent(LAYER, 2);
mCarStatsService.getVmsClientLogger(CLIENT_UID2)
.logPacketSent(LAYER2, 1);
validateDumpsys(
"10101,test.package,0,0,0,0,0\n"
+ "10102,test.package2,0,0,0,0,0\n",
"10101,1,2,3,3,1,0,0,0,0\n"
+ "10102,1,2,3,2,1,0,0,0,0\n"
+ "10102,2,3,4,1,1,0,0,0,0\n");
}
@Test
public void testLogPacketReceived() {
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketReceived(LAYER, 5);
validateClientStats("10101,1,2,3,0,0,5,1,0,0");
}
@Test
public void testLogPacketReceived_MultiplePackets() {
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketReceived(LAYER, 3);
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketReceived(LAYER, 2);
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketReceived(LAYER, 1);
validateClientStats("10101,1,2,3,0,0,6,3,0,0");
}
@Test
public void testLogPacketReceived_MultipleLayers() {
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketReceived(LAYER, 3);
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketReceived(LAYER2, 2);
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketReceived(LAYER3, 1);
validateClientStats(
"10101,1,2,3,0,0,3,1,0,0\n"
+ "10101,2,3,4,0,0,2,1,0,0\n"
+ "10101,3,4,5,0,0,1,1,0,0");
}
@Test
public void testLogPacketReceived_MultipleClients() {
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketReceived(LAYER, 3);
mCarStatsService.getVmsClientLogger(CLIENT_UID2)
.logPacketReceived(LAYER, 2);
mCarStatsService.getVmsClientLogger(CLIENT_UID2)
.logPacketReceived(LAYER2, 1);
validateDumpsys(
"10101,test.package,0,0,0,0,0\n"
+ "10102,test.package2,0,0,0,0,0\n",
"10101,1,2,3,0,0,3,1,0,0\n"
+ "10102,1,2,3,0,0,2,1,0,0\n"
+ "10102,2,3,4,0,0,1,1,0,0\n");
}
@Test
public void testLogPacketDropped() {
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketDropped(LAYER, 5);
validateClientStats("10101,1,2,3,0,0,0,0,5,1");
}
@Test
public void testLogPacketDropped_MultiplePackets() {
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketDropped(LAYER, 3);
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketDropped(LAYER, 2);
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketDropped(LAYER, 1);
validateClientStats("10101,1,2,3,0,0,0,0,6,3");
}
@Test
public void testLogPacketDropped_MultipleLayers() {
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketDropped(LAYER, 3);
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketDropped(LAYER2, 2);
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketDropped(LAYER3, 1);
validateClientStats(
"10101,1,2,3,0,0,0,0,3,1\n"
+ "10101,2,3,4,0,0,0,0,2,1\n"
+ "10101,3,4,5,0,0,0,0,1,1");
}
@Test
public void testLogPacketDropped_MultipleClients() {
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketDropped(LAYER, 3);
mCarStatsService.getVmsClientLogger(CLIENT_UID2)
.logPacketDropped(LAYER, 2);
mCarStatsService.getVmsClientLogger(CLIENT_UID2)
.logPacketDropped(LAYER2, 1);
validateDumpsys(
"10101,test.package,0,0,0,0,0\n"
+ "10102,test.package2,0,0,0,0,0\n",
"10101,1,2,3,0,0,0,0,3,1\n"
+ "10102,1,2,3,0,0,0,0,2,1\n"
+ "10102,2,3,4,0,0,0,0,1,1\n");
}
@Test
public void testLogPackets_MultipleClients_MultipleLayers_MultipleOperations() {
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketSent(LAYER, 3);
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketReceived(LAYER, 2);
mCarStatsService.getVmsClientLogger(CLIENT_UID)
.logPacketDropped(LAYER, 1);
mCarStatsService.getVmsClientLogger(CLIENT_UID2)
.logPacketReceived(LAYER, 2);
mCarStatsService.getVmsClientLogger(CLIENT_UID2)
.logPacketReceived(LAYER, 2);
mCarStatsService.getVmsClientLogger(CLIENT_UID2)
.logPacketReceived(LAYER, 2);
mCarStatsService.getVmsClientLogger(CLIENT_UID2)
.logPacketSent(LAYER2, 2);
mCarStatsService.getVmsClientLogger(-1)
.logPacketDropped(LAYER2, 12);
validateDumpsys(
"10101,test.package,0,0,0,0,0\n"
+ "10102,test.package2,0,0,0,0,0\n",
"-1,2,3,4,0,0,0,0,12,1\n"
+ "10101,1,2,3,3,1,2,1,1,1\n"
+ "10102,1,2,3,0,0,6,3,0,0\n"
+ "10102,2,3,4,2,1,0,0,0,0\n");
}
private void validateConnectionStats(String vmsConnectionStats) {
validateDumpsys(vmsConnectionStats + "\n", "");
}
private void validateClientStats(String vmsClientStats) {
validateDumpsys(
"10101,test.package,0,0,0,0,0\n",
vmsClientStats + "\n");
}
private void validateDumpsys(String vmsConnectionStats, String vmsClientStats) {
mCarStatsService.dump(null, mDumpsysWriter, new String[0]);
assertEquals(
"uid,packageName,attempts,connected,disconnected,terminated,errors\n"
+ vmsConnectionStats
+ "\n"
+ "uid,layerType,layerChannel,layerVersion,"
+ "txBytes,txPackets,rxBytes,rxPackets,droppedBytes,droppedPackets\n"
+ vmsClientStats,
mDumpsysOutput.toString());
}
}