Browse Source

test: Mend the transfer benchmark

Jakob Borg 7 năm trước cách đây
mục cha
commit
2fdf9bc55d
2 tập tin đã thay đổi với 26 bổ sung9 xóa
  1. 22 8
      test/transfer-bench_test.go
  2. 4 1
      test/util.go

+ 22 - 8
test/transfer-bench_test.go

@@ -88,6 +88,8 @@ func benchmarkTransfer(t *testing.T, files, sizeExp int) {
 
 	var t0, t1 time.Time
 	lastEvent := 0
+	oneItemFinished := false
+
 loop:
 	for {
 		evs, err := receiver.Events(lastEvent)
@@ -99,22 +101,34 @@ loop:
 		}
 
 		for _, ev := range evs {
-			if ev.Type == "StateChanged" {
+			lastEvent = ev.ID
+
+			switch ev.Type {
+			case "ItemFinished":
+				oneItemFinished = true
+				continue
+
+			case "StateChanged":
 				data := ev.Data.(map[string]interface{})
 				if data["folder"].(string) != "default" {
 					continue
 				}
-				log.Println(ev)
-				if data["to"].(string) == "syncing" {
+
+				switch data["to"].(string) {
+				case "syncing":
 					t0 = ev.Time
 					continue
-				}
-				if !t0.IsZero() && data["to"].(string) == "idle" {
-					t1 = ev.Time
-					break loop
+
+				case "idle":
+					if !oneItemFinished {
+						continue
+					}
+					if !t0.IsZero() {
+						t1 = ev.Time
+						break loop
+					}
 				}
 			}
-			lastEvent = ev.ID
 		}
 
 		time.Sleep(250 * time.Millisecond)

+ 4 - 1
test/util.go

@@ -453,7 +453,10 @@ func startWalker(dir string, res chan<- fileInfo, abort <-chan struct{}) chan er
 			f = fileInfo{
 				name: rn,
 				mode: info.Mode(),
-				mod:  info.ModTime().Truncate(time.Microsecond).UnixNano(),
+				// comparing timestamps with better precision than a second
+				// is problematic as there is rounding and truncatign going
+				// on at every level
+				mod:  info.ModTime().Unix(),
 				size: info.Size(),
 			}
 			sum, err := md5file(path)