[ https://issues.apache.org/jira/browse/KAFKA-7799?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16762396#comment-16762396 ]
ASF GitHub Bot commented on KAFKA-7799: --------------------------------------- avocader commented on pull request #6236: KAFKA-7799: Abstract HttpClient to allow sending restricted headers. URL: https://github.com/apache/kafka/pull/6236 The test `org.apache.kafka.connect.runtime.rest.RestServerTest#testCORSEnabled` assumes Jersey client can send restricted HTTP headers(`Origin`). Jersey client uses `sun.net.www.protocol.http.HttpURLConnection`. `sun.net.www.protocol.http.HttpURLConnection` filters out restricted headers("Host", "Keep-Alive", "Origin", etc) based on static property `allowRestrictedHeaders`. This property is initialized in a static block by reading Java system property `sun.net.http.allowRestrictedHeaders`. So, if classloader loads `HttpURLConnection` before we set `sun.net.http.allowRestrictedHeaders=true`, then all subsequent changes of this system property won't take any effect(which happens if `org.apache.kafka.connect.integration.ExampleConnectIntegrationTest` is executed before `RestServerTest`). To prevent this, we have to make sure we set `sun.net.http.allowRestrictedHeaders=true` as early as possible. This PR abstracts all HTTP calls to `org.apache.kafka.connect.util.clients.HttpClient`, which should be used in tests for HTTP in order to not interfere with `RestServerTest` and restricts imports of all HTTP-related packages in favor of enforcing to use the new client. ### Committer Checklist (excluded from commit message) - [ ] Verify design and implementation - [ ] Verify test coverage and CI build status - [ ] Verify documentation (including upgrade notes) ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > Fix flaky test RestServerTest.testCORSEnabled > --------------------------------------------- > > Key: KAFKA-7799 > URL: https://issues.apache.org/jira/browse/KAFKA-7799 > Project: Kafka > Issue Type: Test > Components: KafkaConnect > Reporter: Jason Gustafson > Assignee: Jason Gustafson > Priority: Major > > Starting to see this failure quite a lot, locally and on jenkins: > {code} > org.apache.kafka.connect.runtime.rest.RestServerTest.testCORSEnabled > Failing for the past 7 builds (Since Failed#18600 ) > Took 0.7 sec. > Error Message > java.lang.AssertionError: expected:<http://bar.com> but was:<null> > Stacktrace > java.lang.AssertionError: expected:<http://bar.com> but was:<null> > at org.junit.Assert.fail(Assert.java:88) > at org.junit.Assert.failNotEquals(Assert.java:834) > at org.junit.Assert.assertEquals(Assert.java:118) > at org.junit.Assert.assertEquals(Assert.java:144) > at > org.apache.kafka.connect.runtime.rest.RestServerTest.checkCORSRequest(RestServerTest.java:221) > at > org.apache.kafka.connect.runtime.rest.RestServerTest.testCORSEnabled(RestServerTest.java:84) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:498) > at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:68) > at > org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:326) > at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:89) > at > org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:97) > {code} > If it helps, I see an uncaught exception in the stdout: > {code} > [2019-01-08 19:35:23,664] ERROR Uncaught exception in REST call to > /connector-plugins/FileStreamSource/validate > (org.apache.kafka.connect.runtime.rest.errors.ConnectExceptionMapper:61) > javax.ws.rs.NotFoundException: HTTP 404 Not Found > at > org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:274) > at org.glassfish.jersey.internal.Errors$1.call(Errors.java:272) > at org.glassfish.jersey.internal.Errors$1.call(Errors.java:268) > at org.glassfish.jersey.internal.Errors.process(Errors.java:316) > at org.glassfish.jersey.internal.Errors.process(Errors.java:298) > at org.glassfish.jersey.internal.Errors.process(Errors.java:268) > at > org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:289) > at > org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:256) > at > org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:703) > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)