Skip to content

Commit e449567

Browse files
committed
add tcp proxy support
1 parent 8d3799c commit e449567

File tree

4 files changed

+621
-557
lines changed

4 files changed

+621
-557
lines changed

cmd/mock-compose.go

Lines changed: 38 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -17,52 +17,49 @@ limitations under the License.
1717
package cmd
1818

1919
import (
20-
"os"
21-
"os/signal"
22-
"syscall"
23-
24-
"github.com/linuxsuren/api-testing/pkg/mock"
25-
"github.com/spf13/cobra"
20+
"github.com/linuxsuren/api-testing/pkg/mock"
21+
"github.com/spf13/cobra"
22+
"os"
23+
"os/signal"
24+
"syscall"
2625
)
2726

2827
func createMockComposeCmd() (c *cobra.Command) {
29-
c = &cobra.Command{
30-
Use: "mock-compose",
31-
Short: "Mock multiple servers",
32-
Args: cobra.ExactArgs(1),
33-
RunE: func(cmd *cobra.Command, args []string) (err error) {
34-
reader := mock.NewLocalFileReader(args[0])
28+
c = &cobra.Command{
29+
Use: "mock-compose",
30+
Short: "Mock multiple servers",
31+
Args: cobra.ExactArgs(1),
32+
RunE: func(cmd *cobra.Command, args []string) (err error) {
33+
reader := mock.NewLocalFileReader(args[0])
3534

36-
var server *mock.Server
37-
if server, err = reader.Parse(); err != nil {
38-
return
39-
}
35+
var server *mock.Server
36+
if server, err = reader.Parse(); err != nil {
37+
return
38+
}
4039

41-
var subServers []mock.DynamicServer
42-
for _, proxy := range server.Proxies {
43-
subProxy := &mock.Server{
44-
Proxies: []mock.Proxy{proxy},
45-
}
40+
var subServers []mock.DynamicServer
41+
for _, proxy := range server.Proxies {
42+
subProxy := &mock.Server{
43+
Proxies: []mock.Proxy{proxy},
44+
}
4645

47-
subReader := mock.NewObjectReader(subProxy)
48-
subServer := mock.NewInMemoryServer(c.Context(), proxy.Port)
49-
if err = subServer.Start(subReader, proxy.Prefix); err != nil {
50-
return
51-
}
52-
subServers = append(subServers, subServer)
53-
}
46+
subReader := mock.NewObjectReader(subProxy)
47+
subServer := mock.NewInMemoryServer(c.Context(), proxy.Port)
48+
go subServer.Start(subReader, proxy.Prefix)
49+
subServers = append(subServers, subServer)
50+
}
5451

55-
clean := make(chan os.Signal, 1)
56-
signal.Notify(clean, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP, syscall.SIGQUIT)
57-
select {
58-
case <-c.Context().Done():
59-
case <-clean:
60-
}
61-
for _, server := range subServers {
62-
server.Stop()
63-
}
64-
return
65-
},
66-
}
67-
return
52+
clean := make(chan os.Signal, 1)
53+
signal.Notify(clean, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP, syscall.SIGQUIT)
54+
select {
55+
case <-c.Context().Done():
56+
case <-clean:
57+
}
58+
for _, server := range subServers {
59+
server.Stop()
60+
}
61+
return
62+
},
63+
}
64+
return
6865
}

docs/site/content/zh/latest/tasks/mock.md

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ docker pull localhost:6060/repo/name:tag
3838
* 面向对象的 CRUD
3939
* 自定义 HTTP 服务
4040

41-
### 面对对象
41+
### 面向对象
4242

4343
```yaml
4444
#!api-testing-mock
@@ -160,6 +160,16 @@ proxies:
160160
target: http://192.168.123.58:9200
161161
```
162162

163+
## TCP 协议代理
164+
165+
```yaml
166+
proxies:
167+
- protocol: tcp
168+
port: 3306
169+
path: /
170+
target: 192.168.123.58:33060
171+
```
172+
163173
## 代理多个服务
164174

165175
```shell
@@ -178,6 +188,12 @@ proxies:
178188
port: 17001
179189
path: /{path:.*}
180190
target: http://192.168.123.58:17001
191+
- protocol: tcp
192+
port: 33060
193+
path: /
194+
target: 192.168.123.58:33060
181195
```
182196

197+
当前代理支持 HTTP 和 TCP 协议,上面的例子中代理了 MySQL 的 `33060` 端口。
198+
183199
> 更多 URL 中通配符的用法,请参考 https://github.com/gorilla/mux

0 commit comments

Comments
 (0)