Merge "Merge "Move some NetworkStats tests to tests/net." into oc-dev am: 74fe2cbc3a -s ours am: c1cb5c3a8c -s ours"

This commit is contained in:
Android Build Merger (Role)
2017-05-09 06:49:20 +00:00
committed by Android (Google) Code Review

View File

@@ -16,121 +16,68 @@
package com.android.server; package com.android.server;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.any; import static org.mockito.Mockito.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never; import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.timeout; import static org.mockito.Mockito.timeout;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.os.Handler; import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper; import android.os.Looper;
import android.os.Message; import android.os.Message;
import android.os.test.TestLooper;
import android.content.Context; import android.content.Context;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.net.nsd.NsdManager; import android.net.nsd.NsdManager;
import android.net.nsd.NsdServiceInfo;
import com.android.server.NsdService.DaemonConnection; import com.android.server.NsdService.DaemonConnection;
import com.android.server.NsdService.DaemonConnectionSupplier; import com.android.server.NsdService.DaemonConnectionSupplier;
import com.android.server.NsdService.NativeCallbackReceiver; import com.android.server.NsdService.NativeCallbackReceiver;
import android.support.test.filters.SmallTest; import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4; import android.support.test.runner.AndroidJUnit4;
import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
// TODOs: // TODOs:
// - test client disconnects
// - test client can send requests and receive replies // - test client can send requests and receive replies
// - test NSD_ON ENABLE/DISABLED listening // - test NSD_ON ENABLE/DISABLED listening
@RunWith(AndroidJUnit4.class) @RunWith(AndroidJUnit4.class)
@SmallTest @SmallTest
public class NsdServiceTest { public class NsdServiceTest {
static final int PROTOCOL = NsdManager.PROTOCOL_DNS_SD;
long mTimeoutMs = 100; // non-final so that tests can adjust the value.
@Mock Context mContext; @Mock Context mContext;
@Mock ContentResolver mResolver; @Mock ContentResolver mResolver;
@Mock NsdService.NsdSettings mSettings; @Mock NsdService.NsdSettings mSettings;
@Mock DaemonConnection mDaemon; @Mock DaemonConnection mDaemon;
NativeCallbackReceiver mDaemonCallback; NativeCallbackReceiver mDaemonCallback;
HandlerThread mThread; TestLooper mLooper;
TestHandler mHandler; TestHandler mHandler;
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mThread = new HandlerThread("mock-service-handler"); mLooper = new TestLooper();
mThread.start(); mHandler = new TestHandler(mLooper.getLooper());
mHandler = new TestHandler(mThread.getLooper());
when(mContext.getContentResolver()).thenReturn(mResolver); when(mContext.getContentResolver()).thenReturn(mResolver);
} }
@After
public void tearDown() throws Exception {
mThread.quit();
}
@Test @Test
public void testClientsCanConnectAndDisconnect() { public void testClientsCanConnect() {
when(mSettings.isEnabled()).thenReturn(true); when(mSettings.isEnabled()).thenReturn(true);
NsdService service = makeService(); NsdService service = makeService();
NsdManager client1 = connectClient(service); NsdManager client1 = connectClient(service);
verify(mDaemon, timeout(100).times(1)).start(); verify(mDaemon, timeout(100).times(1)).execute("start-service");
NsdManager client2 = connectClient(service); NsdManager client2 = connectClient(service);
client1.disconnect(); // TODO: disconnect client1
client2.disconnect(); // TODO: disconnect client2
verify(mDaemon, timeout(mTimeoutMs).times(1)).stop();
}
@Test
public void testClientRequestsAreGCedAtDisconnection() {
when(mSettings.isEnabled()).thenReturn(true);
when(mDaemon.execute(any())).thenReturn(true);
NsdService service = makeService();
NsdManager client = connectClient(service);
verify(mDaemon, timeout(100).times(1)).start();
NsdServiceInfo request = new NsdServiceInfo("a_name", "a_type");
request.setPort(2201);
// Client registration request
NsdManager.RegistrationListener listener1 = mock(NsdManager.RegistrationListener.class);
client.registerService(request, PROTOCOL, listener1);
verifyDaemonCommand("register 2 a_name a_type 2201");
// Client discovery request
NsdManager.DiscoveryListener listener2 = mock(NsdManager.DiscoveryListener.class);
client.discoverServices("a_type", PROTOCOL, listener2);
verifyDaemonCommand("discover 3 a_type");
// Client resolve request
NsdManager.ResolveListener listener3 = mock(NsdManager.ResolveListener.class);
client.resolveService(request, listener3);
verifyDaemonCommand("resolve 4 a_name a_type local.");
// Client disconnects
client.disconnect();
verify(mDaemon, timeout(mTimeoutMs).times(1)).stop();
// checks that request are cleaned
verifyDaemonCommands("stop-register 2", "stop-discover 3", "stop-resolve 4");
} }
NsdService makeService() { NsdService makeService() {
@@ -144,28 +91,10 @@ public class NsdServiceTest {
} }
NsdManager connectClient(NsdService service) { NsdManager connectClient(NsdService service) {
return new NsdManager(mContext, service); mLooper.startAutoDispatch();
} NsdManager client = new NsdManager(mContext, service);
mLooper.stopAutoDispatch();
void verifyDaemonCommands(String... wants) { return client;
verifyDaemonCommand(String.join(" ", wants), wants.length);
}
void verifyDaemonCommand(String want) {
verifyDaemonCommand(want, 1);
}
void verifyDaemonCommand(String want, int n) {
ArgumentCaptor<Object> argumentsCaptor = ArgumentCaptor.forClass(Object.class);
verify(mDaemon, timeout(mTimeoutMs).times(n)).execute(argumentsCaptor.capture());
String got = "";
for (Object o : argumentsCaptor.getAllValues()) {
got += o + " ";
}
assertEquals(want, got.trim());
// rearm deamon for next command verification
reset(mDaemon);
when(mDaemon.execute(any())).thenReturn(true);
} }
public static class TestHandler extends Handler { public static class TestHandler extends Handler {