Skip to content

netty: Per-rpc call option authority verification against peer cert subject names #11724

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 81 commits into from
Feb 24, 2025
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
fa36f83
In-progress changes.
kannanjgithub Nov 18, 2024
f31b8bc
In-progress changes that used ExtendedSSLSession.
kannanjgithub Nov 26, 2024
0152478
Authority verify in Netty transport.
kannanjgithub Nov 27, 2024
c31995e
In-progress changes for Authority verify in okhttp transport.
kannanjgithub Nov 29, 2024
5e2e22e
Netty authority verify against peer host in server cert.
kannanjgithub Nov 30, 2024
b0f86cf
unit test.
kannanjgithub Dec 1, 2024
dd95f8f
in-progress changes.
kannanjgithub Dec 2, 2024
5ba5431
nit changes and drop unintended changes.
kannanjgithub Dec 2, 2024
e42492b
nit changes and drop unintended changes.
kannanjgithub Dec 2, 2024
5285353
Cache the peer verification result.
kannanjgithub Dec 4, 2024
ea969ef
Move extraction of X509ExtendedTrustManager to utils.
kannanjgithub Dec 4, 2024
4d71cce
commit
kannanjgithub Dec 4, 2024
94172de
Fixes.
kannanjgithub Dec 4, 2024
0ddd42c
Fixes.
kannanjgithub Dec 4, 2024
909b863
Fixes.
kannanjgithub Dec 4, 2024
5109115
Fixes.
kannanjgithub Dec 4, 2024
d5f3968
nit
kannanjgithub Dec 4, 2024
24500f4
Changes.
kannanjgithub Dec 4, 2024
1e072d4
In-progress review comments.
kannanjgithub Dec 9, 2024
32104ce
Address review comments.
kannanjgithub Dec 9, 2024
95aae4a
revert unintended
kannanjgithub Dec 9, 2024
c0327b5
revert unintended
kannanjgithub Dec 9, 2024
b24a605
Address review comments.
kannanjgithub Dec 13, 2024
862b95b
Fix warning.
kannanjgithub Dec 13, 2024
8902dbd
Address review comments.
kannanjgithub Dec 14, 2024
01b0eb2
Address review comments.
kannanjgithub Dec 14, 2024
60bfa06
In progress changes.
kannanjgithub Dec 14, 2024
8dd8749
Remove duplicate definitions of createTrustManager.
kannanjgithub Dec 14, 2024
23a0822
in-progress changes.
kannanjgithub Dec 14, 2024
0a9124c
in-progress changes.
kannanjgithub Dec 14, 2024
f9305e7
in-progress changes.
kannanjgithub Dec 14, 2024
4af94ec
in-progress changes.
kannanjgithub Dec 14, 2024
ece5487
Merge branch 'grpc:master' into authorityverifyokhttp
kannanjgithub Dec 15, 2024
aa59965
Unit tests and using HostnameVerifier in per-rpc.
kannanjgithub Dec 15, 2024
20fa07d
Merge remote-tracking branch 'origin/authorityverifyokhttp' into auth…
kannanjgithub Dec 15, 2024
3d744d9
Review comments.
kannanjgithub Dec 16, 2024
746717e
Revert unintended changes.
kannanjgithub Dec 16, 2024
0d310b3
Revert unintended changes.
kannanjgithub Dec 16, 2024
4ef0fdb
Move NoopSslSession to io.grpc.internal under grpc-core project.
kannanjgithub Dec 18, 2024
3e2ef72
Address review comments.
kannanjgithub Dec 18, 2024
30b1e14
Address review comments.
kannanjgithub Dec 18, 2024
fdc6e94
Added flag with default false for the per-rpc authority check.
kannanjgithub Dec 19, 2024
f996474
Added flag with default false for the per-rpc authority check and rem…
kannanjgithub Dec 19, 2024
f5b3614
Update README etc to reference 1.69.0
kannanjgithub Dec 9, 2024
86b9529
:Revert "Update README etc to reference 1.69.0"
kannanjgithub Dec 20, 2024
60efd84
Fix style.
kannanjgithub Jan 7, 2025
60b1ee0
Fix style.
kannanjgithub Jan 7, 2025
d2af807
Merge branch 'master' into authoritychecktls
kannanjgithub Jan 7, 2025
2594842
Fix merge conflicts.
kannanjgithub Jan 7, 2025
916d0d5
Review comments and use reflection for X509ExtendedTrustManager.
kannanjgithub Jan 10, 2025
040035b
Include failed method name in the tls verification failed log message.
kannanjgithub Jan 13, 2025
89b24f2
Merge branch 'master' into authorityverifyokhttp
kannanjgithub Jan 13, 2025
ecbf7b7
Use reflection to access X509ExtendedTrustManager.
kannanjgithub Jan 13, 2025
26a94c9
Merge remote-tracking branch 'origin/master' into authorityverifyokhttp
kannanjgithub Jan 13, 2025
ce800f7
Merge remote-tracking branch 'origin/authorityverifyokhttp' into auth…
kannanjgithub Jan 13, 2025
44f2412
Address review comments.
kannanjgithub Jan 15, 2025
6449728
Address review comments.
kannanjgithub Jan 16, 2025
4273452
Address review comments.
kannanjgithub Jan 17, 2025
a9a019b
Remove the code handling for impossible exception.
kannanjgithub Jan 17, 2025
1f56282
Update comment for NoSuchMethodError.
kannanjgithub Jan 17, 2025
649f53c
Some changes based on similar comments in the authority check for Net…
kannanjgithub Jan 17, 2025
73bb42f
Animal sniffer suppress
kannanjgithub Jan 17, 2025
b8b70bf
Merge branch 'master' into authoritychecktls
kannanjgithub Jan 21, 2025
2af1cca
Ignore animal sniffer errors via annotation in tests.
kannanjgithub Jan 22, 2025
15c8161
In-progress changes to move authority verification to the ChannelHand…
kannanjgithub Jan 24, 2025
7941abc
Save sslEngine and use it later after the handshake is complete, to s…
kannanjgithub Jan 24, 2025
7fcd98d
temp testing changes
kannanjgithub Jan 29, 2025
4c50e71
Changes.
kannanjgithub Jan 30, 2025
da19b28
Merge branch 'authoritychecktls-fork' into authoritychecktls
kannanjgithub Jan 30, 2025
4e24446
Merge branch 'grpc:master' into authoritychecktls
kannanjgithub Jan 30, 2025
8576a4e
Merge remote-tracking branch 'origin/authorityverifyokhttp' into auth…
kannanjgithub Jan 30, 2025
0627bf4
Merge remote-tracking branch 'origin/authoritychecktls' into authorit…
kannanjgithub Jan 30, 2025
02a1041
Revert "Merge remote-tracking branch 'origin/authorityverifyokhttp' i…
kannanjgithub Jan 30, 2025
1d6f46f
Fix style
kannanjgithub Jan 30, 2025
42058ea
Revert unintended changes.
kannanjgithub Jan 31, 2025
cd93d4e
Revert unintended changes.
kannanjgithub Jan 31, 2025
1ff1f0b
Revert unintended changes.
kannanjgithub Jan 31, 2025
671dee0
Review comments.
kannanjgithub Feb 14, 2025
671444b
Review comments
kannanjgithub Feb 19, 2025
7ecbf56
Fix review comments
kannanjgithub Feb 20, 2025
e7c7913
Fix test and some mistakes.
kannanjgithub Feb 21, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Fixes.
  • Loading branch information
