mirror of
https://github.com/composewell/streamly.git
synced 2024-09-19 07:29:02 +03:00
Update CI test matrix requirements and the script
Also, fix a few test issues to make the CIs work.
This commit is contained in:
parent
ad598ebbab
commit
91f3d9c1ef
@ -1,9 +1,11 @@
|
|||||||
.packcheck.ignore
|
.packcheck.ignore
|
||||||
cabal.project
|
cabal.project
|
||||||
cabal.project.ci
|
|
||||||
cabal.project.coverage
|
cabal.project.coverage
|
||||||
cabal.project.doctest
|
cabal.project.doctest
|
||||||
cabal.project.ghc-head
|
cabal.project.ghc-head
|
||||||
cabal.project.hpc-coveralls
|
cabal.project.hpc-coveralls
|
||||||
|
cabal.project.O0
|
||||||
|
cabal.project.Werror
|
||||||
|
cabal.project.Werror-nocode
|
||||||
hie.yaml
|
hie.yaml
|
||||||
stack.yaml
|
stack.yaml
|
||||||
|
220
bin/run-ci.sh
220
bin/run-ci.sh
@ -1,5 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# See dev/ci-tests.md
|
||||||
|
|
||||||
# TODO: (1) Detect if nix is available otherwise run with plain cabal,
|
# TODO: (1) Detect if nix is available otherwise run with plain cabal,
|
||||||
# (2) Detect the platform and run tests applicable to the platform, (3)
|
# (2) Detect the platform and run tests applicable to the platform, (3)
|
||||||
# add a test for windows/msys
|
# add a test for windows/msys
|
||||||
@ -8,86 +10,122 @@ SCRIPT_DIR=$(cd `dirname $0`; pwd)
|
|||||||
source $SCRIPT_DIR/build-lib.sh
|
source $SCRIPT_DIR/build-lib.sh
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# GHC 8.10
|
# Prime version (GHC 8.10)
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
GHC_PRIME=ghc8104
|
||||||
|
GHC_PRIME_VER="8.10"
|
||||||
|
|
||||||
|
ghc_prime_dist () {
|
||||||
|
nix-shell \
|
||||||
|
--argstr compiler "$GHC_PRIME" \
|
||||||
|
--run "\
|
||||||
|
packcheck.sh cabal-v2 \
|
||||||
|
GHCVER=$GHC_PRIME_VER \
|
||||||
|
CABAL_DISABLE_DEPS=y \
|
||||||
|
CABAL_CHECK_RELAX=y"
|
||||||
|
}
|
||||||
|
|
||||||
# build-all, Werror, test, inspection, fusion-plugin. Note, inspection
|
# build-all, Werror, test, inspection, fusion-plugin. Note, inspection
|
||||||
# requires fusion-plugin.
|
# requires fusion-plugin.
|
||||||
|
|
||||||
basic () {
|
PERF_FLAGS="--flag inspection --flag fusion-plugin"
|
||||||
|
|
||||||
|
ghc_prime_perf () {
|
||||||
nix-shell \
|
nix-shell \
|
||||||
--argstr compiler "ghc8101" \
|
--argstr compiler "$GHC_PRIME" \
|
||||||
--argstr c2nix "--flag inspection" \
|
--argstr c2nix "--flag inspection" \
|
||||||
--run "\
|
--run "\
|
||||||
packcheck cabal-v2 \
|
bin/bench.sh --cabal-build-options \
|
||||||
GHCVER=8.10.1 \
|
\"--project-file cabal.project.Werror $PERF_FLAGS\" --quick --raw;\
|
||||||
CABAL_DISABLE_DEPS=y \
|
bin/test.sh --cabal-build-options \
|
||||||
CABAL_CHECK_RELAX=y \
|
\"--project-file cabal.project.Werror $PERF_FLAGS\";"
|
||||||
DISABLE_SDIST_BUILD=y \
|
}
|
||||||
CABAL_PROJECT=cabal.project.ci \
|
|
||||||
CABAL_BUILD_OPTIONS=\"--flag inspection --flag fusion-plugin\""
|
ghc_prime_O0 () {
|
||||||
# chart deps do not build with ghc-8.10 on nix
|
nix-shell \
|
||||||
# nix-shell \
|
--argstr compiler "$GHC_PRIME" \
|
||||||
# --argstr compiler "ghc8101" \
|
--run "\
|
||||||
# --argstr c2nix "--flag dev" \
|
bin/test.sh --cabal-build-options \
|
||||||
# --run "cabal build chart --flag dev"
|
\"--project-file cabal.project.O0\""
|
||||||
# nix-shell \
|
}
|
||||||
# --argstr compiler "ghc8101" \
|
|
||||||
# --argstr c2nix "--flag inspection" \
|
|
||||||
# --run "\
|
|
||||||
# bin/bench.sh \
|
|
||||||
# --quick \
|
|
||||||
# --cabal-build-options \"--cabal-project cabal.project.ci --flag inspection --flag fusion-plugin\""
|
|
||||||
}
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# hlint
|
# Check warnings, docs
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
# XXX avoid rebuilding if nothing has changed in the source
|
# XXX avoid rebuilding if nothing has changed in the source
|
||||||
# XXX run hlint only on changed files
|
# XXX run hlint only on changed files
|
||||||
hlint () {
|
lint () {
|
||||||
packcheck cabal \
|
packcheck cabal \
|
||||||
HLINT_OPTIONS="lint --cpp-include=src --cpp-include=test" \
|
HLINT_OPTIONS="lint --cpp-include=src --cpp-include=test" \
|
||||||
HLINT_TARGETS="src test benchmark"
|
HLINT_TARGETS="src test benchmark"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Werror () {
|
||||||
|
nix-shell \
|
||||||
|
--argstr compiler "$GHC_PRIME" \
|
||||||
|
--run "cabal build --project-file cabal.project.Werror-nocode all"
|
||||||
|
}
|
||||||
|
|
||||||
|
ghc_prime_werror () {
|
||||||
|
nix-shell \
|
||||||
|
--argstr compiler "$GHC_PRIME" \
|
||||||
|
--run "cabal build --project-file cabal.project.Werror all"
|
||||||
|
}
|
||||||
|
|
||||||
|
ghc_prime_doctests () {
|
||||||
|
nix-shell \
|
||||||
|
--argstr compiler "$GHC_PRIME" \
|
||||||
|
--run "cabal build --project-file cabal.project.doctest all"
|
||||||
|
cabal-docspec --timeout 60
|
||||||
|
}
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# coverage
|
# coverage
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
coverage () {
|
|
||||||
nix-shell \
|
|
||||||
--argstr compiler "ghc8101" \
|
|
||||||
--run "bin/test.sh --coverage"
|
|
||||||
}
|
|
||||||
|
|
||||||
# To upload the results to coveralls.io using hpc-coveralls
|
# To upload the results to coveralls.io using hpc-coveralls
|
||||||
# hpc-coveralls --repo-token="$REPO_TOKEN" --coverage-mode=StrictlyFullLines
|
# hpc-coveralls --repo-token="$REPO_TOKEN" --coverage-mode=StrictlyFullLines
|
||||||
|
|
||||||
|
ghc_prime_coverage () {
|
||||||
|
nix-shell \
|
||||||
|
--argstr compiler "$GHC_PRIME" \
|
||||||
|
--run "bin/test.sh --coverage"
|
||||||
|
}
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# GHC 8.8
|
# Flags
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
# chart builds from the nix cache for 8.8, 8.10 requires building
|
ghc_prime_dev () {
|
||||||
# XXX Use a separate build-dir for this
|
|
||||||
# build-all only, throw in most flags except fusion-plugin, inspection, opt
|
|
||||||
flags () {
|
|
||||||
nix-shell \
|
nix-shell \
|
||||||
--argstr compiler "ghc883" \
|
--argstr compiler "$GHC_PRIME" \
|
||||||
--argstr c2nix "--flag dev" \
|
--run "bin/test.sh --cabal-build-options \"--flag dev\""
|
||||||
--run "\
|
|
||||||
packcheck cabal-v2 \
|
|
||||||
GHCVER=8.8.3 \
|
|
||||||
CABAL_DISABLE_DEPS=y \
|
|
||||||
CABAL_CHECK_RELAX=y \
|
|
||||||
DISABLE_SDIST_BUILD=y \
|
|
||||||
DISABLE_TEST=y \
|
|
||||||
DISABLE_DOCS=y \
|
|
||||||
DISABLE_BENCH=y \
|
|
||||||
CABAL_BUILD_OPTIONS=\"--flag streamk --flag debug --flag use-c-malloc --flag dev\""
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ghc_prime_c_malloc () {
|
||||||
|
nix-shell \
|
||||||
|
--argstr compiler "$GHC_PRIME" \
|
||||||
|
--run "bin/test.sh --cabal-build-options \"--flag use-c-malloc\""
|
||||||
|
}
|
||||||
|
|
||||||
|
ghc_prime_debug () {
|
||||||
|
nix-shell \
|
||||||
|
--argstr compiler "$GHC_PRIME" \
|
||||||
|
--run "bin/test.sh --cabal-build-options \"--flag debug\""
|
||||||
|
}
|
||||||
|
|
||||||
|
ghc_prime_streamk () {
|
||||||
|
nix-shell \
|
||||||
|
--argstr compiler "$GHC_PRIME" \
|
||||||
|
--run "bin/test.sh --cabal-build-options \"--flag streamk\""
|
||||||
|
}
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# Other GHC versions
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
# build-all only
|
# build-all only
|
||||||
# $1 883
|
# $1 883
|
||||||
# $2 8.8.3
|
# $2 8.8.3
|
||||||
@ -95,43 +133,72 @@ ghc () {
|
|||||||
nix-shell \
|
nix-shell \
|
||||||
--argstr compiler "ghc$1" \
|
--argstr compiler "ghc$1" \
|
||||||
--run "\
|
--run "\
|
||||||
packcheck cabal-v2 \
|
packcheck.sh cabal-v2 \
|
||||||
GHCVER=$2 \
|
GHCVER=$2 \
|
||||||
CABAL_DISABLE_DEPS=y \
|
CABAL_DISABLE_DEPS=y \
|
||||||
CABAL_CHECK_RELAX=y \
|
CABAL_CHECK_RELAX=y \
|
||||||
DISABLE_SDIST_BUILD=y \
|
DISABLE_SDIST_BUILD=y \
|
||||||
DISABLE_TEST=y \
|
DISABLE_TEST=y \
|
||||||
DISABLE_DOCS=y "
|
DISABLE_DOCS=y"
|
||||||
}
|
}
|
||||||
|
|
||||||
ghc883 () { ghc 883 8.8.3; }
|
ghc901 () { ghc 901 9.0.1; }
|
||||||
ghc865 () { ghc 865 8.6.5; }
|
ghc884 () { ghc 884 8.8.4; }
|
||||||
ghc844 () { ghc 865 8.4.4; }
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# GHC Head
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ghcHEAD () {
|
||||||
|
nix-shell \
|
||||||
|
--argstr compiler "ghcHEAD" \
|
||||||
|
--run "\
|
||||||
|
packcheck.sh cabal-v2 \
|
||||||
|
GHCVER=9.3 \
|
||||||
|
CABAL_CHECK_RELAX=y \
|
||||||
|
DISABLE_SDIST_BUILD=y \
|
||||||
|
CABAL_BUILD_OPTIONS=\"--allow-newer --project-file cabal.project.ghc-head"
|
||||||
|
}
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# ghcjs
|
# ghcjs
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
#nix-shell \
|
ghcjs () {
|
||||||
# --argstr compiler "ghcjs" \
|
export PATH=~/.local/bin:/opt/ghc/bin:/opt/ghcjs/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH
|
||||||
# --run "\
|
packcheck.sh cabal-v2 \
|
||||||
# packcheck cabal-v2 \
|
GHCVER=8.4.0 \
|
||||||
# GHCVER=8.6.0 \
|
CABAL_CHECK_RELAX=y \
|
||||||
# CABAL_DISABLE_DEPS=y \
|
DISABLE_SDIST_BUILD=y \
|
||||||
# CABAL_CHECK_RELAX=y \
|
DISABLE_TEST=y \
|
||||||
# DISABLE_SDIST_BUILD=y \
|
DISABLE_DOCS=y \
|
||||||
# DISABLE_TEST=y \
|
ENABLE_GHCJS=y
|
||||||
# DISABLE_DOCS=y \
|
}
|
||||||
# ENABLE_GHCJS=y " || exit 1
|
|
||||||
|
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
# Read command line
|
# Read command line
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
|
|
||||||
ALL_TARGETS="all basic hlint coverage flags ghc883 ghc864 ghc844"
|
ALL_TARGETS="\
|
||||||
|
ghc_prime_dist \
|
||||||
|
ghc_prime_perf \
|
||||||
|
ghc_prime_O0 \
|
||||||
|
ghc_prime_Werror \
|
||||||
|
ghc_prime_doctests \
|
||||||
|
ghc_prime_coverage \
|
||||||
|
ghc_prime_dev \
|
||||||
|
ghc_prime_c_malloc \
|
||||||
|
ghc_prime_debug \
|
||||||
|
ghc_prime_streamk \
|
||||||
|
ghc901 \
|
||||||
|
ghc884 \
|
||||||
|
ghcHEAD \
|
||||||
|
ghcjs \
|
||||||
|
lint \
|
||||||
|
Werror"
|
||||||
|
|
||||||
print_targets () {
|
print_targets () {
|
||||||
echo "Available targets: $ALL_TARGETS"
|
echo "Available targets: all $ALL_TARGETS"
|
||||||
}
|
}
|
||||||
|
|
||||||
print_help () {
|
print_help () {
|
||||||
@ -152,22 +219,31 @@ do
|
|||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
|
if test -z "$TARGETS"
|
||||||
|
then
|
||||||
|
print_help
|
||||||
|
fi
|
||||||
|
|
||||||
|
for i in "$TARGETS"
|
||||||
|
do
|
||||||
|
if test "$(has_item "$ALL_TARGETS" $i)" != "$i"
|
||||||
|
then
|
||||||
|
echo "Unrecognized target: $i"
|
||||||
|
print_help
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
if test "$(has_item "$TARGETS" help)" = "help"
|
if test "$(has_item "$TARGETS" help)" = "help"
|
||||||
then
|
then
|
||||||
print_targets
|
print_targets
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$(has_item "$TARGETS" help)" = "all"
|
if test "$(has_item "$TARGETS" all)" = "all"
|
||||||
then
|
then
|
||||||
TARGETS="$ALL_TARGETS"
|
TARGETS="$ALL_TARGETS"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test -z "$TARGETS"
|
|
||||||
then
|
|
||||||
print_help
|
|
||||||
fi
|
|
||||||
|
|
||||||
for i in $TARGETS
|
for i in $TARGETS
|
||||||
do
|
do
|
||||||
$i || { echo "$i failed."; exit 1; }
|
$i || { echo "$i failed."; exit 1; }
|
||||||
|
@ -98,6 +98,13 @@ echo "Using targets [$TARGETS]"
|
|||||||
|
|
||||||
test_exe_rts_opts () {
|
test_exe_rts_opts () {
|
||||||
case "$1" in
|
case "$1" in
|
||||||
|
# XXX Data.Array.* heap requirement increased for GHC-8.10
|
||||||
|
Data.Array.Foreign) echo -n "-M128M" ;;
|
||||||
|
Data.Array.Prim) echo -n "-M128M" ;;
|
||||||
|
Data.Array.Prim.Pinned) echo -n "-M128M" ;;
|
||||||
|
# For -O0 case writeChunks test fails, maybe we should have a separate flag
|
||||||
|
# for O0 case?
|
||||||
|
FileSystem.Handle) echo -n "-K16M" ;;
|
||||||
*) if test "$COVERAGE" -eq "1"
|
*) if test "$COVERAGE" -eq "1"
|
||||||
then
|
then
|
||||||
echo -n "-K8M -M1024M"
|
echo -n "-K8M -M1024M"
|
||||||
|
19
cabal.project.O0
Normal file
19
cabal.project.O0
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
packages:
|
||||||
|
./
|
||||||
|
test
|
||||||
|
benchmark
|
||||||
|
|
||||||
|
-- Keep the flags same as cabal.project.doctest because we utilize the
|
||||||
|
-- same build for doctests in CI.
|
||||||
|
|
||||||
|
package streamly
|
||||||
|
flags: -opt
|
||||||
|
ghc-options: -O0 -Werror
|
||||||
|
|
||||||
|
package streamly-tests
|
||||||
|
flags: -opt
|
||||||
|
ghc-options: -O0 -Werror
|
||||||
|
|
||||||
|
package streamly-benchmarks
|
||||||
|
flags: -opt
|
||||||
|
ghc-options: -O0 -Werror
|
13
cabal.project.Werror-nocode
Normal file
13
cabal.project.Werror-nocode
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
packages:
|
||||||
|
./
|
||||||
|
benchmark
|
||||||
|
test
|
||||||
|
|
||||||
|
package streamly
|
||||||
|
ghc-options: -Werror -fno-code
|
||||||
|
|
||||||
|
package streamly-benchmarks
|
||||||
|
ghc-options: -Werror -fno-code
|
||||||
|
|
||||||
|
package streamly-tests
|
||||||
|
ghc-options: -Werror -fno-code
|
@ -3,11 +3,8 @@ packages:
|
|||||||
test
|
test
|
||||||
|
|
||||||
package streamly
|
package streamly
|
||||||
ghc-options: -Werror
|
|
||||||
flag: inspection
|
|
||||||
coverage: true
|
coverage: true
|
||||||
|
|
||||||
package streamly-tests
|
-- package streamly-tests
|
||||||
ghc-options: -Werror
|
|
||||||
-- A few percent lesss coverage for some build speedup
|
-- A few percent lesss coverage for some build speedup
|
||||||
-- -DCOVERAGE_BUILD
|
-- -DCOVERAGE_BUILD
|
||||||
|
@ -1,2 +1,13 @@
|
|||||||
packages: streamly.cabal
|
packages: streamly.cabal
|
||||||
, docs/streamly-docs.cabal
|
, docs/streamly-docs.cabal
|
||||||
|
|
||||||
|
-- Keep the flags same as cabal.project.O0 because we utilize the same build
|
||||||
|
-- for doctest in CI.
|
||||||
|
|
||||||
|
package streamly
|
||||||
|
flags: -opt
|
||||||
|
ghc-options: -O0 -Werror
|
||||||
|
|
||||||
|
package streamly-docs
|
||||||
|
flags: -opt
|
||||||
|
ghc-options: -O0 -Werror
|
||||||
|
@ -1,22 +1,54 @@
|
|||||||
|
# Continuous integration tests
|
||||||
|
|
||||||
This file documents the required CI test matrix so that we do not accidentally
|
This file documents the required CI test matrix so that we do not accidentally
|
||||||
remove or miss any tests when making changes to CI configs:
|
remove or miss any tests when making changes to CI configs:
|
||||||
|
|
||||||
* Last three major versions of GHC (build lib, test, bench, docs), run
|
## For prime GHC version:
|
||||||
tests, on Linux platform, using cabal build
|
|
||||||
* Only for prime GHC version:
|
|
||||||
* Run on Windows and MacOS platforms too
|
|
||||||
* stack build
|
|
||||||
* Run `bench.sh --quick`
|
|
||||||
* -Werror (for lib, test, bench)
|
|
||||||
* `coverage` build
|
|
||||||
* build from source distribution
|
|
||||||
* hlint
|
|
||||||
* `inspection` flag + `fusion-plugin` flag
|
|
||||||
* --flag streamk
|
|
||||||
* --flag debug
|
|
||||||
* --flag doctests
|
|
||||||
* ghc head version - run inspection-testing + fusion-plugin tests to catch any
|
|
||||||
issues early. Ideally we should also be running perf tests and compare
|
|
||||||
against the prime version.
|
|
||||||
|
|
||||||
|
Distribution:
|
||||||
|
* build from source distribution WITHOUT a cabal.project file
|
||||||
|
|
||||||
|
Performance:
|
||||||
|
* `--flag inspection` + `--flag fusion-plugin`
|
||||||
|
* Run `bin/bench.sh --quick --raw`
|
||||||
|
* Run `bin/test.sh`
|
||||||
|
* -Werror (for lib, test, bench)
|
||||||
|
|
||||||
|
Lint:
|
||||||
|
* -Werror (for lib, test, bench) (Need a Werror with default flags)
|
||||||
|
* hlint
|
||||||
|
|
||||||
|
Doctests:
|
||||||
|
* Run cabal-docspec
|
||||||
|
|
||||||
|
Coverage:
|
||||||
|
* `coverage` build
|
||||||
|
|
||||||
|
Debug:
|
||||||
|
* --flag debug
|
||||||
|
|
||||||
|
StreamK:
|
||||||
|
* --flag streamk
|
||||||
|
|
||||||
|
Windows:
|
||||||
|
* Windows + stack
|
||||||
|
|
||||||
|
MacOS:
|
||||||
|
* MacOS + stack
|
||||||
|
|
||||||
|
## Other GHC versions
|
||||||
|
|
||||||
|
GHC head:
|
||||||
|
* `--flag inspection` + `--flag fusion-plugin` tests to catch any
|
||||||
|
issues early.
|
||||||
|
* Ideally we should also be running perf tests and compare
|
||||||
|
against the prime version.
|
||||||
|
|
||||||
|
Other GHC versions:
|
||||||
|
* build lib, test, bench, docs, run tests, on Linux platform, using
|
||||||
|
cabal build
|
||||||
|
|
||||||
|
## GHCJS
|
||||||
|
|
||||||
|
GHCJS:
|
||||||
* Latest version ghcjs build (lib, test, bench), run tests
|
* Latest version ghcjs build (lib, test, bench), run tests
|
||||||
|
@ -169,4 +169,5 @@ main =
|
|||||||
describe "Write To Handle" $ do
|
describe "Write To Handle" $ do
|
||||||
prop "write" $ testWrite Handle.write
|
prop "write" $ testWrite Handle.write
|
||||||
prop "writeWithBufferOf" $ testWrite $ Handle.writeWithBufferOf 1024
|
prop "writeWithBufferOf" $ testWrite $ Handle.writeWithBufferOf 1024
|
||||||
|
-- XXX This test needs a lot of stack when built with -O0
|
||||||
prop "writeChunks" testWriteWithChunk
|
prop "writeChunks" testWriteWithChunk
|
||||||
|
Loading…
Reference in New Issue
Block a user