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  }