kannanjgithub committed Dec 4, 2024
commit 0ddd42c55df32689b5a6e7c5092e0afda855b975
1 change: 1 addition & 0 deletions netty/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ java_library(
deps = [
"//api",
"//core:internal",
"//util",
artifact("com.google.code.findbugs:jsr305"),
artifact("com.google.errorprone:error_prone_annotations"),
artifact("com.google.guava:guava"),
Expand Down
1 change: 1 addition & 0 deletions netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@
x509ExtendedTrustManager.isPresent()
? (X509ExtendedTrustManager) x509ExtendedTrustManager.get()
: null));
} catch (SSLException | GeneralSecurityException ex) {

Check warning on line 156 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L156

Added line #L156 was not covered by tests
log.log(Level.FINE, "Exception building SslContext", ex);
return FromChannelCredentialsResult.error(
"Unable to create SslContext: " + ex.getMessage());
Expand Down Expand Up @@ -1192,7 +1192,7 @@

@Override
public String getPeerHost() {
return peerHost;

Check warning on line 1195 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1195

Added line #L1195 was not covered by tests
}

@Override
Expand All @@ -1208,107 +1208,107 @@
@Override
public SSLEngineResult wrap(ByteBuffer[] byteBuffers, int i, int i1, ByteBuffer byteBuffer)
throws SSLException {
return null;

Check warning on line 1211 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1211

Added line #L1211 was not covered by tests
}

@Override
public SSLEngineResult unwrap(ByteBuffer byteBuffer, ByteBuffer[] byteBuffers, int i, int i1)
throws SSLException {
return null;

Check warning on line 1217 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1217

Added line #L1217 was not covered by tests
}

@Override
public Runnable getDelegatedTask() {
return null;

Check warning on line 1222 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1222

Added line #L1222 was not covered by tests
}

@Override
public void closeInbound() throws SSLException {

}

Check warning on line 1228 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1228

Added line #L1228 was not covered by tests

@Override
public boolean isInboundDone() {
return false;

Check warning on line 1232 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1232

Added line #L1232 was not covered by tests
}

@Override
public void closeOutbound() {}

Check warning on line 1236 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1236

Added line #L1236 was not covered by tests

@Override
public boolean isOutboundDone() {
return false;

Check warning on line 1240 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1240

Added line #L1240 was not covered by tests
}

@Override
public String[] getSupportedCipherSuites() {
return new String[0];

Check warning on line 1245 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1245

Added line #L1245 was not covered by tests
}

@Override
public String[] getEnabledCipherSuites() {
return new String[0];

Check warning on line 1250 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1250

Added line #L1250 was not covered by tests
}

@Override
public void setEnabledCipherSuites(String[] strings) {}

Check warning on line 1254 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1254

Added line #L1254 was not covered by tests

@Override
public String[] getSupportedProtocols() {
return new String[0];

Check warning on line 1258 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1258

Added line #L1258 was not covered by tests
}

@Override
public String[] getEnabledProtocols() {
return new String[0];

Check warning on line 1263 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1263

Added line #L1263 was not covered by tests
}

@Override
public void setEnabledProtocols(String[] strings) {}

Check warning on line 1267 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1267

Added line #L1267 was not covered by tests

@Override
public SSLSession getSession() {
return null;

Check warning on line 1271 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1271

Added line #L1271 was not covered by tests
}

@Override
public void beginHandshake() throws SSLException {}

Check warning on line 1275 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1275

Added line #L1275 was not covered by tests

@Override
public HandshakeStatus getHandshakeStatus() {
return null;

Check warning on line 1279 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1279

Added line #L1279 was not covered by tests
}

@Override
public void setUseClientMode(boolean b) {}

Check warning on line 1283 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1283

Added line #L1283 was not covered by tests

@Override
public boolean getUseClientMode() {
return false;

Check warning on line 1287 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1287

Added line #L1287 was not covered by tests
}

@Override
public void setNeedClientAuth(boolean b) {}

Check warning on line 1291 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1291

Added line #L1291 was not covered by tests

@Override
public boolean getNeedClientAuth() {
return false;

Check warning on line 1295 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1295

Added line #L1295 was not covered by tests
}

@Override
public void setWantClientAuth(boolean b) {}

Check warning on line 1299 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1299

Added line #L1299 was not covered by tests

@Override
public boolean getWantClientAuth() {
return false;

Check warning on line 1303 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1303

Added line #L1303 was not covered by tests
}

@Override
public void setEnableSessionCreation(boolean b) {}

Check warning on line 1307 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1307

Added line #L1307 was not covered by tests

@Override
public boolean getEnableSessionCreation() {
return false;

Check warning on line 1311 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1311

Added line #L1311 was not covered by tests
}
}

