1616
1717package io .grpc ;
1818
19+ import static com .google .common .truth .Truth .assertThat ;
1920import static org .junit .Assert .assertEquals ;
2021import static org .junit .Assert .assertFalse ;
2122import static org .junit .Assert .assertNull ;
2223import static org .junit .Assert .assertSame ;
2324import static org .junit .Assert .assertTrue ;
2425import static org .junit .Assert .fail ;
2526
27+ import com .google .common .base .Supplier ;
2628import com .google .common .collect .ImmutableList ;
2729import io .grpc .InternalServiceProviders .PriorityAccessor ;
2830import java .util .Collections ;
2931import java .util .Iterator ;
3032import java .util .List ;
3133import java .util .ServiceConfigurationError ;
3234import java .util .ServiceLoader ;
35+ import org .junit .After ;
3336import org .junit .Test ;
3437import org .junit .runner .RunWith ;
3538import org .junit .runners .JUnit4 ;
3639
3740/** Unit tests for {@link ServiceProviders}. */
3841@ RunWith (JUnit4 .class )
3942public class ServiceProvidersTest {
40- private static final List <Class <?>> NO_HARDCODED = Collections .emptyList ();
4143 private static final PriorityAccessor <ServiceProvidersTestAbstractProvider > ACCESSOR =
4244 new PriorityAccessor <ServiceProvidersTestAbstractProvider >() {
4345 @ Override
@@ -52,6 +54,19 @@ public int getPriority(ServiceProvidersTestAbstractProvider provider) {
5254 };
5355 private final String serviceFile =
5456 "META-INF/services/io.grpc.ServiceProvidersTestAbstractProvider" ;
57+ private boolean failingHardCodedAccessed ;
58+ private final Supplier <Iterable <Class <?>>> failingHardCoded = new Supplier <Iterable <Class <?>>>() {
59+ @ Override
60+ public Iterable <Class <?>> get () {
61+ failingHardCodedAccessed = true ;
62+ throw new AssertionError ();
63+ }
64+ };
65+
66+ @ After
67+ public void tearDown () {
68+ assertThat (failingHardCodedAccessed ).isFalse ();
69+ }
5570
5671 @ Test
5772 public void contextClassLoaderProvider () {
@@ -70,7 +85,8 @@ public void contextClassLoaderProvider() {
7085 Thread .currentThread ().setContextClassLoader (rcll );
7186 assertEquals (
7287 Available7Provider .class ,
73- load (ServiceProvidersTestAbstractProvider .class , NO_HARDCODED , cl , ACCESSOR ).getClass ());
88+ load (ServiceProvidersTestAbstractProvider .class , failingHardCoded , cl , ACCESSOR )
89+ .getClass ());
7490 } finally {
7591 Thread .currentThread ().setContextClassLoader (ccl );
7692 }
@@ -85,7 +101,7 @@ public void noProvider() {
85101 serviceFile ,
86102 "io/grpc/ServiceProvidersTestAbstractProvider-doesNotExist.txt" );
87103 Thread .currentThread ().setContextClassLoader (cl );
88- assertNull (load (ServiceProvidersTestAbstractProvider .class , NO_HARDCODED , cl , ACCESSOR ));
104+ assertNull (load (ServiceProvidersTestAbstractProvider .class , failingHardCoded , cl , ACCESSOR ));
89105 } finally {
90106 Thread .currentThread ().setContextClassLoader (ccl );
91107 }
@@ -97,10 +113,11 @@ public void multipleProvider() throws Exception {
97113 "io/grpc/ServiceProvidersTestAbstractProvider-multipleProvider.txt" );
98114 assertSame (
99115 Available7Provider .class ,
100- load (ServiceProvidersTestAbstractProvider .class , NO_HARDCODED , cl , ACCESSOR ).getClass ());
116+ load (ServiceProvidersTestAbstractProvider .class , failingHardCoded , cl , ACCESSOR )
117+ .getClass ());
101118
102119 List <ServiceProvidersTestAbstractProvider > providers = loadAll (
103- ServiceProvidersTestAbstractProvider .class , NO_HARDCODED , cl , ACCESSOR );
120+ ServiceProvidersTestAbstractProvider .class , failingHardCoded , cl , ACCESSOR );
104121 assertEquals (3 , providers .size ());
105122 assertEquals (Available7Provider .class , providers .get (0 ).getClass ());
106123 assertEquals (Available5Provider .class , providers .get (1 ).getClass ());
@@ -114,15 +131,16 @@ public void unavailableProvider() {
114131 "io/grpc/ServiceProvidersTestAbstractProvider-unavailableProvider.txt" );
115132 assertEquals (
116133 Available7Provider .class ,
117- load (ServiceProvidersTestAbstractProvider .class , NO_HARDCODED , cl , ACCESSOR ).getClass ());
134+ load (ServiceProvidersTestAbstractProvider .class , failingHardCoded , cl , ACCESSOR )
135+ .getClass ());
118136 }
119137
120138 @ Test
121139 public void unknownClassProvider () {
122140 ClassLoader cl = new ReplacingClassLoader (getClass ().getClassLoader (), serviceFile ,
123141 "io/grpc/ServiceProvidersTestAbstractProvider-unknownClassProvider.txt" );
124142 try {
125- loadAll (ServiceProvidersTestAbstractProvider .class , NO_HARDCODED , cl , ACCESSOR );
143+ loadAll (ServiceProvidersTestAbstractProvider .class , failingHardCoded , cl , ACCESSOR );
126144 fail ("Exception expected" );
127145 } catch (ServiceConfigurationError e ) {
128146 // noop
@@ -136,7 +154,7 @@ public void exceptionSurfacedToCaller_failAtInit() {
136154 try {
137155 // Even though there is a working provider, if any providers fail then we should fail
138156 // completely to avoid returning something unexpected.
139- loadAll (ServiceProvidersTestAbstractProvider .class , NO_HARDCODED , cl , ACCESSOR );
157+ loadAll (ServiceProvidersTestAbstractProvider .class , failingHardCoded , cl , ACCESSOR );
140158 fail ("Expected exception" );
141159 } catch (ServiceConfigurationError expected ) {
142160 // noop
@@ -149,7 +167,7 @@ public void exceptionSurfacedToCaller_failAtPriority() {
149167 "io/grpc/ServiceProvidersTestAbstractProvider-failAtPriorityProvider.txt" );
150168 try {
151169 // The exception should be surfaced to the caller
152- loadAll (ServiceProvidersTestAbstractProvider .class , NO_HARDCODED , cl , ACCESSOR );
170+ loadAll (ServiceProvidersTestAbstractProvider .class , failingHardCoded , cl , ACCESSOR );
153171 fail ("Expected exception" );
154172 } catch (FailAtPriorityProvider .PriorityException expected ) {
155173 // noop
@@ -162,7 +180,7 @@ public void exceptionSurfacedToCaller_failAtAvailable() {
162180 "io/grpc/ServiceProvidersTestAbstractProvider-failAtAvailableProvider.txt" );
163181 try {
164182 // The exception should be surfaced to the caller
165- loadAll (ServiceProvidersTestAbstractProvider .class , NO_HARDCODED , cl , ACCESSOR );
183+ loadAll (ServiceProvidersTestAbstractProvider .class , failingHardCoded , cl , ACCESSOR );
166184 fail ("Expected exception" );
167185 } catch (FailAtAvailableProvider .AvailableException expected ) {
168186 // noop
@@ -239,10 +257,10 @@ class RandomClass {}
239257
240258 private static <T > T load (
241259 Class <T > klass ,
242- Iterable <Class <?>> hardcoded ,
260+ Supplier < Iterable <Class <?>>> hardCoded ,
243261 ClassLoader cl ,
244262 PriorityAccessor <T > priorityAccessor ) {
245- List <T > candidates = loadAll (klass , hardcoded , cl , priorityAccessor );
263+ List <T > candidates = loadAll (klass , hardCoded , cl , priorityAccessor );
246264 if (candidates .isEmpty ()) {
247265 return null ;
248266 }
@@ -251,13 +269,13 @@ private static <T> T load(
251269
252270 private static <T > List <T > loadAll (
253271 Class <T > klass ,
254- Iterable <Class <?>> hardcoded ,
272+ Supplier < Iterable <Class <?>>> hardCoded ,
255273 ClassLoader classLoader ,
256274 PriorityAccessor <T > priorityAccessor ) {
257275 return ServiceProviders .loadAll (
258276 klass ,
259277 ServiceLoader .load (klass , classLoader ).iterator (),
260- hardcoded ,
278+ hardCoded ,
261279 priorityAccessor );
262280 }
263281
0 commit comments