okhttp
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*/
16package okhttp3.containers
17
18import assertk.assertThat
19import assertk.assertions.contains
20import java.net.InetSocketAddress
21import java.net.Proxy
22import java.net.Proxy.Type.SOCKS
23import okhttp3.HttpUrl.Companion.toHttpUrl
24import okhttp3.OkHttpClient
25import okhttp3.Request
26import okhttp3.containers.BasicMockServerTest.Companion.MOCKSERVER_IMAGE
27import org.junit.jupiter.api.Test
28import org.mockserver.client.MockServerClient
29import org.mockserver.model.HttpRequest.request
30import org.mockserver.model.HttpResponse.response
31import org.testcontainers.containers.GenericContainer
32import org.testcontainers.containers.MockServerContainer
33import org.testcontainers.containers.Network
34import org.testcontainers.junit.jupiter.Container
35import org.testcontainers.junit.jupiter.Testcontainers
36import org.testcontainers.utility.DockerImageName
37
38@Testcontainers
39class SocksProxyTest {
40val network: Network = Network.newNetwork()
41
42@Container
43val mockServer: MockServerContainer =
44MockServerContainer(MOCKSERVER_IMAGE)
45.withNetwork(network)
46.withNetworkAliases("mockserver")
47
48@Container
49val socks5Proxy =
50GenericContainer(SOCKS5_PROXY)
51.withNetwork(network)
52.withExposedPorts(1080)
53
54@Test
55fun testLocal() {
56MockServerClient(mockServer.host, mockServer.serverPort).use { mockServerClient ->
57mockServerClient
58.`when`(
59request().withPath("/person")
60.withQueryStringParameter("name", "peter"),
61)
62.respond(response().withBody("Peter the person!"))
63
64val client =
65OkHttpClient.Builder()
66.proxy(Proxy(SOCKS, InetSocketAddress(socks5Proxy.host, socks5Proxy.firstMappedPort)))
67.build()
68
69val response =
70client.newCall(
71Request("http://mockserver:1080/person?name=peter".toHttpUrl()),
72).execute()
73
74assertThat(response.body.string()).contains("Peter the person")
75}
76}
77
78companion object {
79val SOCKS5_PROXY: DockerImageName =
80DockerImageName
81.parse("serjs/go-socks5-proxy")
82.withTag("v0.0.3")
83}
84}
85