go.dedis.ch/onet/v4@v4.0.0-pre1/simul/monitor/monitor_test.go (about)

     1  package monitor
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"strconv"
     7  	"testing"
     8  	"time"
     9  
    10  	"go.dedis.ch/onet/v4/log"
    11  )
    12  
    13  func TestMain(m *testing.M) {
    14  	log.MainTest(m)
    15  }
    16  
    17  func TestReadyNormal(t *testing.T) {
    18  	m := make(map[string]string)
    19  	m["servers"] = "1"
    20  	stat := NewStats(m)
    21  	fresh := stat.String()
    22  	// First set up monitor listening
    23  	mon := NewMonitor(stat)
    24  	go mon.Listen()
    25  	time.Sleep(100 * time.Millisecond)
    26  
    27  	// Then measure
    28  	err := ConnectSink("localhost:" + strconv.Itoa(DefaultSinkPort))
    29  	if err != nil {
    30  		t.Fatal(fmt.Sprintf("Error starting monitor: %s", err))
    31  		return
    32  	}
    33  
    34  	meas := newSingleMeasure("round", 10)
    35  	meas.Record()
    36  	time.Sleep(200 * time.Millisecond)
    37  	newSingleMeasure("round", 20)
    38  	EndAndCleanup()
    39  	time.Sleep(100 * time.Millisecond)
    40  	updated := mon.stats.String()
    41  	if updated == fresh {
    42  		t.Fatal("Stats not updated ?")
    43  	}
    44  
    45  	mon.Stop()
    46  }
    47  
    48  func TestKeyOrder(t *testing.T) {
    49  	m := make(map[string]string)
    50  	m["servers"] = "1"
    51  	m["hosts"] = "1"
    52  	m["bf"] = "2"
    53  	// create stats
    54  	stat := NewStats(m)
    55  	m1 := newSingleMeasure("round", 10)
    56  	m2 := newSingleMeasure("setup", 5)
    57  	stat.Update(m1)
    58  	stat.Update(m2)
    59  	str := new(bytes.Buffer)
    60  	stat.WriteHeader(str)
    61  	stat.WriteValues(str)
    62  
    63  	stat2 := NewStats(m)
    64  	stat2.Update(m1)
    65  	stat2.Update(m2)
    66  
    67  	str2 := new(bytes.Buffer)
    68  	stat2.WriteHeader(str2)
    69  	stat2.WriteValues(str2)
    70  	if !bytes.Equal(str.Bytes(), str2.Bytes()) {
    71  		t.Fatal("KeyOrder / output not the same for same stats")
    72  	}
    73  }
    74  
    75  // setupMonitor launches a basic monitor with a created Stats object
    76  // When finished with the monitor, just call `End()`
    77  func setupMonitor(t *testing.T) (*Monitor, *Stats) {
    78  	m := make(map[string]string)
    79  	m["servers"] = "1"
    80  	stat := NewStats(m)
    81  	// First set up monitor listening
    82  	mon := NewMonitor(stat)
    83  	go mon.Listen()
    84  	time.Sleep(100 * time.Millisecond)
    85  
    86  	// Then measure
    87  	err := ConnectSink("localhost:" + strconv.Itoa(int(mon.SinkPort)))
    88  	if err != nil {
    89  		t.Fatal(fmt.Sprintf("Error starting monitor: %s", err))
    90  	}
    91  	return mon, stat
    92  }