Expand All @@ -1321,82 +1321,83 @@

@Override
public byte[] getId() {
return new byte[0];

Check warning on line 1324 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1324

Added line #L1324 was not covered by tests
}

@Override
public SSLSessionContext getSessionContext() {
return null;

Check warning on line 1329 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1329

Added line #L1329 was not covered by tests
}

@Override
@SuppressWarnings("deprecation")
public javax.security.cert.X509Certificate[] getPeerCertificateChain() {
throw new UnsupportedOperationException("This method is deprecated and marked for removal. "

Check warning on line 1335 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1335

Added line #L1335 was not covered by tests
+ "Use the getPeerCertificates() method instead.");
}

@Override
public long getCreationTime() {
return 0;

Check warning on line 1341 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1341

Added line #L1341 was not covered by tests
}

@Override
public long getLastAccessedTime() {
return 0;

Check warning on line 1346 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1346

Added line #L1346 was not covered by tests
}

@Override
public void invalidate() {}

Check warning on line 1350 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1350

Added line #L1350 was not covered by tests

@Override
public boolean isValid() {
return false;

Check warning on line 1354 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1354

Added line #L1354 was not covered by tests
}

@Override
public void putValue(String s, Object o) {}

Check warning on line 1358 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1358

Added line #L1358 was not covered by tests

