@@ -62,7 +62,7 @@ func TestOperation_io_read_limit(t *testing.T) {
6262 }
6363}
6464
65- func TestOperation_read_rate (t * testing.T ) {
65+ func TestOperation_read_rate_low (t * testing.T ) {
6666 ctx , cancel := context .WithTimeout (context .Background (), time .Second * 2 )
6767 defer cancel ()
6868 l := NewLimiter (ctx )
@@ -89,6 +89,36 @@ func TestOperation_read_rate(t *testing.T) {
8989 }
9090}
9191
92+ func TestOperation_read_rate_high (t * testing.T ) {
93+ ctx , cancel := context .WithTimeout (context .Background (), time .Second * 2 )
94+ defer cancel ()
95+ l := NewLimiter (ctx )
96+
97+ const numbytes = 10 * 1000000
98+ l .Reads .Limit .Store (numbytes )
99+
100+ now := time .Now ()
101+ r := bytes .NewReader (make ([]byte , numbytes * 2 ))
102+ var numread int
103+
104+ for numread < numbytes {
105+ buf := make ([]byte , 1000 )
106+ n , err := l .Reads .io (r .Read , buf )
107+ numread += n
108+ if err != nil {
109+ t .Error (numread , n )
110+ t .Fatal (err )
111+ }
112+ }
113+
114+ if elapsed := time .Since (now ); elapsed < time .Millisecond * 900 || elapsed > time .Millisecond * 1100 {
115+ t .Error (elapsed )
116+ }
117+ if rate := int (l .Reads .Rate .Load ()); rate < numbytes * 0.9 || rate > numbytes {
118+ t .Error (rate )
119+ }
120+ }
121+
92122func TestOperation_write_rate (t * testing.T ) {
93123 ctx , cancel := context .WithTimeout (context .Background (), time .Second * 2 )
94124 defer cancel ()
@@ -106,10 +136,14 @@ func TestOperation_write_rate(t *testing.T) {
106136 t .Error (err )
107137 }
108138
109- for l .Writes .Rate .Load () == 0 && ctx .Err () == nil {
110- time .Sleep (time .Second / 100 )
139+ rate := l .Writes .Rate .Load ()
140+ for rate == 0 && ctx .Err () == nil {
141+ rate = l .Writes .Rate .Load ()
142+ }
143+ if ctx .Err () != nil {
144+ t .Fatal (ctx .Err ())
111145 }
112- if rate := l . Writes . Rate . Load (); rate != 10 {
146+ if rate != 10 {
113147 t .Error (rate )
114148 }
115149}
0 commit comments