(t *testing.T, msgSize int, wc windowSizeConfig)
| 1877 | } |
| 1878 | |
| 1879 | func testFlowControlAccountCheck(t *testing.T, msgSize int, wc windowSizeConfig) { |
| 1880 | sc := &ServerConfig{ |
| 1881 | InitialWindowSize: wc.serverStream, |
| 1882 | InitialConnWindowSize: wc.serverConn, |
| 1883 | StaticWindowSize: true, |
| 1884 | BufferPool: mem.DefaultBufferPool(), |
| 1885 | } |
| 1886 | co := ConnectOptions{ |
| 1887 | InitialWindowSize: wc.clientStream, |
| 1888 | InitialConnWindowSize: wc.clientConn, |
| 1889 | StaticWindowSize: true, |
| 1890 | BufferPool: mem.DefaultBufferPool(), |
| 1891 | } |
| 1892 | server, client, cancel := setUpWithOptions(t, 0, sc, pingpong, co) |
| 1893 | defer cancel() |
| 1894 | defer server.stop() |
| 1895 | defer client.Close(fmt.Errorf("closed manually by test")) |
| 1896 | waitWhileTrue(t, func() (bool, error) { |
| 1897 | server.mu.Lock() |
| 1898 | defer server.mu.Unlock() |
| 1899 | if len(server.conns) == 0 { |
| 1900 | return true, fmt.Errorf("timed out while waiting for server transport to be created") |
| 1901 | } |
| 1902 | return false, nil |
| 1903 | }) |
| 1904 | var st *http2Server |
| 1905 | server.mu.Lock() |
| 1906 | for k := range server.conns { |
| 1907 | st = k.(*http2Server) |
| 1908 | } |
| 1909 | server.mu.Unlock() |
| 1910 | |
| 1911 | ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout) |
| 1912 | defer cancel() |
| 1913 | const numStreams = 5 |
| 1914 | clientStreams := make([]*ClientStream, numStreams) |
| 1915 | for i := 0; i < numStreams; i++ { |
| 1916 | var err error |
| 1917 | clientStreams[i], err = client.NewStream(ctx, &CallHdr{}, nil) |
| 1918 | if err != nil { |
| 1919 | t.Fatalf("Failed to create stream. Err: %v", err) |
| 1920 | } |
| 1921 | } |
| 1922 | var wg sync.WaitGroup |
| 1923 | // For each stream send pingpong messages to the server. |
| 1924 | for _, stream := range clientStreams { |
| 1925 | wg.Add(1) |
| 1926 | go func(stream *ClientStream) { |
| 1927 | defer wg.Done() |
| 1928 | buf := make([]byte, msgSize+5) |
| 1929 | buf[0] = byte(0) |
| 1930 | binary.BigEndian.PutUint32(buf[1:], uint32(msgSize)) |
| 1931 | opts := WriteOptions{} |
| 1932 | header := make([]byte, 5) |
| 1933 | for i := 1; i <= 5; i++ { |
| 1934 | if err := stream.Write(nil, newBufferSlice(buf), &opts); err != nil { |
| 1935 | t.Errorf("Error on client while writing message %v on stream %v: %v", i, stream.id, err) |
| 1936 | return |
no test coverage detected