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  }