testing

package
v0.0.0-...-2608902 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 25, 2016 License: AGPL-3.0 Imports: 39 Imported by: 0

Documentation

Index

Constants

View Source
const DefaultMongoPassword = "conn-from-name-secret"
View Source
const FakeAuthKeys = `` /* 180-byte string literal not displayed */

FakeAuthKeys holds the authorized key used for testing purposes in FakeConfig. It is valid for parsing with the utils/ssh authorized-key utilities.

View Source
const FakeDefaultSeries = "trusty"
View Source
const LongWait = 10 * time.Second

LongWait is used when something should have already happened, or happens quickly, but we want to make sure we just haven't missed it. As in, the test suite should proceed without sleeping at all, but just in case. It is long so that we don't have spurious failures without actually slowing down the test suite

View Source
const (
	SampleModelName = "erewhemos"
)
View Source
const ShortWait = 50 * time.Millisecond

ShortWait is a reasonable amount of time to block waiting for something that shouldn't actually happen. (as in, the test suite will *actually* wait this long before continuing)

Variables

View Source
var (
	CACert, CAKey = mustNewCA()

	CACertX509, CAKeyRSA = mustParseCertAndKey(CACert, CAKey)

	ServerCert, ServerKey = mustNewServer()

	Certs = serverCerts()

	// Other valid test certs different from the default.
	OtherCACert, OtherCAKey = mustNewCA()
)

CACert and CAKey make up a CA key pair. CACertX509 and CAKeyRSA hold their parsed equivalents. ServerCert and ServerKey hold a CA-signed server cert/key. Certs holds the certificates and keys required to make a secure connection to a Mongo database.

View Source
var FakeVersionNumber = version.MustParse("1.99.0")

FakeVersionNumber is a valid version number that can be used in testing.

View Source
var LongAttempt = &utils.AttemptStrategy{
	Total: LongWait,
	Delay: ShortWait,
}
View Source
var ModelTag = names.NewModelTag("deadbeef-0bad-400d-8000-4b1d0d06f00d")

ModelTag is a defined known valid UUID that can be used in testing.

Functions

func CheckString

func CheckString(c *gc.C, value, expected string)

CheckString compares two strings. If they do not match then the spot where they do not match is logged.

func CheckWriteFileCommand

func CheckWriteFileCommand(c *gc.C, cmd, filename, expected string, parse func(lines []string) interface{})

CheckWriteFileCommand verifies that the given shell command correctly writes the expected content to the given filename. The provided parse function decomposes file content into structured data that may be correctly compared regardless of ordering within the content. If parse is nil then the content lines are used un-parsed.

func Context

func Context(c *gc.C) *cmd.Context

Context creates a simple command execution context with the current dir set to a newly created directory within the test directory.

func ContextForDir

func ContextForDir(c *gc.C, dir string) *cmd.Context

ContextForDir creates a simple command execution context with the current dir set to the specified directory.

func CustomModelConfig

func CustomModelConfig(c *gc.C, extra Attrs) *config.Config

CustomModelConfig returns an environment configuration with additional specified keys added.

func DumpTestLogsAfter

func DumpTestLogsAfter(timeout time.Duration, c *gc.C, cleaner TestCleanup)

DumpTestLogsAfter will write the test logs to stdout if the timeout is reached.

func ExtractCommandsFromHelpOutput

func ExtractCommandsFromHelpOutput(ctx *cmd.Context) []string

ExtractCommandsFromHelpOutput takes the standard output from the command context and looks for the "commands:" string and returns the commands output after that.

func FindJujuCoreImports

func FindJujuCoreImports(c *gc.C, packageName string) []string

FindJujuCoreImports returns a sorted list of juju-core packages that are imported by the packageName parameter. The resulting list removes the common prefix "github.com/juju/juju/" leaving just the short names.

func InitCommand

func InitCommand(c cmd.Command, args []string) error

InitCommand will create a new flag set, and call the Command's SetFlags and Init methods with the appropriate args.

func MgoTestPackage

func MgoTestPackage(t *testing.T)

MgoTestPackage should be called to register the tests for any package that requires a secure connection to a MongoDB server.

func ModelConfig

func ModelConfig(c *gc.C) *config.Config

ModelConfig returns a default environment configuration suitable for setting in the state.

func NewFlagSet

func NewFlagSet() *gnuflag.FlagSet

NewFlagSet creates a new flag set using the standard options, particularly the option to stop the gnuflag methods from writing to StdErr or StdOut.

func RunCommand

