RestAPIsWithSSLDUnitTest passes on the command-line. When I execute RestAPIsWithSSLDUnitTest in my IntelliJ project, the classpath of the test prints out with two versions of httpclient and httpcore:
[vm_1] /Users/klund/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpclient/4.2.5/666e26e76f2e87d84e4f16acb546481ae1b8e9a6/httpclient-4.2.5.jar [vm_1] /Users/klund/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpcore/4.2.4/3b7f38df6de5dd8b500e602ae8c2dd5ee446f883/httpcore-4.2.4.jar [vm_1] /Users/klund/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpclient/4.5.1/7e3cecc566df91338c6c67883b89ddd05a17db43/httpclient-4.5.1.jar [vm_1] /Users/klund/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpcore/4.4.3/e876a79d561e5c6207b78d347e198c8c4531a5e5/httpcore-4.4.3.jar If you use "./gradlew idea" the resulting module definitions are not sufficient (to illustrate, try generating intellij projects for closed+open and then try editing and running DUnits in legacyDUnit and both assembly projects) and require some manual adjusting which is obviously error prone. I'm not an IntelliJ or gradle expert so I doubt that I'll be the one to fix this. Ultimately I'd like to see all of this become easier and simpler. I believe too much complexity or difficulty will result in a smaller number of contributors. It also results in contributors spending their time with gradle or the IDE instead of on geode. -Kirk On Wed, Mar 23, 2016 at 12:04 PM, Dan Smith <[email protected]> wrote: > First off, your intellij classpath and gradle classpath are pretty much the > same. The one exception, I think, is that the test target for > geode-assembly sets up a different runtime classpath to point at the > bundled product. I didn't set that up, but I think maybe the idea is that > we needed some tests of the actual bundled binary? Take a look at > geode-assembly/build.gradle. If someone knows how to fix the setup that so > we still have that test coverage of the bundled product and the tests do > work in intellij, please fix it! All of the rest of the tests should be > using exactly the same environment on the command line and in the IDE. > > I'm not sure if this is even your problem Kirk, did you try running from > the command line? > > Second, I don't see anything wrong with having transitive test > dependencies. It's a huge pain to track down the transitive dependencies > and keep them up to date manually. They aren't hurting you! > > Regarding John's struggles with dependencies of geode, what we really need > to do is clean up *product* dependencies of geode core - we're pulling in > all sorts of stuff for gfsh, pulse, the REST API, etc. GEODE-818 is all > about cleaning that up. I was hoping to take up GEODE-1072 (remove HDFS > code) when I get a chance. If you want to clean up the dependencies please > chip in and take on some of those subtasks, the sooner the better! > > -Dan > > On Wed, Mar 23, 2016 at 11:34 AM, John Blum <[email protected]> wrote: > > > If you created the IntelliJ IDEA project from the Gradle build, then it > is > > Geode's Gradle build scripts that are specifying the dependencies and > thus > > the Gradle build scripts are wrong. In Maven, you can declare a > > dependencyManagement section (along with exclusions) to manage transitive > > dependencies. I don't recall what the equivalent is in Gradle for > > dependencyManagement. > > > > On Wed, Mar 23, 2016 at 11:24 AM, Kirk Lund <[email protected]> wrote: > > > > > I think that maybe we don't want to continue with transitive > dependencies > > > enabled for testing. If we turn that off then we go back to having to > > > specify all versions even runtime test dependencies right? Are there > any > > > valid arguments for keeping transitive dependencies enabled for > testing? > > > > > > Also, why would my intellij dependencies be different from gradle > > > command-line? The one was built from the *.gradle files in geode. If > > > intellij's gradle picks up multiple versions of libraries, then I think > > > that still means something isn't right in our *.gradle files. > > > > > > Not that I want to see test failures... BUT, I want to spend my time > > > diagnosing test failures instead of dealing with gradle and dependency > > > versioning and wondering why intellij is picking up 2 versions of jna, > 3 > > > versions of apache http, etc. > > > > > > -Kirk > > > > > > > > > On Wed, Mar 23, 2016 at 11:04 AM, John Blum <[email protected]> wrote: > > > > > > > In a nutshell, you want the dependencies and all the transitive > > > > dependencies versions to agree, otherwise conflicts like what Kirk > > > > experienced, as well as what I experienced while integrating Apache > > Geode > > > > support into Spring Session, will occur, and users will have problems > > > using > > > > Geode in different contexts (e.g. App Server containers for Session > > > > management) > > > > > > > > Letting transitive dependencies of Geode (i.e. sub-projects) dictate > > > > dependency versions is NOT right and recipe for disaster. Also, you > > are > > > > not testing the dependencies, you are testing Geode with the > > > dependencies. > > > > > > > > > > > > On Wed, Mar 23, 2016 at 10:48 AM, Dan Smith <[email protected]> > wrote: > > > > > > > > > As far as the multiple versions of httpclient, I only see that > > > dependency > > > > > showing up in the test dependencies. Different sub projects have > > > > different > > > > > test dependencies, which are transitively pulling in different > > versions > > > > of > > > > > this jar. > > > > > > > > > > We can certainly force a version across all of the different > projects > > > in > > > > > dependency-resolution.gradle. But I think given these are different > > > > > projects with different test dependencies we should just let them > > pull > > > in > > > > > whatever test dependencies they need. > > > > > > > > > > > > > > > > ./gradlew geode-core:dependencyInsight --dependency httpclient > > > > > --configuration testRuntime > > > > > Picked up JAVA_TOOL_OPTIONS: > > > > > :geode-core:dependencyInsight > > > > > org.apache.httpcomponents:httpclient:4.2.5 > > > > > \--- org.apache.hadoop:hadoop-auth:2.4.1 > > > > > \--- testRuntime > > > > > > > > > > > > > > > > > > > > > ./gradlew geode-pulse:dependencyInsight --dependency httpclient > > > > > --configuration testRuntime > > > > > Picked up JAVA_TOOL_OPTIONS: > > > > > :geode-pulse:dependencyInsight > > > > > org.apache.httpcomponents:httpclient:4.5.1 > > > > > +--- org.seleniumhq.selenium:selenium-api:2.52.0 > > > > > | +--- testRuntime > > > > > | \--- org.seleniumhq.selenium:selenium-remote-driver:2.52.0 > > > > > | +--- testRuntime > > > > > | +--- > org.seleniumhq.selenium:selenium-firefox-driver:2.52.0 > > > > > | | \--- testRuntime > > > > > | \--- org.seleniumhq.selenium:selenium-support:2.52.0 > > > > > | \--- testRuntime > > > > > \--- org.seleniumhq.selenium:selenium-remote-driver:2.52.0 (*) > > > > > > > > > > > > > > > > > > > > On Wed, Mar 23, 2016 at 10:27 AM, Dan Smith <[email protected]> > > wrote: > > > > > > > > > > > The tests in that geode-assembly project are supposed to run on > the > > > > > binary > > > > > > assembly of the project, so I think the classpath when run from > the > > > > > command > > > > > > line might be a bit different than what you get in intellij. I > > think > > > > the > > > > > > command line classpath just points at geode-dependencies.jar. > > > > > > > > > > > > -Dan > > > > > > > > > > > > > > > > > > On Wed, Mar 23, 2016 at 10:01 AM, Kirk Lund <[email protected]> > > > wrote: > > > > > > > > > > > >> So as I look at dependencies, I see that our gradle build is > > > > ultimately > > > > > >> depending on multiple versions of the same libraries. Can't we > > clean > > > > > this > > > > > >> up? > > > > > >> > > > > > >> org.apache.httpcomponents:httpclient:4.2.5 > > > > > >> org.apache.httpcomponents:httpclient:4.3.3 > > > > > >> org.apache.httpcomponents:httpclient:4.5.1 > > > > > >> > > > > > >> I really don't want multiple versions of anything in this > project. > > > Are > > > > > we > > > > > >> not using gradle correctly? > > > > > >> > > > > > >> -Kirk > > > > > >> > > > > > >> > > > > > >> On Wed, Mar 23, 2016 at 9:23 AM, Kirk Lund <[email protected]> > > > wrote: > > > > > >> > > > > > >> > RestAPIsWithSSLDUnitTest failed in the nightly build. Failure > > > stack > > > > is > > > > > >> > below. I tried running this test by itself in intellij and it > > > fails > > > > > >> with "java.lang.NoSuchFieldError: > > > > > >> > INSTANCE" from "at > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:52)". > > > > > >> > I posted that failure stack below as well. > > > > > >> > > > > > > >> > Any ideas what the NoSuckFieldError is about? > > > > > >> > > > > > > >> > :geode-assembly:distributedTest > > > > > >> > > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > com.gemstone.gemfire.rest.internal.web.controllers.RestAPIsWithSSLDUnitTest > > > > > >> > > testMutualAuthentication FAILED > > > > > >> > java.lang.RuntimeException: unexpected exception > > > > > >> > at com.gemstone.gemfire.rest.internal.web.controllers. > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > RestAPIsWithSSLDUnitTest.validateConnection(RestAPIsWithSSLDUnitTest.java: > > > > > >> > 495) > > > > > >> > at com.gemstone.gemfire.rest.internal.web.controllers. > > > > > >> > RestAPIsWithSSLDUnitTest.testMutualAuthentication( > > > > > >> > RestAPIsWithSSLDUnitTest.java:648) > > > > > >> > > > > > > >> > Caused by: > > > > > >> > javax.net.ssl.SSLHandshakeException: Remote host > closed > > > > > >> > connection during handshake > > > > > >> > at sun.security.ssl.SSLSocketImpl.readRecord( > > > > > >> > SSLSocketImpl.java:992) > > > > > >> > at sun.security.ssl.SSLSocketImpl.waitForClose( > > > > > >> > SSLSocketImpl.java:1769) > > > > > >> > at sun.security.ssl.HandshakeOutStream.flush( > > > > > >> > HandshakeOutStream.java:124) > > > > > >> > at > sun.security.ssl.Handshaker.sendChangeCipherSpec( > > > > > >> > Handshaker.java:1083) > > > > > >> > at sun.security.ssl.ClientHandshaker. > > > > > >> > sendChangeCipherAndFinish(ClientHandshaker.java:1222) > > > > > >> > at > > sun.security.ssl.ClientHandshaker.serverHelloDone( > > > > > >> > ClientHandshaker.java:1134) > > > > > >> > at > sun.security.ssl.ClientHandshaker.processMessage( > > > > > >> > ClientHandshaker.java:348) > > > > > >> > at > > > > > sun.security.ssl.Handshaker.processLoop(Handshaker.java: > > > > > >> > 979) > > > > > >> > at > > > > sun.security.ssl.Handshaker.process_record(Handshaker. > > > > > >> > java:914) > > > > > >> > at sun.security.ssl.SSLSocketImpl.readRecord( > > > > > >> > SSLSocketImpl.java:1062) > > > > > >> > at > > > > sun.security.ssl.SSLSocketImpl.performInitialHandshake( > > > > > >> > SSLSocketImpl.java:1375) > > > > > >> > at sun.security.ssl.SSLSocketImpl.startHandshake( > > > > > >> > SSLSocketImpl.java:1403) > > > > > >> > at sun.security.ssl.SSLSocketImpl.startHandshake( > > > > > >> > SSLSocketImpl.java:1387) > > > > > >> > at > > > org.apache.http.conn.ssl.SSLConnectionSocketFactory. > > > > > >> > createLayeredSocket(SSLConnectionSocketFactory.java:394) > > > > > >> > at > > > org.apache.http.conn.ssl.SSLConnectionSocketFactory. > > > > > >> > connectSocket(SSLConnectionSocketFactory.java:353) > > > > > >> > at > > > > > org.apache.http.impl.conn.DefaultHttpClientConnectionOpe > > > > > >> > rator.connect(DefaultHttpClientConnectionOperator.java:134) > > > > > >> > at > > > > > org.apache.http.impl.conn.PoolingHttpClientConnectionMan > > > > > >> > ager.connect(PoolingHttpClientConnectionManager.java:353) > > > > > >> > at org.apache.http.impl.execchain.MainClientExec. > > > > > >> > establishRoute(MainClientExec.java:380) > > > > > >> > at org.apache.http.impl.execchain.MainClientExec. > > > > > >> > execute(MainClientExec.java:236) > > > > > >> > at org.apache.http.impl.execchain.ProtocolExec. > > > > > >> > execute(ProtocolExec.java:184) > > > > > >> > at > org.apache.http.impl.execchain.RetryExec.execute( > > > > > >> > RetryExec.java:88) > > > > > >> > at org.apache.http.impl.execchain.RedirectExec. > > > > > >> > execute(RedirectExec.java:110) > > > > > >> > at > > > > > org.apache.http.impl.client.InternalHttpClient.doExecute( > > > > > >> > InternalHttpClient.java:184) > > > > > >> > at > > > > > org.apache.http.impl.client.CloseableHttpClient.execute( > > > > > >> > CloseableHttpClient.java:82) > > > > > >> > at > > > > > org.apache.http.impl.client.CloseableHttpClient.execute( > > > > > >> > CloseableHttpClient.java:107) > > > > > >> > at > > com.gemstone.gemfire.rest.internal.web.controllers. > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > RestAPIsWithSSLDUnitTest.validateConnection(RestAPIsWithSSLDUnitTest.java: > > > > > >> > 474) > > > > > >> > ... 1 more > > > > > >> > > > > > > >> > Caused by: > > > > > >> > java.io.EOFException: SSL peer shut down > incorrectly > > > > > >> > at > > > > > >> sun.security.ssl.InputRecord.read(InputRecord.java:505) > > > > > >> > at sun.security.ssl.SSLSocketImpl.readRecord( > > > > > >> > SSLSocketImpl.java:973) > > > > > >> > ... 26 more > > > > > >> > > > > > > >> > java.lang.NoSuchFieldError: INSTANCE > > > > > >> > > > > > > >> > at > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:52) > > > > > >> > at > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:56) > > > > > >> > at > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<clinit>(DefaultHttpRequestWriterFactory.java:46) > > > > > >> > at > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:72) > > > > > >> > at > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:84) > > > > > >> > at > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<clinit>(ManagedHttpClientConnectionFactory.java:59) > > > > > >> > at > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > org.apache.http.impl.conn.PoolingHttpClientConnectionManager$InternalConnectionFactory.<init>(PoolingHttpClientConnectionManager.java:487) > > > > > >> > at > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:147) > > > > > >> > at > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:136) > > > > > >> > at > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:112) > > > > > >> > at > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:726) > > > > > >> > at > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > com.gemstone.gemfire.rest.internal.web.controllers.RestAPIsWithSSLDUnitTest.getSSLBasedHTTPClient(RestAPIsWithSSLDUnitTest.java:458) > > > > > >> > at > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > com.gemstone.gemfire.rest.internal.web.controllers.RestAPIsWithSSLDUnitTest.validateConnection(RestAPIsWithSSLDUnitTest.java:473) > > > > > >> > at > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > com.gemstone.gemfire.rest.internal.web.controllers.RestAPIsWithSSLDUnitTest.testSSLWithoutKeyStoreType(RestAPIsWithSSLDUnitTest.java:522) > > > > > >> > 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:497) > > > > > >> > at junit.framework.TestCase.runTest(TestCase.java:176) > > > > > >> > at junit.framework.TestCase.runBare(TestCase.java:141) > > > > > >> > at junit.framework.TestResult$1.protect(TestResult.java:122) > > > > > >> > at > junit.framework.TestResult.runProtected(TestResult.java:142) > > > > > >> > at junit.framework.TestResult.run(TestResult.java:125) > > > > > >> > at junit.framework.TestCase.run(TestCase.java:129) > > > > > >> > at junit.framework.TestSuite.runTest(TestSuite.java:252) > > > > > >> > at junit.framework.TestSuite.run(TestSuite.java:247) > > > > > >> > at > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:86) > > > > > >> > at org.junit.runner.JUnitCore.run(JUnitCore.java:137) > > > > > >> > at > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) > > > > > >> > at > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234) > > > > > >> > at > > > > > >> > > > > > com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74) > > > > > >> > 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:497) > > > > > >> > at > > > > > > com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) > > > > > >> > > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > -John > > > > 503-504-8657 > > > > john.blum10101 (skype) > > > > > > > > > > > > > > > -- > > -John > > 503-504-8657 > > john.blum10101 (skype) > > >
