New top-level package: wrench

This tiny package provides simple way for any part of Juju to check if a "wrench should be dropped in the works" at some part of Juju's execution. It checks $datadir/wrench for files which signal that something should break, performing some error checking and logging.

The idea is that judicious calls to wrench.IsEnabled can be permanently left in the code to aid manual and CI testing.


bufio.Scanner will hit those before lines.Scan() gets involved.


On Mon, Aug 18, 2014 at 9:58 AM, Menno Smits <notifications@github.com>
wrote:

> In wrench/wrench.go:
>
> > +
> > +	wrenchFile, err := os.Open(fileName)
> > +	if err != nil {
> > +		logger.Errorf("unable to read wrench data for %s/%s (ignored): %v",
> > +			category, feature, err)
> > +		return false
> > +	}
> > +	defer wrenchFile.Close()
> > +	lines := bufio.NewScanner(wrenchFile)
> > +	for lines.Scan() {
> > +		line := strings.TrimSpace(lines.Text())
> > +		if line == feature {
> > +			logger.Warningf("wrench for %s/%s is active", category, feature)
> > +			return true
> > +		}
> > +	}
>
> The call to strings.TrimSpace will remove any CRs so this should be ok.
> There are tests that exercise the DOS and even mixed newlines cases.
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/juju/juju/pull/508/files#r16333384>.
>