func RunCommand(c *gc.C, com cmd.Command, args ...string) (*cmd.Context, error)

RunCommand runs a command with the specified args. The returned error may come from either the parsing of the args, the command initialisation, or the actual running of the command. Access to the resulting output streams is provided through the returned context instance.

func RunCommandInDir

func RunCommandInDir(c *gc.C, com cmd.Command, args []string, dir string) (*cmd.Context, error)

RunCommandInDir works like RunCommand, but runs with a context that uses dir.

func SkipIfGitNotAvailable

func SkipIfGitNotAvailable(c *gc.C)

func SkipIfI386

func SkipIfI386(c *gc.C, bugID string)

SkipIfI386 skips the test if the arch is I386.

func SkipIfPPC64EL

func SkipIfPPC64EL(c *gc.C, bugID string)

SkipIfPPC64EL skips the test if the arch is PPC64EL and the compiler is gccgo.

func SkipIfWindowsBug

func SkipIfWindowsBug(c *gc.C, bugID string)

SkipIfWindowsBug skips the test if the OS is Windows.

func Stderr

func Stderr(ctx *cmd.Context) string

Stderr takes a command Context that we assume has been created in this package, and gets the content of the Stderr buffer as a string.

func Stdout

func Stdout(ctx *cmd.Context) string

Stdout takes a command Context that we assume has been created in this package, and gets the content of the Stdout buffer as a string.

func TarGz

func TarGz(files ...*TarFile) ([]byte, string)

TarGz returns the given files in gzipped tar-archive format, along with the sha256 checksum.

func TestInit

func TestInit(c *gc.C, com cmd.Command, args []string, errPat string)

TestInit checks that a command initialises correctly with the given set of arguments.

func TestLockingFunction

func TestLockingFunction(lock *sync.Mutex, function func())

TestLockingFunction verifies that a function obeys a given lock.

Use this as a building block in your own tests for proper locking. Parameters are a lock that you expect your function to block on, and the function that you want to test for proper locking on that lock.

This helper attempts to verify that the function both obtains and releases the lock. It will panic if the function fails to do either. TODO: Support generic sync.Locker instead of just Mutex. TODO: This could be a gocheck checker. TODO(rog): make this work reliably even for functions that take longer than a few µs to execute.

Types

type Attrs

type Attrs map[string]interface{}

Attrs is a convenience type for messing around with configuration attributes.

func FakeConfig

func FakeConfig() Attrs

FakeConfig() returns an environment configuration for a fake provider with all required attributes set.

func (Attrs) Delete

func (a Attrs) Delete(attrNames ...string) Attrs

func (Attrs) Merge

func (a Attrs) Merge(with Attrs) Attrs

type BaseSuite

BaseSuite provides required functionality for all test suites when embedded in a gocheck suite type: - logger redirect - no outgoing network access - protection of user's home directory - scrubbing of env vars TODO (frankban) 2014-06-09: switch to using IsolationSuite. NOTE: there will be many tests that fail when you try to change to the IsolationSuite that rely on external things in PATH.

func (*BaseSuite) SetUpSuite

func (s *BaseSuite) SetUpSuite(c *gc.C)

func (*BaseSuite) SetUpTest

func (s *BaseSuite) SetUpTest(c *gc.C)

func (*BaseSuite) TearDownSuite

func (s *BaseSuite) TearDownSuite(c *gc.C)

func (*BaseSuite) TearDownTest

func (s *BaseSuite) TearDownTest(c *gc.C)

type CannedRoundTripper

type CannedRoundTripper struct {
	// contains filtered or unexported fields
}

CannedRoundTripper can be used to provide canned "http" responses without actually starting an HTTP server.

Use this in conjunction with ProxyRoundTripper. A ProxyRoundTripper is what gets registered as the default handler for a given protocol (such as "test") and then tests can direct the ProxyRoundTripper to delegate to a CannedRoundTripper. The reason for this is that we can register a roundtripper to handle a scheme, but there is no way to unregister it: you may need to re-use the same ProxyRoundTripper but use different CannedRoundTrippers to return different results.

func NewCannedRoundTripper

func NewCannedRoundTripper(files map[string]string, errorURLs map[string]int) *CannedRoundTripper

NewCannedRoundTripper returns a CannedRoundTripper with the given canned responses.

func (*CannedRoundTripper) RoundTrip

func (v *CannedRoundTripper) RoundTrip(req *http.Request) (*http.Response, error)

RoundTrip returns a canned error or body for the given request.

type Clock

