2121import android .app .Application ;
2222import android .content .Intent ;
2323import androidx .test .core .app .ApplicationProvider ;
24+ import com .google .common .collect .ImmutableList ;
2425import io .grpc .ServerStreamTracer ;
2526import io .grpc .binder .AndroidComponentAddress ;
2627import io .grpc .internal .AbstractTransportTest ;
3334import java .util .List ;
3435import java .util .concurrent .Executor ;
3536import java .util .concurrent .ScheduledExecutorService ;
37+ import org .junit .Before ;
3638import org .junit .Ignore ;
3739import org .junit .Test ;
3840import org .junit .runner .RunWith ;
39- import org .robolectric .RobolectricTestRunner ;
41+ import org .robolectric .ParameterizedRobolectricTestRunner ;
42+ import org .robolectric .ParameterizedRobolectricTestRunner .Parameter ;
43+ import org .robolectric .ParameterizedRobolectricTestRunner .Parameters ;
4044import org .robolectric .annotation .LooperMode ;
4145import org .robolectric .annotation .LooperMode .Mode ;
4246
5256 * meaning test cases don't run on the main thread. This supports the AbstractTransportTest approach
5357 * where the test thread frequently blocks waiting for transport state changes to take effect.
5458 */
55- @ RunWith (RobolectricTestRunner .class )
59+ @ RunWith (ParameterizedRobolectricTestRunner .class )
5660@ LooperMode (Mode .INSTRUMENTATION_TEST )
5761public final class RobolectricBinderTransportTest extends AbstractTransportTest {
5862
@@ -66,6 +70,20 @@ public final class RobolectricBinderTransportTest extends AbstractTransportTest
6670
6771 private int nextServerAddress ;
6872
73+ @ Parameter
74+ public boolean preAuthorizeServers ;
75+
76+ @ Parameters (name = "preAuthorizeServers={0}" )
77+ public static ImmutableList <Boolean > data () {
78+ return ImmutableList .of (true , false );
79+ }
80+
81+ @ Before
82+ public void requestRealisticBindServiceBehavior () {
83+ shadowOf (application ).setBindServiceCallsOnServiceConnectedDirectly (false );
84+ shadowOf (application ).setUnbindServiceCallsOnServiceDisconnected (false );
85+ }
86+
6987 @ Override
7088 protected InternalServer newServer (List <ServerStreamTracer .Factory > streamTracerFactories ) {
7189 AndroidComponentAddress listenAddr = AndroidComponentAddress .forBindIntent (
@@ -81,6 +99,7 @@ protected InternalServer newServer(List<ServerStreamTracer.Factory> streamTracer
8199 .setStreamTracerFactories (streamTracerFactories )
82100 .build ();
83101
102+ shadowOf (application .getPackageManager ()).addServiceIfNotPresent (listenAddr .getComponent ());
84103 shadowOf (application )
85104 .setComponentNameAndServiceForBindServiceForIntent (
86105 listenAddr .asBindIntent (), listenAddr .getComponent (), binderServer .getHostBinder ());
@@ -101,6 +120,7 @@ protected InternalServer newServer(
101120 protected ManagedClientTransport newClientTransport (InternalServer server ) {
102121 BinderClientTransportFactory .Builder builder =
103122 new BinderClientTransportFactory .Builder ()
123+ .setPreAuthorizeServers (preAuthorizeServers )
104124 .setSourceContext (application )
105125 .setScheduledExecutorPool (executorServicePool )
106126 .setOffloadExecutorPool (offloadExecutorPool );
0 commit comments