Documentation
¶
Overview ¶
Package testing provides support for automated testing for plugins.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Clean ¶
func Clean()
Clean cleans any temporary files created. This should always be called at the end of any set of plugin tests.
func PluginPath ¶ added in v0.4.0
PluginPath attempts to infer the plugin path based on the GOPATH environment variable and the directory.
func TestPlugin ¶ added in v0.4.0
func TestPlugin(t testing.T, c TestPluginCase)
TestPlugin tests that a sdk.Plugin implementation works as expected.
func TestPluginDir ¶ added in v0.4.0
func TestPluginDir(t testing.T, path string, customize func(*TestPluginCase))
TestPluginDir iterates over files in a directory, calls LoadTestPluginCase on each file suffixed with ".sentinel", and executes all of the plugin tests.
Types ¶
type TestPluginCase ¶ added in v0.4.0
type TestPluginCase struct {
// Source is a policy to execute. This should be a full program ending
// in `main = ` and an assignment. For example `main = subject.foo`.
Source string
// This is the configuration that will be sent to the plugin. This
// must serialize to JSON since the JSON will be used to pass the
// configuration.
Config map[string]interface{}
// This is extra data to inject into the global scope of the policy
// execution
Global map[string]interface{}
// Mock is mocked plugin data
Mock map[string]map[string]interface{}
// PluginPath is the path to a Go package on your GOPATH containing
// the plugin to test. If this is blank, the test case uses heuristics
// to extract the GOPATH and use the current package for testing.
// This package is expected to expose a "New" function which adheres to
// the sdk/rpc.PluginFunc signature.
//
// This should usually be blank. This maximizes portability of the
// plugin if it were to be forked or moved.
//
// For a given plugin path, the test binary will be built exactly once
// per test run.
PluginPath string
// PluginName allows passing a custom name for the plugin to be used in
// test cases. By default, the plugin is simply named "subject". The
// plugin name is what is used within this policy's source to access
// functionality provided by the plugin.
PluginName string
// A string containing any expected runtime error during evaluation. If
// this field is non-empty, a runtime error is expected to occur, and
// the Sentinel output is searched for the string given here. If the
// output contains the string, the test passes. If it does not contain
// the string, the test will fail.
//
// More advanced matches can be done with regular expression patterns.
// If the Error string is delimited by slashes (/), the string is
// compiled as a regular expression and the Sentinel output is matched
// against the resulting pattern. If a match is found, the test passes.
// If it does not match, the tests will fail.
Error string
}
TestPluginCase is a single test case for configuring TestPlugin.
func LoadTestPluginCase ¶ added in v0.4.0
func LoadTestPluginCase(t testing.T, path string) TestPluginCase
LoadTestPluginCase is used to load a TestPluginCase from a Sentinel policy file. Certain test case pragmas are supported in the top-most comment body. The following is a completely valid example:
//config: {"option1": "value1"}
//error: failed to do the thing
main = rule { true }
The above would load a TestPlugin case using the specified options. The config is loaded as a JSON string and unmarshaled into the Config field. The error field is loaded as a string into the Error field. Pragmas *must* be at the very top of the file, starting at line one. When a non-pragma line is encountered, parsing will end and any further pragmas are discarded.
This makes boilerplate very simple for a large number of Sentinel tests, and allows an entire test to be captured neatly into a single file which also happens to be the policy being tested.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package testplugin contains a test plugin that the testing package uses for unit tests.
|
Package testplugin contains a test plugin that the testing package uses for unit tests. |