okhttp

Форк
0
84 строки · 2.6 Кб
1
/*
2
 * Copyright (C) 2024 Square, Inc.
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *      http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16
package okhttp3.containers
17

18
import assertk.assertThat
19
import assertk.assertions.contains
20
import java.net.InetSocketAddress
21
import java.net.Proxy
22
import java.net.Proxy.Type.SOCKS
23
import okhttp3.HttpUrl.Companion.toHttpUrl
24
import okhttp3.OkHttpClient
25
import okhttp3.Request
26
import okhttp3.containers.BasicMockServerTest.Companion.MOCKSERVER_IMAGE
27
import org.junit.jupiter.api.Test
28
import org.mockserver.client.MockServerClient
29
import org.mockserver.model.HttpRequest.request
30
import org.mockserver.model.HttpResponse.response
31
import org.testcontainers.containers.GenericContainer
32
import org.testcontainers.containers.MockServerContainer
33
import org.testcontainers.containers.Network
34
import org.testcontainers.junit.jupiter.Container
35
import org.testcontainers.junit.jupiter.Testcontainers
36
import org.testcontainers.utility.DockerImageName
37

38
@Testcontainers
39
class SocksProxyTest {
40
  val network: Network = Network.newNetwork()
41

42
  @Container
43
  val mockServer: MockServerContainer =
44
    MockServerContainer(MOCKSERVER_IMAGE)
45
      .withNetwork(network)
46
      .withNetworkAliases("mockserver")
47

48
  @Container
49
  val socks5Proxy =
50
    GenericContainer(SOCKS5_PROXY)
51
      .withNetwork(network)
52
      .withExposedPorts(1080)
53

54
  @Test
55
  fun testLocal() {
56
    MockServerClient(mockServer.host, mockServer.serverPort).use { mockServerClient ->
57
      mockServerClient
58
        .`when`(
59
          request().withPath("/person")
60
            .withQueryStringParameter("name", "peter"),
61
        )
62
        .respond(response().withBody("Peter the person!"))
63

64
      val client =
65
        OkHttpClient.Builder()
66
          .proxy(Proxy(SOCKS, InetSocketAddress(socks5Proxy.host, socks5Proxy.firstMappedPort)))
67
          .build()
68

69
      val response =
70
        client.newCall(
71
          Request("http://mockserver:1080/person?name=peter".toHttpUrl()),
72
        ).execute()
73

74
      assertThat(response.body.string()).contains("Peter the person")
75
    }
76
  }
77

78
  companion object {
79
    val SOCKS5_PROXY: DockerImageName =
80
      DockerImageName
81
        .parse("serjs/go-socks5-proxy")
82
        .withTag("v0.0.3")
83
  }
84
}
85

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.