Skip to content

Commit

Permalink
xds: add null reference checks in SslContextProviderSupplier (#8169)
Browse files Browse the repository at this point in the history
  • Loading branch information
sanjaypujare committed May 12, 2021
1 parent e08b9db commit e59604b
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 7 deletions.
Expand Up @@ -41,8 +41,8 @@ public final class SslContextProviderSupplier implements Closeable {

public SslContextProviderSupplier(
BaseTlsContext tlsContext, TlsContextManager tlsContextManager) {
this.tlsContext = tlsContext;
this.tlsContextManager = tlsContextManager;
this.tlsContext = checkNotNull(tlsContext, "tlsContext");
this.tlsContextManager = checkNotNull(tlsContextManager, "tlsContextManager");
}

public BaseTlsContext getTlsContext() {
Expand Down Expand Up @@ -92,10 +92,12 @@ private SslContextProvider getSslContextProvider() {
/** Called by consumer when tlsContext changes. */
@Override
public synchronized void close() {
if (tlsContext instanceof UpstreamTlsContext) {
tlsContextManager.releaseClientSslContextProvider(sslContextProvider);
} else {
tlsContextManager.releaseServerSslContextProvider(sslContextProvider);
if (sslContextProvider != null) {
if (tlsContext instanceof UpstreamTlsContext) {
tlsContextManager.releaseClientSslContextProvider(sslContextProvider);
} else {
tlsContextManager.releaseServerSslContextProvider(sslContextProvider);
}
}
shutdown = true;
}
Expand Down
Expand Up @@ -23,7 +23,9 @@
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

Expand Down Expand Up @@ -65,16 +67,20 @@ private void prepareSupplier() {
doReturn(mockSslContextProvider)
.when(mockTlsContextManager)
.findOrCreateClientSslContextProvider(eq(upstreamTlsContext));
supplier = new SslContextProviderSupplier(upstreamTlsContext, mockTlsContextManager);
}

private void callUpdateSslContext() {
mockCallback = mock(SslContextProvider.Callback.class);
Executor mockExecutor = mock(Executor.class);
doReturn(mockExecutor).when(mockCallback).getExecutor();
supplier = new SslContextProviderSupplier(upstreamTlsContext, mockTlsContextManager);
supplier.updateSslContext(mockCallback);
}

@Test
public void get_updateSecret() {
prepareSupplier();
callUpdateSslContext();
verify(mockTlsContextManager, times(2))
.findOrCreateClientSslContextProvider(eq(upstreamTlsContext));
verify(mockTlsContextManager, times(0))
Expand All @@ -97,6 +103,7 @@ public void get_updateSecret() {
@Test
public void get_onException() {
prepareSupplier();
callUpdateSslContext();
ArgumentCaptor<SslContextProvider.Callback> callbackCaptor = ArgumentCaptor.forClass(null);
verify(mockSslContextProvider, times(1)).addCallback(callbackCaptor.capture());
SslContextProvider.Callback capturedCallback = callbackCaptor.getValue();
Expand All @@ -109,6 +116,7 @@ public void get_onException() {
@Test
public void testClose() {
prepareSupplier();
callUpdateSslContext();
supplier.close();
verify(mockTlsContextManager, times(1))
.releaseClientSslContextProvider(eq(mockSslContextProvider));
Expand All @@ -120,4 +128,21 @@ public void testClose() {
assertThat(expected).hasMessageThat().isEqualTo("Supplier is shutdown!");
}
}

@Test
public void testClose_nullSslContextProvider() {
prepareSupplier();
doThrow(new NullPointerException()).when(mockTlsContextManager)
.releaseClientSslContextProvider(null);
supplier.close();
verify(mockTlsContextManager, never())
.releaseClientSslContextProvider(eq(mockSslContextProvider));
SslContextProvider.Callback mockCallback = mock(SslContextProvider.Callback.class);
try {
supplier.updateSslContext(mockCallback);
Assert.fail("no exception thrown");
} catch (IllegalStateException expected) {
assertThat(expected).hasMessageThat().isEqualTo("Supplier is shutdown!");
}
}
}

0 comments on commit e59604b

Please sign in to comment.