github.com/annwntech/go-micro/v2@v2.9.5/util/ring/buffer_test.go (about) 1 package ring 2 3 import ( 4 "testing" 5 "time" 6 ) 7 8 func TestBuffer(t *testing.T) { 9 b := New(10) 10 11 // test one value 12 b.Put("foo") 13 v := b.Get(1) 14 15 if val := v[0].Value.(string); val != "foo" { 16 t.Fatalf("expected foo got %v", val) 17 } 18 19 b = New(10) 20 21 // test 10 values 22 for i := 0; i < 10; i++ { 23 b.Put(i) 24 } 25 26 d := time.Now() 27 v = b.Get(10) 28 29 for i := 0; i < 10; i++ { 30 val := v[i].Value.(int) 31 32 if val != i { 33 t.Fatalf("expected %d got %d", i, val) 34 } 35 } 36 37 // test more values 38 39 for i := 0; i < 10; i++ { 40 v := i * 2 41 b.Put(v) 42 } 43 44 v = b.Get(10) 45 46 for i := 0; i < 10; i++ { 47 val := v[i].Value.(int) 48 expect := i * 2 49 if val != expect { 50 t.Fatalf("expected %d got %d", expect, val) 51 } 52 } 53 54 // sleep 100 ms 55 time.Sleep(time.Millisecond * 100) 56 57 // assume we'll get everything 58 v = b.Since(d) 59 60 if len(v) != 10 { 61 t.Fatalf("expected 10 entries but got %d", len(v)) 62 } 63 64 // write 1 more entry 65 d = time.Now() 66 b.Put(100) 67 68 // sleep 100 ms 69 time.Sleep(time.Millisecond * 100) 70 71 v = b.Since(d) 72 if len(v) != 1 { 73 t.Fatalf("expected 1 entries but got %d", len(v)) 74 } 75 76 if v[0].Value.(int) != 100 { 77 t.Fatalf("expected value 100 got %v", v[0]) 78 } 79 }