MCPcopy
hub / github.com/etcd-io/etcd / main

Function main

tools/local-tester/bridge/bridge.go:196–322  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

194)
195
196func main() {
197 var cfg config
198
199 flag.BoolVar(&cfg.delayAccept, "delay-accept", false, "delays accepting new connections")
200 flag.BoolVar(&cfg.resetListen, "reset-listen", false, "resets the listening port")
201
202 flag.Float64Var(&cfg.connFaultRate, "conn-fault-rate", 0.0, "rate of faulty connections")
203 flag.BoolVar(&cfg.immediateClose, "immediate-close", false, "close after accept")
204 flag.BoolVar(&cfg.blackhole, "blackhole", false, "reads nothing, writes go nowhere")
205 flag.BoolVar(&cfg.timeClose, "time-close", false, "close after random time")
206 flag.BoolVar(&cfg.writeRemoteOnly, "write-remote-only", false, "only write, no read")
207 flag.BoolVar(&cfg.readRemoteOnly, "read-remote-only", false, "only read, no write")
208 flag.BoolVar(&cfg.randomBlackhole, "random-blackhole", false, "blackhole after data xfer")
209 flag.BoolVar(&cfg.corruptReceive, "corrupt-receive", false, "corrupt packets received from destination")
210 flag.BoolVar(&cfg.corruptSend, "corrupt-send", false, "corrupt packets sent to destination")
211 flag.BoolVar(&cfg.reorder, "reorder", false, "reorder packet delivery")
212
213 flag.StringVar(&cfg.txDelay, "tx-delay", "0", "duration to delay client transmission to server")
214 flag.StringVar(&cfg.rxDelay, "rx-delay", "0", "duration to delay client receive from server")
215
216 flag.Parse()
217
218 lAddr := flag.Args()[0]
219 fwdAddr := flag.Args()[1]
220 log.Println("listening on ", lAddr)
221 log.Println("forwarding to ", fwdAddr)
222 l, err := net.Listen("tcp", lAddr)
223 if err != nil {
224 log.Fatal(err)
225 }
226 defer l.Close()
227
228 acceptFaults := []acceptFaultFunc{func() {}}
229 if cfg.delayAccept {
230 f := func() {
231 log.Println("delaying accept")
232 time.Sleep(3 * time.Second)
233 }
234 acceptFaults = append(acceptFaults, f)
235 }
236 if cfg.resetListen {
237 f := func() {
238 log.Println("reset listen port")
239 l.Close()
240 newListener, err := net.Listen("tcp", lAddr)
241 if err != nil {
242 log.Fatal(err)
243 }
244 l = newListener
245 }
246 acceptFaults = append(acceptFaults, f)
247 }
248
249 connFaults := []connFaultFunc{func(b *bridgeConn) { bridge(b) }}
250 if cfg.immediateClose {
251 f := func(b *bridgeConn) {
252 log.Printf("terminating connection %s immediately", b.String())
253 b.Close()

Callers

nothing calls this directly

Calls 10

delayBridgeFunction · 0.85
newDispatcherPoolFunction · 0.85
newDispatcherImmediateFunction · 0.85
newBridgeConnFunction · 0.85
ParseMethod · 0.80
bridgeFunction · 0.70
FatalMethod · 0.65
CloseMethod · 0.65
StringMethod · 0.65
AcceptMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…