gopkg.in/dedis/onet.v2@v2.0.0-20181115163211-c8f3724038a7/simul/monitor/proxy_test.go (about) 1 package monitor 2 3 import ( 4 "strings" 5 "testing" 6 "time" 7 ) 8 9 func TestProxy(t *testing.T) { 10 m := make(map[string]string) 11 m["servers"] = "1" 12 m["hosts"] = "1" 13 m["filter_round"] = "100" 14 stat := NewStats(m) 15 fresh := stat.String() 16 // First set up monitor listening 17 monitor := NewMonitor(stat) 18 monitor.SinkPort = 0 19 done := make(chan bool, 2) 20 go func() { 21 // See dedis/onet#262 for ideas on a proper fix for all this hard-coding of ports. 22 err := monitor.Listen() 23 if err != nil { 24 panic("monitor.Listen failed") 25 } 26 done <- true 27 }() 28 29 sp := <-monitor.sinkPortChan 30 prox, err := NewProxy(sp, "localhost", 0) 31 32 if err != nil { 33 t.Fatal("new proxy", err) 34 } 35 go func() { 36 err := prox.Run() 37 if err != nil && !strings.Contains(err.Error(), "use of closed") { 38 panic("Proxy failed: " + err.Error()) 39 } 40 done <- true 41 }() 42 43 time.Sleep(100 * time.Millisecond) 44 err = ConnectSink(prox.Listener.Addr().String()) 45 if err != nil { 46 t.Errorf("Can not connect to proxy : %s", err) 47 return 48 } 49 50 meas := NewTimeMeasure("setup") 51 meas.Record() 52 time.Sleep(100 * time.Millisecond) 53 meas.Record() 54 55 prox.Listener.Close() 56 prox.Stop() 57 EndAndCleanup() 58 59 select { 60 case <-done: 61 select { 62 case <-done: 63 // Second read for checking proxy exited. 64 s := monitor.stats 65 s.Collect() 66 if s.String() == fresh { 67 t.Error("stats not updated?") 68 } 69 return 70 case <-time.After(2 * time.Second): 71 t.Error("Proxy not finished") 72 } 73 case <-time.After(2 * time.Second): 74 t.Error("Monitor not finished") 75 } 76 }