@Override
public Object getValue(String s) {
return null;

Check warning on line 1362 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1362

Added line #L1362 was not covered by tests
}

@Override
public void removeValue(String s) {}

Check warning on line 1366 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1366

Added line #L1366 was not covered by tests

@Override
public String[] getValueNames() {
return new String[0];

Check warning on line 1370 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1370

Added line #L1370 was not covered by tests
}

@Override
public Certificate[] getPeerCertificates() throws SSLPeerUnverifiedException {
return new Certificate[0];

Check warning on line 1375 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1375

Added line #L1375 was not covered by tests
}

@Override
public Certificate[] getLocalCertificates() {
return new Certificate[0];

Check warning on line 1380 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1380

Added line #L1380 was not covered by tests
}

@Override
public Principal getPeerPrincipal() throws SSLPeerUnverifiedException {
return null;

Check warning on line 1385 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1385

Added line #L1385 was not covered by tests
}

@Override
public Principal getLocalPrincipal() {
return null;

Check warning on line 1390 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1390

Added line #L1390 was not covered by tests
}

@Override
public String getCipherSuite() {
return null;

Check warning on line 1395 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1395

Added line #L1395 was not covered by tests
}

@Override
public String getProtocol() {
return null;

Check warning on line 1400 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1400

Added line #L1400 was not covered by tests
}

@Override
Expand All @@ -1406,17 +1407,17 @@

@Override
public int getPeerPort() {
return 0;

Check warning on line 1410 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1410

Added line #L1410 was not covered by tests
}

@Override
public int getPacketBufferSize() {
return 0;

Check warning on line 1415 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1415

Added line #L1415 was not covered by tests
}

@Override
public int getApplicationBufferSize() {
return 0;

Check warning on line 1420 in netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

View check run for this annotation

Codecov / codecov/patch

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java#L1420

Added line #L1420 was not covered by tests
}
}
}
Loading