Skip to content

Commit 9058f1d

Browse files
authored
Basic CLI benchmark features (commands & flags) (#2)
* feat: example client & server functions * fix: default target TCP server IP
1 parent 344c873 commit 9058f1d

File tree

2 files changed

+119
-12
lines changed

2 files changed

+119
-12
lines changed

go.sum

-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=
2-
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
31
github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM=
42
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
53
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
@@ -8,13 +6,11 @@ github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs=
86
github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ=
97
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU=
108
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8=
11-
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c h1:qgOY6WgZOaTkIIMiVjBQcw93ERBE4m30iBm00nkL0i8=
129
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
1310
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
1411
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
1512
rsc.io/quote v1.5.2 h1:w5fcysjrx7yqtD/aO+QwRjYZOKnaM9Uh2b40tElTs3Y=
1613
rsc.io/quote v1.5.2/go.mod h1:LzX7hefJvL54yjefDEDHNONDjII0t9xZLPXsUe+TKr0=
17-
rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4=
1814
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
1915
rsc.io/sampler v1.99.99 h1:7i08f/p5TBU5joCPW3GjWG1ZFCmr28ybGqlXtelhEK8=
2016
rsc.io/sampler v1.99.99/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=

testbed.go

+119-8
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,117 @@ package main
1010
import (
1111
"fmt"
1212
"log"
13+
"net"
1314
"os"
15+
"time"
1416

1517
"github.com/urfave/cli/v2"
1618
"rsc.io/quote"
1719
)
1820

19-
func main () {
21+
func newClient(diodeInputSideIP string, diodeTcpPassthroughPort int) {
22+
// Create a socket
23+
24+
client, err := net.DialTimeout("tcp", fmt.Sprintf("%s:%d", diodeInputSideIP, diodeTcpPassthroughPort), time.Second)
25+
26+
if err != nil {
27+
fmt.Println(">> Error establishing connection to the diode input side: ", err.Error())
28+
log.Fatal(err)
29+
}
30+
defer client.Close()
31+
32+
numberOfSends := 1
33+
34+
for {
35+
sendMessage := fmt.Sprintf("This is TCP passthrough test message number: %d", numberOfSends)
36+
_, err := client.Write([]byte(sendMessage))
37+
if err != nil {
38+
fmt.Println(">> Error sending message to the diode input side: ", err.Error())
39+
log.Fatal(err)
40+
break
41+
}
42+
43+
// if string(response) == "OK\r\n" {
44+
// fmt.Println(">> Message sent successfully!")
45+
// }
46+
47+
numberOfSends++
48+
49+
time.Sleep(1 * time.Second)
50+
}
51+
}
52+
53+
func newServer(targetTcpServerIP string, targetTcpServerPort int) {
54+
// Begin listening for incoming connections
55+
56+
server, err := net.Listen("tcp", fmt.Sprintf("%s:%d", targetTcpServerIP, targetTcpServerPort))
57+
58+
if err != nil {
59+
fmt.Println(">> Error listening for incoming connections: ", err.Error())
60+
return
61+
}
62+
defer server.Close()
63+
64+
fmt.Printf(">> Server listening on %s:%d\n", targetTcpServerIP, targetTcpServerPort)
65+
66+
for {
67+
// Wait for connection
68+
connection, err := server.Accept()
69+
70+
if err != nil {
71+
fmt.Println(">> Error accepting connection: ", err.Error())
72+
return
73+
}
74+
75+
fmt.Println("Connected to client IP:", connection.RemoteAddr().String())
76+
77+
go communicationHandler(connection)
78+
79+
}
80+
81+
}
82+
83+
func communicationHandler(connection net.Conn) {
84+
85+
defer connection.Close()
86+
87+
// Buffer for incoming data (holding recieved data)
88+
buffer := make([]byte, 10240)
89+
90+
for {
91+
// Read incoming data into buffer
92+
bytesRead, err := connection.Read(buffer)
93+
if err != nil {
94+
fmt.Println(">> Error reading: ", err.Error())
95+
break
96+
}
97+
98+
if bytesRead > 0 {
99+
fmt.Println(">> Message recieved: ", string(buffer[:bytesRead]))
100+
}
101+
102+
if bytesRead < 10240 {
103+
break
104+
}
105+
}
106+
107+
}
108+
109+
func sampleMetrics() {
110+
fmt.Println(">> Local time: ", time.Now())
111+
fmt.Println(">> UTC time: ", time.Now().UTC())
112+
}
113+
114+
func main() {
115+
116+
// Configuration Options
117+
118+
diodeInputSideIP := "192.168.1.99"
119+
diodeTcpPassthroughPort := 50000
120+
121+
targetTcpServerIP := "192.168.1.20"
122+
targetTcpServerPort := 503
123+
20124
app := &cli.App{
21125
Name: "diode",
22126
Usage: "A command line tool for interacting with data diodes.",
@@ -30,7 +134,8 @@ func main () {
30134
Aliases: []string{"c"},
31135
Usage: "Input side of the data diode",
32136
Action: func(cCtx *cli.Context) error {
33-
fmt.Println(">> INPUT")
137+
fmt.Println("----- INPUT -----")
138+
newClient(diodeInputSideIP, diodeTcpPassthroughPort)
34139
return nil
35140
},
36141
},
@@ -39,7 +144,8 @@ func main () {
39144
Aliases: []string{"s"},
40145
Usage: "Output side of the data diode",
41146
Action: func(sCtx *cli.Context) error {
42-
fmt.Println(">> OUTPUT")
147+
fmt.Println("----- OUTPUT -----")
148+
newServer(targetTcpServerIP, targetTcpServerPort)
43149
return nil
44150
},
45151
},
@@ -48,7 +154,11 @@ func main () {
48154
Aliases: []string{"d"},
49155
Usage: "Debug diagnostics via configuration settings",
50156
Action: func(dCtx *cli.Context) error {
51-
fmt.Println(">> DIAGNOSTICS")
157+
fmt.Println("----- DIAGNOSTICS -----")
158+
input := fmt.Sprintf("%s:%d", diodeInputSideIP, diodeTcpPassthroughPort)
159+
output := fmt.Sprintf("%s:%d", targetTcpServerIP, targetTcpServerPort)
160+
fmt.Println(">> Client: ", input)
161+
fmt.Println(">> Server: ", output)
52162
return nil
53163
},
54164
},
@@ -57,16 +167,17 @@ func main () {
57167
Aliases: []string{"b"},
58168
Usage: "System benchmark analysis + report performance metrics",
59169
Action: func(bCtx *cli.Context) error {
60-
fmt.Println(">> BENCHMARKS")
170+
fmt.Println("----- BENCHMARKS -----")
171+
sampleMetrics()
61172
return nil
62173
},
63174
},
64175
{
65-
Name: "version",
176+
Name: "version",
66177
Aliases: []string{"v"},
67-
Usage: "Print the version of the diode CLI",
178+
Usage: "Print the version of the diode CLI",
68179
Action: func(vCtx *cli.Context) error {
69-
fmt.Println(">> diode version 0.0.1")
180+
fmt.Println(">> diode version 0.0.2")
70181
return nil
71182
},
72183
},

0 commit comments

Comments
 (0)