π§ͺ A platform for testing, benchmarking, and simulating distributed and p2p systems at scale.
As an outcome of the hardwork done in 2022 with revitalising Testground, we can run large scale tests in k8s with a cluster that auto-scales up and down once idle. Please read more about achievements in this blog post: https://blog.ipfs.tech/testground-highlights-in-2022/
In order to use cluster:k8s
with EKS, please install the latest release of testground/infra
all
testcase by @nonsense in https://github.com/testground/testground/pull/1206
write-artifacts
to correctly truncate & close the output by @laurentsenta in https://github.com/testground/testground/pull/1444
Full Changelog: https://github.com/testground/testground/compare/v0.5.3...v0.6.0
We now support traffic routing policies, i.e., you can decide whether or not your tests can have access to the external Internet. This feature is available on the local:docker
and cluster:k8s
runners and it's defined via a new option on the network.Config
struct of our Go SDK:
cfg := &network.Config{
Network: "default",
RoutingPolicy: network.AllowAll // or network.DenyAll
}
By default, DenyAll
is applied.
docker:go
suffered a few improvements since last version:
testground terminate --builder docker:go
(#1079).For all builders, you can now ship additional files with the test plan source code (#1085), using a extra_sources
map, consisting of builder => []paths
.
The daemon now supports basic authentication through the tokens
array in the configuration file. The client should, in turn, provide a single token
on its configuration to connect to the daemon (#1113).
Compositions can now specify [build]
and [run]
subtables in the [global]
table. Build and run settings in groups will inherit the default configuration (1aaab).
testground run single help
(#1072).healthcheck
deadlock on cluster:k8s
(#1074).A few breaking changes were made since the last release. When upgrading please take this into consideration:
.env.toml
client.endpoint
to include a scheme - for example http
(#1118). See sample .env.toml
for details.DenyAll
is applied for the Traffic Routing Policies. On previous versions, AllowAll
was applied to cluster:k8s
and DenyAll
to local:docker
(#1082, #1084, #1107 #1119).This is a smaller release, but there are a few bug fixes which are important.
Note that a few configuration parameters have been changed. Consult .env.toml and update your environment configuration if necessary.
Testground v0.5.1 is a maintenance release, but also includes a few new features.
Testground now includes functionality for introducing network partitions. Users can now include network rules when configuring networks with the sidecar
, specifying if they want to allow, drop or reject certain packets.
We improved the test coverage of Testground and now run a lot more tests on every PR and commit to the master branch, such as integration tests for all our runners
docker:go
builder extensions - we've included a few simple hooks to allow users to modify the default Dockerfile build steps, enabling functionality such as:
docker:generic
builder - users can now include their own Dockerfile along with their test plan.
sidecar
when running test plans with the local:docker
runner. This enables faster debugging of more complex plans that take advantage of the network shaping functionality in Testground.For a full list of every change in this release, click here.
If you are compiling Testground on macOS, use commit 277364c160882e6ac3c83106d17ce438dfdefdd9
, rather than tag v0.5.1
. Due to adding tests to the sidecar
(which works only under linux
), we forgot to add a build directive, which results into failed compilation on macOS for v0.5.1
.
Huge shout out to all contributors and users of Testground. Your help is invaluable!
>>> Read the announcement blog post! <<<
The v0.5.0 release of Testground comes packed with a complete overhaul of the codebase and lots of features, and stability, hardening and usability improvements!
π This release also marks our graduation from the warm and friendly IPFS community into a top-level GitHub organisation of our own. π
The ambitious mission of building bulletproof, unstoppable networks and systems requires rock-solid testing platforms. We hope Testground brings about a quantum leap in the way weβas a communityβengineer p2p and distributed systems for the decentralized future.
Read on to discover all the features, improvements, and changes that this release brings about!
MGET
, and are governed by a single Ticker.Topic
can use pointer or value types.
Publish()
and Subscribe()
are intelligent enough to recognise and convert between pointer and value types of the underlying type.Must*
variants that panic on error (useful for usage with runner.Invoke[Map]
), and composite operations (e.g. SignalAndWait
, PublishSubscribe
)network
package to expose network operations such as traffic shapingnetwork.NewClient
creates a network client, with which you can wait for the network to be initialized, apply traffic shaping, and obtain your data network IP easily.runenv.RecordStart()
, runenv.RecordFailure()
, runenv.RecordSuccess()
, etc.runenv.R()
testground plan
command group to streamline management. More on this below.$TESTGROUND_HOME
directory is the homebase of everything$TESTGROUND_HOME
|
|__ plans >>> [c] contains test plans, can be git checkouts, symlinks to local dirs, or the source itself
| |__ suite-a >>> test plans can be grouped in suites (which in turn can be nested); this enables you to host many test plans in a single repo / directory.
| | |__ plan-1 >>> source of a test plan identified by suite-a/plan-1 (relative to $TESTGROUND_HOME/plans)
| | |__ plan-2
| |__ plan-3 >>> source of a test plan identified by plan-3 (relative to $TESTGROUND_HOME/plans)
|
|__ sdks >>> [c] hosts the test development SDKs that the client knows about, so they can be used with the --link-sdk option.
| |__ sdk-go
|
|__ data >>> [d] data directory
|__ outputs
|__ work
[c] = used client-side // [d] = used mostly daemon-side.
$HOME/testground
, and the daemon creates the skeleton on first start.testground
repository into third party repositories:
cluster:k8s
runner and local:docker
runner and infrastructure hardeningcluster:k8s
runner.control
network has been blackholed - communicating between test plans over the control
network is no longer possible.testground plan
CLI command group + CLI cleanuptestground plan
command group:
testground plan import --git --from <git url>
testground plan create
to quickly create a templated test plan. Templates are picked from https://github.com/testground/plan-templates.testground plan rm
removes a test plan from $TESTGROUND_HOME/plans
.testground plan list [--testcases]
enumerates test plans and (optionally) test cases known to the client.HUGE, HUGE thanks to everyone who made it possible to get Testground to this stage. Your continued code contributions, patience and debugging energy, organisational skills, technical writing abilities, comms kung-fu, etc. were all indispensable to hit this incredible milestone.
β€οΈ @raulk, @nonsense, @coryschwartz, @Robmat05, @hacdias, @daviddias, @momack2, @yusefnapora, @vyzo, @dirkmc, @aschmahmann, @Stebalien, @jimpick, @petar. β€οΈ
Testground v0.4.0 is a bugfix and infrastructure hardening release.
π Testground daemon outputs stream
testground daemon
to the testground client
, making it easier to monitor ongoing testplan runs.π― Deduplication of testplan builds
π₯ Healthchecks for various runners (local:docker
, cluster:k8s
, etc.) have been improved
πͺ Kubernetes cluster environment hardening
Testground dependencies, such as Redis and Prometheus, are now running on separate host machines than testplan instances, which provides better isolation and resource management.
Resource requirements and limits are now enforced for all services running on Testground infrastructure.
Kubernetes setup scripts have been improved and are now more robust.
Kernel parameters, such as Netfilter's connection tracking limits, and file descriptor limits, have been adjusted to support testplan runs with up to 10k libp2p nodes.
We have merged a lot of bug fixes and improvements to all Testground components. For a full list of every change, click here.
Huge thanks to the early adopters and users of Testground: @yusefnapora, @vyzo, @dirkmc, @aschmahmann, @stebalien, @jimpick, @petar . Your help is invaluable in making Testground a great platform for distributed testing at scale.
Thanks to all the contributors that made this milestone happen: @coryschwartz, @raulk, @Robmat05, @nonsense, @yusefnapora, @vyzo, @dirkmc, @aschmahmann, @petar, @stebalien, @jimpick, @daviddias, @hacdias and others. β€οΈ
Observability and robustness are the key themes for this Testground release! Note: we have upgraded to Go 1.14, so make sure you have too if you plan on building from source.
π Automatic exposition of pprof and Prometheus endpoints in test instances
local:exec
, instances run as system processes, and they use host ports. We start with 6060, and fall back to port 0 (random) on bind failure. Browse to the printed out address directly.local:docker
, instances bind to port 6060, which is exposed and published on a random port on the host. Run docker ps
or docker port <container_id>
to find which host port to access.cluster:k8s
, instances bind to port 6060, and users are encouraged to use kubectl port-forward
to set up a local endpoint that forward to the pod's port.πͺ Stability/maturity/evolutionary improvements
local:docker
runner, to avoid hammering poor, old Docker and making it trip over.πΎ cluster:k8s
runner: switched from S3 to EFS
testground collect --runner cluster:k8s
has been adapted to fetch outputs from EFS.π Prometheus and pushgateway logic in healthchecks + fixes
local:docker
and cluster:k8s
runner now start and expose Prometheus and pushgateway automatically.local:exec
runner by the next release.π Preview: Grafana dashboard manager
dashboards/README.md
.Check everything else that went into into release v0.3.0 here: https://github.com/ipfs/testground/milestone/5?closed=1.
BIG THANK YOU to all the contributors that persevered while the outside world is taking an unprecedented, uncertain, bold turn to combat the pandemic that affects us all. We hope you found a little refuge in Testground to escape the mental loops, despair and boredom that self-isolation and other very necessary measures impose on our human condition. Keep it coming! We're moving boldly towards an epic v0.4.0 release!
β€οΈ @coryschwartz @nonsense @aschmahmann @Robmat05 @dirkmc @yusefnapora @petar @raulk @daviddias @hacdias β€οΈ
This is another action-packed release from the Testground team. A solid step in our path towards creating a robust and delightful platform for testing distributed systems at all scales! Read on to learn what's new.
π₯ FEATURE: Runner healthchecks + automatic fixing.
testground healthcheck --runner <runner_id> [--fix]
command, which automates the verification that all preconditions for the runner to operate properly are met.--fix
switch will attempt automatic healing of healthchecks that fail.testground run
implicitly performs a healthcheck on the target runner, before scheduling the run.local:exec
and local:docker
runners support healthchecks, with cluster:k8s
joining the party soon.π£ FEATURE: Runner termination.
testground terminate --runner <runner_id>
command, which destroys the environment of a runner, including all started test jobs/containers, as well as precondition containers (Redis, sidecar, etc.)local:docker
, cluster:k8s
.𧩠FEATURE: Manual build selectors.
π¦ FEATURE: --collect
and --collect-into
flags.
testground run
command now supports the --collect
and --collect-into
flags that automatically perform output collection (i.e. testground collect
) into an archive with the run ID name (--collect
), or a user-specified file (--collect-into
).π‘ FEATURE: Increased observability + Prometheus + pushgateway in cluster:k8s.
We have merged TONS of bug fixes and improvements in the sidecar, sync service, Redis scaling, cluster:k8s runner, k8s networking setup, S3, etc.
stop
(#580), free netlink handle (#575), sidecar errors: check for context canceled (#526), fix: remove a runenv hack in the sidecar (#503).Thanks to all the contributors that made this huge milestone happen: @raulk, @nonsense, @daviddias, @hacdias, @stebalien, @dirkmc, @aschmahmann, @jimpick, as well as all the new folks who started helping out recently: @coryschwartz, @gmasgras, @yusefnapora, and others. β€οΈ