type Clock struct {
	// contains filtered or unexported fields
}

Clock implements a mock clock.Clock for testing purposes.

func NewClock

func NewClock(now time.Time) *Clock

NewClock returns a new clock set to the supplied time. If your SUT needs to call After, AfterFunc, or Timer.Reset more than 1024 times: (1) you have probably written a bad test; and (2) you'll need to read from the Alarms chan to keep the buffer clear.

func (*Clock) Advance

func (clock *Clock) Advance(d time.Duration)

Advance advances the result of Now by the supplied duration, and sends the "current" time on all alarms which are no longer "in the future".

func (*Clock) After

func (clock *Clock) After(d time.Duration) <-chan time.Time

After is part of the clock.Clock interface.

func (*Clock) AfterFunc

func (clock *Clock) AfterFunc(d time.Duration, f func()) clock.Timer

AfterFunc is part of the clock.Clock interface.

func (*Clock) Alarms

func (clock *Clock) Alarms() <-chan struct{}

Alarms returns a channel on which you can read one value for every call to After and AfterFunc; and for every successful Timer.Reset backed by this Clock. It might not be elegant but it's necessary when testing time logic that runs on a goroutine other than that of the test.

func (*Clock) Now

func (clock *Clock) Now() time.Time

Now is part of the clock.Clock interface.

type ContentAsserterC

type ContentAsserterC struct {
	// C is a gocheck C structure for doing assertions
	C *gc.C
	// Chan is the channel we want to receive on
	Chan interface{}
	// Precond will be called before waiting on the channel, can be nil
	Precond func()
}

ContentAsserterC is like NotifyAsserterC in that it checks the behavior of a channel. The difference is that we expect actual content on the channel, so callers need to put that into and out of an 'interface{}'

func (*ContentAsserterC) AssertClosed

func (a *ContentAsserterC) AssertClosed()

AssertClosed ensures that we get a closed event on the channel

func (*ContentAsserterC) AssertNoReceive

func (a *ContentAsserterC) AssertNoReceive()

Assert that we fail to receive on the channel after a short wait.

func (*ContentAsserterC) AssertOneReceive

func (a *ContentAsserterC) AssertOneReceive() interface{}

AssertOneReceive checks that we have exactly one message, and no more

func (*ContentAsserterC) AssertOneValue

func (a *ContentAsserterC) AssertOneValue(val interface{}) interface{}

AssertOneValue checks that exactly 1 message was sent, and that the content DeepEquals the value. It also returns the value in case further inspection is desired.

func (*ContentAsserterC) AssertReceive

func (a *ContentAsserterC) AssertReceive() interface{}

AssertReceive will ensure that we get an event on the channel and the channel is not closed. It will return the content received

type FakeJujuXDGDataHomeSuite

type FakeJujuXDGDataHomeSuite struct {
	JujuOSEnvSuite
	gitjujutesting.FakeHomeSuite
	// contains filtered or unexported fields
}

FakeJujuXDGDataHomeSuite isolates the user's home directory and sets up a Juju home with a sample environment and certificate.

func (*FakeJujuXDGDataHomeSuite) AssertConfigParameterUpdated

func (s *FakeJujuXDGDataHomeSuite) AssertConfigParameterUpdated(c *gc.C, key, value string)

AssertConfigParameterUpdated updates environment parameter and asserts that no errors were encountered.

func (*FakeJujuXDGDataHomeSuite) SetUpTest

func (s *FakeJujuXDGDataHomeSuite) SetUpTest(c *gc.C)

func (*FakeJujuXDGDataHomeSuite) TearDownTest

func (s *FakeJujuXDGDataHomeSuite) TearDownTest(c *gc.C)

type GitSuite

type GitSuite struct {
	BaseSuite
}

func (*GitSuite) SetUpTest

func (t *GitSuite) SetUpTest(c *gc.C)

type JujuOSEnvSuite

type JujuOSEnvSuite struct {
	// contains filtered or unexported fields
}

JujuOSEnvSuite isolates the tests from Juju environment variables. This is intended to be only used by existing suites, usually embedded in BaseSuite and in FakeJujuXDGDataHomeSuite. Eventually the tests relying on JujuOSEnvSuite will be converted to use the IsolationSuite in github.com/juju/testing, and this suite will be removed. Do not use JujuOSEnvSuite when writing new tests.

func (*JujuOSEnvSuite) SetFeatureFlags

func (s *JujuOSEnvSuite) SetFeatureFlags(flag ...string)

