Skip to content

Commit 515d249

Browse files
authored
Make gzip optional (#221)
* make gzip optional * update unit test * add more unit test * unit test bug fix --------- Co-authored-by: Wenxi Zeng <[email protected]>
1 parent bfd0418 commit 515d249

File tree

2 files changed

+32
-5
lines changed

2 files changed

+32
-5
lines changed

core/src/main/java/com/segment/analytics/kotlin/core/HTTPClient.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,14 @@ internal fun HttpURLConnection.createGetConnection(): Connection {
8888
}
8989

9090
internal fun HttpURLConnection.createPostConnection(): Connection {
91-
val outputStream: OutputStream
92-
setRequestProperty("Content-Encoding", "gzip")
93-
outputStream = GZIPOutputStream(this.outputStream)
91+
val encoding = getRequestProperty("Content-Encoding") ?: ""
92+
val outputStream: OutputStream =
93+
if (encoding.contains("gzip")) {
94+
GZIPOutputStream(this.outputStream)
95+
}
96+
else {
97+
this.outputStream
98+
}
9499
return object : Connection(this, null, outputStream) {
95100
@Throws(IOException::class)
96101
override fun close() {
@@ -148,6 +153,7 @@ open class RequestFactory {
148153
open fun upload(apiHost: String): HttpURLConnection {
149154
val connection: HttpURLConnection = openConnection("https://$apiHost/b")
150155
connection.setRequestProperty("Content-Type", "text/plain")
156+
connection.setRequestProperty("Content-Encoding", "gzip")
151157
connection.doOutput = true
152158
connection.setChunkedStreamingMode(0)
153159
return connection

core/src/test/kotlin/com/segment/analytics/kotlin/core/HTTPClientTests.kt

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import io.mockk.every
66
import io.mockk.mockk
77
import io.mockk.spyk
88
import org.junit.jupiter.api.Assertions.assertEquals
9+
import org.junit.jupiter.api.Assertions.assertFalse
910
import org.junit.jupiter.api.Assertions.assertTrue
1011
import org.junit.jupiter.api.Assertions.fail
1112
import org.junit.jupiter.api.Test
@@ -18,6 +19,7 @@ import java.net.HttpURLConnection
1819
import java.net.MalformedURLException
1920
import java.net.URL
2021
import java.net.http.HttpClient
22+
import java.util.zip.GZIPOutputStream
2123

2224
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
2325
class HTTPClientTests {
@@ -45,7 +47,9 @@ class HTTPClientTests {
4547

4648
@Test
4749
fun `settings connection has correct configuration`() {
48-
httpClient.upload("api.segment.io/v1").connection.let {
50+
httpClient.upload("api.segment.io/v1").also {
51+
assertTrue(it.outputStream is GZIPOutputStream)
52+
}.connection.let {
4953
assertEquals(
5054
"https://api.segment.io/v1/b",
5155
it.url.toString()
@@ -129,11 +133,28 @@ class HTTPClientTests {
129133
)
130134
}
131135

132-
httpClient.upload("api.segment.io/v1").connection.let {
136+
httpClient.upload("api.segment.io/v1").also {
137+
assertFalse(it.outputStream is GZIPOutputStream)
138+
}.connection.let {
133139
assertEquals(
134140
"https://api.test.com",
135141
it.url.toString()
136142
)
137143
}
138144
}
145+
146+
@Test
147+
fun `custom requestFactory can remove gzip`() {
148+
val httpClient = HTTPClient("123", object : RequestFactory() {
149+
override fun upload(apiHost: String): HttpURLConnection {
150+
val connection: HttpURLConnection = openConnection("https://$apiHost/b")
151+
connection.setRequestProperty("Content-Type", "text/plain")
152+
connection.doOutput = true
153+
connection.setChunkedStreamingMode(0)
154+
return connection
155+
}
156+
})
157+
158+
assertFalse(httpClient.upload("api.segment.io/v1").outputStream is GZIPOutputStream)
159+
}
139160
}

0 commit comments

Comments
 (0)