Documentation ¶
Overview ¶
Package testing provides support for automated testing for import plugins.
Index ¶
- func Asset(name string) ([]byte, error)
- func AssetDir(name string) ([]string, error)
- func AssetInfo(name string) (os.FileInfo, error)
- func AssetNames() []string
- func Clean()
- func ImportPath(dir string) (string, error)
- func MustAsset(name string) []byte
- func RestoreAsset(dir, name string) error
- func RestoreAssets(dir, name string) error
- func TestImport(t testing.T, c TestImportCase)
- func TestImportDir(t testing.T, path string, customize func(*TestImportCase))
- type TestImportCase
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Asset ¶
Asset loads and returns the asset for the given name. It returns an error if the asset could not be found or could not be loaded.
func AssetDir ¶
AssetDir returns the file names below a certain directory embedded in the file by go-bindata. For example if you run go-bindata on data/... and data contains the following hierarchy:
data/ foo.txt img/ a.png b.png
then AssetDir("data") would return []string{"foo.txt", "img"} AssetDir("data/img") would return []string{"a.png", "b.png"} AssetDir("foo.txt") and AssetDir("notexist") would return an error AssetDir("") will return []string{"data"}.
func AssetInfo ¶
AssetInfo loads and returns the asset info for the given name. It returns an error if the asset could not be found or could not be loaded.
func Clean ¶
func Clean()
Clean cleans any temporary files created. This should always be called at the end of any set of import tests.
func ImportPath ¶
ImportPath attempts to infer the import path based on the GOPATH environment variable and the directory.
func MustAsset ¶
MustAsset is like Asset but panics when Asset would return an error. It simplifies safe initialization of global variables.
func RestoreAsset ¶
RestoreAsset restores an asset under the given directory
func RestoreAssets ¶
RestoreAssets restores an asset under the given directory recursively
func TestImport ¶
func TestImport(t testing.T, c TestImportCase)
TestImport tests that a sdk.Import implementation works as expected.
func TestImportDir ¶ added in v0.3.6
func TestImportDir(t testing.T, path string, customize func(*TestImportCase))
TestImportDir iterates over files in a directory, calls LoadTestImportCase on each file suffixed with ".sentinel", and executes all of the import tests.
Types ¶
type TestImportCase ¶
type TestImportCase 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 import data Mock map[string]map[string]interface{} // ImportPath is the path to a Go package on your GOPATH containing // the import 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.ImportFunc signature. // // This should usually be blank. This maximizes portability of the // import if it were to be forked or moved. // // For a given import path, the test binary will be built exactly once // per test run. ImportPath string // ImportName allows passing a custom name for the import to be used in // test cases. By default, the import is simply named "subject". The // import name is what is used within this policy's source to access // functionality provided by the import. ImportName 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 }
TestImportCase is a single test case for configuring TestImport.
func LoadTestImportCase ¶ added in v0.3.6
func LoadTestImportCase(t testing.T, path string) TestImportCase
LoadTestImportCase is used to load a TestImportCase 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 TestImport 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 testimport contains a test import that the testing package uses for unit tests.
|
Package testimport contains a test import that the testing package uses for unit tests. |