tree a2e7d54bbbaa298975c3e28c04c247247f383a55
parent f3436b166e01056d7b66abaad5b2e553338e0e3b
author Tobias Thierer <tobiast@google.com> 1504031652 +0100
committer Tobias Thierer <tobiast@google.com> 1504034014 +0100

Fix ConfigAwareConnectionPoolTest

This test was broken by [1] which moved ConfigAwareConnectionPool
and its test to the package libcore.net.http, which also exists
in libcore and is not touched by the jarjar rules for the okhttp
build. Because the CtsLibcoreOkHttpTestCases tests bundle okhttp
code with the test, this meant that there were two copies of
libcore.net.http.ConfigAwareConnectionPool in the test's classpath:
A jarjar'ed one from the platform, and one from the nojarjar test
target. The former was loaded by default, but its get() method
returns a com.android.okhttp.ConnectionPool rather than the
com.squareup.okhttp.ConnectionPool that the test expected, leading
to a NoSuchMethodError at test runtime.

This CL fixes the test by moving ConfigAwareConnectionPool{,Test}
back into the original okhttp package; note that nothing outside
external/okhttp imports ConfigAwareConnectionPool.

Had we wanted to keep ConfigAwareConnectionPool separate from
com.squareup.okhttp (e.g. if frameworks classes imported it),
we could also have moved the class to some other package but
add a jarjar rule to move it back to libcore.net.http. Since
ConfigAwareConnectionPool is not imported outside of OkHttp
code, this CL didn't do that.

[1] https://r.android.com/370672/
    commit fd27541d8b1efc65c64bd841722830162406d54e

Test: CtsLibcoreOkHttpTestCases
Test: CtsLibcoreTestCases
Bug: 65152821
Change-Id: I90d5a14cb91f9d9c050cf4cf38f90ff93f1591ea