func (*JujuOSEnvSuite) SetInitialFeatureFlags

func (s *JujuOSEnvSuite) SetInitialFeatureFlags(flags ...string)

SetInitialFeatureFlags sets the feature flags to be in effect for the next call to SetUpTest.

func (*JujuOSEnvSuite) SetUpTest

func (s *JujuOSEnvSuite) SetUpTest(c *gc.C)

func (*JujuOSEnvSuite) TearDownTest

func (s *JujuOSEnvSuite) TearDownTest(c *gc.C)

type NotifyAsserterC

type NotifyAsserterC struct {
	// C is a gocheck C structure for doing assertions
	C *gc.C
	// Chan is the channel we want to receive on
	Chan <-chan struct{}
	// Precond will be called before waiting on the channel, can be nil
	Precond func()
}

NotifyAsserterC gives helper functions for making assertions about how a channel operates (whether we get a receive event or not, whether it is closed, etc.)

func (*NotifyAsserterC) AssertClosed

func (a *NotifyAsserterC) AssertClosed()

AssertClosed ensures that we get a closed event on the channel

func (*NotifyAsserterC) AssertNoReceive

func (a *NotifyAsserterC) AssertNoReceive()

Assert that we fail to receive on the channel after a short wait.

func (*NotifyAsserterC) AssertOneReceive

func (a *NotifyAsserterC) AssertOneReceive()

AssertOneReceive checks that we have exactly one message, and no more

func (*NotifyAsserterC) AssertReceive

func (a *NotifyAsserterC) AssertReceive()

AssertReceive will ensure that we get an event on the channel and the channel is not closed.

type PackageManagerStruct

type PackageManagerStruct struct {
	PackageManager    string
	RepositoryManager string
	PackageQuery      string
}

func GetPackageManager

func GetPackageManager() (s PackageManagerStruct, err error)

type ProxyRoundTripper

type ProxyRoundTripper struct {
	// Sub is the roundtripper that this roundtripper delegates to, if any.
	// If you leave this nil, this roundtripper is effectively disabled.
	Sub http.RoundTripper
}

ProxyRoundTripper is an http.RoundTripper implementation that does nothing but delegate to another RoundTripper. This lets tests change how they handle requests for a given scheme, despite the fact that the standard library does not support un-registration, or registration of a new roundtripper with a URL scheme that's already handled.

Use the RegisterForScheme method to install this as the standard handler for a particular protocol. For example, if you call prt.RegisterForScheme("test") then afterwards, any request to "test:///foo" will be routed to prt.

func (*ProxyRoundTripper) RegisterForScheme

func (prt *ProxyRoundTripper) RegisterForScheme(scheme string)

RegisterForScheme registers a ProxyRoundTripper as the default roundtripper for the given URL scheme.

This cannot be undone, nor overwritten with a different roundtripper. If you change your mind later about what the roundtripper should do, set its "Sub" field to delegate to a different roundtripper (or to nil if you don't want to handle its requests at all any more).

func (*ProxyRoundTripper) RoundTrip

func (prt *ProxyRoundTripper) RoundTrip(req *http.Request) (*http.Response, error)

type StubClock

type StubClock struct {
	*testing.Stub

	ReturnNow       time.Time
	ReturnAfter     <-chan time.Time
	ReturnAfterFunc clock.Timer
}

func NewStubClock

func NewStubClock(stub *testing.Stub) *StubClock

func (*StubClock) After

func (s *StubClock) After(d time.Duration) <-chan time.Time

func (*StubClock) AfterFunc

func (s *StubClock) AfterFunc(d time.Duration, f func()) clock.Timer

func (*StubClock) Now

func (s *StubClock) Now() time.Time

type TarFile

type TarFile struct {
	Header   tar.Header
	Contents string
}

TarFile represents a file to be archived.

func NewTarFile

func NewTarFile(name string, mode os.FileMode, contents string) *TarFile

NewTarFile returns a new TarFile instance with the given file mode and contents.

type TestCleanup

type TestCleanup interface {
	AddCleanup(func(*gc.C))
}

TestCleanup is used to allow DumpTestLogsAfter to take any test suite that supports the standard cleanup function.

type Timer

type Timer struct {
	ID int
	// contains filtered or unexported fields
}

Timer implements a mock clock.Timer for testing purposes.

func (*Timer) Reset

func (t *Timer) Reset(d time.Duration) bool

Reset is part of the clock.Timer interface.

func (*Timer) Stop

func (t *Timer) Stop() bool

Stop is part of the clock.Timer interface.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL