Skip to content

Files

Failed to load latest commit information.

Latest commit

 Cannot retrieve latest commit at this time.

History

History
 
 

tigron

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Tigron test framework

no-one likes you, if [ $? -eq 0 ]

A modern testing framework for command-line applications.

TL;DR

TBD

Documentation

TBD

For now, see nerdctl-specific testing documentation.

Motivation and goals

Testing (go) binaries is a journey fraught with many pitfalls.

While some tooling exist (the venerable bats, or the solid work going on at gotestyourself), they either focus on relatively low-level testing primitives (assert, exec), or do not integrate well into the natural go environment (bats requires you to write shell scripts), and routinely require additional third-party tools for advanced scenarios (hello unbuffer), and for the developer to write a large set of "helpers".

Projects and companies thus routinely end-up growing in-house tooling, that generally suffer from a number of rampant issues: lack of structure and expressiveness, helpers spaghetti, unclear test lifecycle (specifically cleanup), resource leakage and cross test interaction, ultimately encouraging bad test design leading to degraded and un-scalable situations (flakyness being of course the number 1 scourge).

Tigron was developed specifically to address these issues, based on the experience testing nerdctl, a large cli with a lot of integration tests.

Tigron does not replace gotest.tools, nor gotestsum. In fact, it leverages and encourages use of these where appropriate.

Tigron ambition is to provide a ready-to-use, clean, simple, go-native framework meant specifically to write tests for cli binaries, encouraging good test design and a stronger basis to build tests suite. It also comes with a set of helpers to accomodate most advanced scenarios (command backgrounding, stdin manipulation, support for pseudo ttys, environment filtering, etc.)

Hack

Initial setup

Clone, then:

./hack/dev-setup-linux.sh
# Or
# ./hack/dev-setup-macos.sh

make install-dev-tools

Work

# Update dependencies
make up
# Re-order imports, gofmt, go mod tidy, etc
make fix
# Ensure linters are happy
make lint
# Run tests
make test