summaryrefslogtreecommitdiffstats
path: root/fluent-bit/tests/lib/shunit2/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'fluent-bit/tests/lib/shunit2/README.md')
-rw-r--r--fluent-bit/tests/lib/shunit2/README.md636
1 files changed, 0 insertions, 636 deletions
diff --git a/fluent-bit/tests/lib/shunit2/README.md b/fluent-bit/tests/lib/shunit2/README.md
deleted file mode 100644
index dd6bba42..00000000
--- a/fluent-bit/tests/lib/shunit2/README.md
+++ /dev/null
@@ -1,636 +0,0 @@
-# shUnit2
-
-shUnit2 is a [xUnit](http://en.wikipedia.org/wiki/XUnit) unit test framework for
-Bourne based shell scripts, and it is designed to work in a similar manner to
-[JUnit](http://www.junit.org), [PyUnit](http://pyunit.sourceforge.net), etc.. If
-you have ever had the desire to write a unit test for a shell script, shUnit2
-can do the job.
-
-[![Travis CI](https://img.shields.io/travis/kward/shunit2.svg)](https://travis-ci.org/kward/shunit2)
-
-## Table of Contents
-
-* [Introduction](#introduction)
- * [Credits / Contributors](#credits-contributors)
- * [Feedback](#feedback)
-* [Quickstart](#quickstart)
-* [Function Reference](#function-reference)
- * [General Info](#general-info)
- * [Asserts](#asserts)
- * [Failures](#failures)
- * [Setup/Teardown](#setup-teardown)
- * [Skipping](#skipping)
- * [Suites](#suites)
-* [Advanced Usage](#advanced-usage)
- * [Some constants you can use](#some-constants-you-can-use)
- * [Error Handling](#error-handling)
- * [Including Line Numbers in Asserts (Macros)](#including-line-numbers-in-asserts-macros)
- * [Test Skipping](#test-skipping)
- * [Running specific tests from the command line](#cmd-line-args)
-* [Appendix](#appendix)
- * [Getting help](#getting-help)
- * [Zsh](#zsh)
-
----
-
-## <a name="introduction"></a> Introduction
-
-shUnit2 was originally developed to provide a consistent testing solution for
-[log4sh][log4sh], a shell based logging framework similar to
-[log4j](http://logging.apache.org). During the development of that product, a
-repeated problem of having things work just fine under one shell (`/bin/bash` on
-Linux to be specific), and then not working under another shell (`/bin/sh` on
-Solaris) kept coming up. Although several simple tests were run, they were not
-adequate and did not catch some corner cases. The decision was finally made to
-write a proper unit test framework after multiple brown-bag releases were made.
-_Research was done to look for an existing product that met the testing
-requirements, but no adequate product was found._
-
-### Tested software
-
-**Tested Operating Systems** (varies over time)
-
-OS | Support | Verified
------------------------------------ | --------- | --------
-Ubuntu Linux (14.04.05 LTS) | Travis CI | continuous
-macOS High Sierra (10.13.3) | Travis CI | continuous
-FreeBSD | user | unknown
-Solaris 8, 9, 10 (inc. OpenSolaris) | user | unknown
-Cygwin | user | unknown
-
-**Tested Shells**
-
-* Bourne Shell (__sh__)
-* BASH - GNU Bourne Again SHell (__bash__)
-* DASH (__dash__)
-* Korn Shell (__ksh__)
-* pdksh - Public Domain Korn Shell (__pdksh__)
-* zsh - Zsh (__zsh__) (since 2.1.2) _please see the Zsh shell errata for more information_
-
-See the appropriate Release Notes for this release
-(`doc/RELEASE_NOTES-X.X.X.txt`) for the list of actual versions tested.
-
-### <a name="credits-contributors"></a> Credits / Contributors
-
-A list of contributors to shUnit2 can be found in `doc/contributors.md`. Many
-thanks go out to all those who have contributed to make this a better tool.
-
-shUnit2 is the original product of many hours of work by Kate Ward, the primary
-author of the code. For related software, check out https://github.com/kward.
-
-### <a name="feedback"></a> Feedback
-
-Feedback is most certainly welcome for this document. Send your questions,
-comments, and criticisms via the
-[shunit2-users](https://groups.google.com/a/forestent.com/forum/#!forum/shunit2-users/new)
-forum (created 2018-12-09), or file an issue via
-https://github.com/kward/shunit2/issues.
-
----
-
-## <a name="quickstart"></a> Quickstart
-
-This section will give a very quick start to running unit tests with shUnit2.
-More information is located in later sections.
-
-Here is a quick sample script to show how easy it is to write a unit test in
-shell. _Note: the script as it stands expects that you are running it from the
-"examples" directory._
-
-```sh
-#! /bin/sh
-# file: examples/equality_test.sh
-
-testEquality() {
- assertEquals 1 1
-}
-
-# Load shUnit2.
-. ./shunit2
-```
-
-Running the unit test should give results similar to the following.
-
-```console
-$ cd examples
-$ ./equality_test.sh
-testEquality
-
-Ran 1 test.
-
-OK
-```
-
-W00t! You've just run your first successful unit test. So, what just happened?
-Quite a bit really, and it all happened simply by sourcing the `shunit2`
-library. The basic functionality for the script above goes like this:
-
-* When shUnit2 is sourced, it will walk through any functions defined whose name
- starts with the string `test`, and add those to an internal list of tests to
- execute. Once a list of test functions to be run has been determined, shunit2
- will go to work.
-* Before any tests are executed, shUnit2 again looks for a function, this time
- one named `oneTimeSetUp()`. If it exists, it will be run. This function is
- normally used to setup the environment for all tests to be run. Things like
- creating directories for output or setting environment variables are good to
- place here. Just so you know, you can also declare a corresponding function
- named `oneTimeTearDown()` function that does the same thing, but once all the
- tests have been completed. It is good for removing temporary directories, etc.
-* shUnit2 is now ready to run tests. Before doing so though, it again looks for
- another function that might be declared, one named `setUp()`. If the function
- exists, it will be run before each test. It is good for resetting the
- environment so that each test starts with a clean slate. **At this stage, the
- first test is finally run.** The success of the test is recorded for a report
- that will be generated later. After the test is run, shUnit2 looks for a final
- function that might be declared, one named `tearDown()`. If it exists, it will
- be run after each test. It is a good place for cleaning up after each test,
- maybe doing things like removing files that were created, or removing
- directories. This set of steps, `setUp() > test() > tearDown()`, is repeated
- for all of the available tests.
-* Once all the work is done, shUnit2 will generate the nice report you saw
- above. A summary of all the successes and failures will be given so that you
- know how well your code is doing.
-
-We should now try adding a test that fails. Change your unit test to look like
-this.
-
-```sh
-#! /bin/sh
-# file: examples/party_test.sh
-
-testEquality() {
- assertEquals 1 1
-}
-
-testPartyLikeItIs1999() {
- year=`date '+%Y'`
- assertEquals "It's not 1999 :-(" '1999' "${year}"
-}
-
-# Load shUnit2.
-. ./shunit2
-```
-
-So, what did you get? I guess it told you that this isn't 1999. Bummer, eh?
-Hopefully, you noticed a couple of things that were different about the second
-test. First, we added an optional message that the user will see if the assert
-fails. Second, we did comparisons of strings instead of integers as in the first
-test. It doesn't matter whether you are testing for equality of strings or
-integers. Both work equally well with shUnit2.
-
-Hopefully, this is enough to get you started with unit testing. If you want a
-ton more examples, take a look at the tests provided with [log4sh][log4sh] or
-[shFlags][shflags]. Both provide excellent examples of more advanced usage.
-shUnit2 was after all written to meet the unit testing need that
-[log4sh][log4sh] had.
-
----
-
-## <a name="function-reference"></a> Function Reference
-
-### <a name="general-info"></a> General Info
-
-Any string values passed should be properly quoted -- they should must be
-surrounded by single-quote (`'`) or double-quote (`"`) characters -- so that the
-shell will properly parse them.
-
-### <a name="asserts"></a> Asserts
-
-`assertEquals [message] expected actual`
-
-Asserts that _expected_ and _actual_ are equal to one another. The _expected_
-and _actual_ values can be either strings or integer values as both will be
-treated as strings. The _message_ is optional, and must be quoted.
-
-`assertNotEquals [message] unexpected actual`
-
-Asserts that _unexpected_ and _actual_ are not equal to one another. The
-_unexpected_ and _actual_ values can be either strings or integer values as both
-will be treaded as strings. The _message_ is optional, and must be quoted.
-
-`assertSame [message] expected actual`
-
-This function is functionally equivalent to `assertEquals`.
-
-`assertNotSame [message] unexpected actual`
-
-This function is functionally equivalent to `assertNotEquals`.
-
-`assertContains [message] container content`
-
-Asserts that _container_ contains _content_. The _container_ and _content_
-values can be either strings or integer values as both will be treated as
-strings. The _message_ is optional, and must be quoted.
-
-`assertNotContains [message] container content`
-
-Asserts that _container_ does not contain _content_. The _container_ and
-_content_ values can be either strings or integer values as both will be treaded
-as strings. The _message_ is optional, and must be quoted.
-
-`assertNull [message] value`
-
-Asserts that _value_ is _null_, or in shell terms, a zero-length string. The
-_value_ must be a string as an integer value does not translate into a zero-
-length string. The _message_ is optional, and must be quoted.
-
-`assertNotNull [message] value`
-
-Asserts that _value_ is _not null_, or in shell terms, a non-empty string. The
-_value_ may be a string or an integer as the later will be parsed as a non-empty
-string value. The _message_ is optional, and must be quoted.
-
-`assertTrue [message] condition`
-
-Asserts that a given shell test _condition_ is _true_. The condition can be as
-simple as a shell _true_ value (the value `0` -- equivalent to
-`${SHUNIT_TRUE}`), or a more sophisticated shell conditional expression. The
-_message_ is optional, and must be quoted.
-
-A sophisticated shell conditional expression is equivalent to what the __if__ or
-__while__ shell built-ins would use (more specifically, what the __test__
-command would use). Testing for example whether some value is greater than
-another value can be done this way.
-
-`assertTrue "[ 34 -gt 23 ]"`
-
-Testing for the ability to read a file can also be done. This particular test
-will fail.
-
-`assertTrue 'test failed' "[ -r /some/non-existant/file' ]"`
-
-As the expressions are standard shell __test__ expressions, it is possible to
-string multiple expressions together with `-a` and `-o` in the standard fashion.
-This test will succeed as the entire expression evaluates to _true_.
-
-`assertTrue 'test failed' '[ 1 -eq 1 -a 2 -eq 2 ]'`
-
-<i>One word of warning: be very careful with your quoting as shell is not the
-most forgiving of bad quoting, and things will fail in strange ways.</i>
-
-`assertFalse [message] condition`
-
-Asserts that a given shell test _condition_ is _false_. The condition can be as
-simple as a shell _false_ value (the value `1` -- equivalent to
-`${SHUNIT_FALSE}`), or a more sophisticated shell conditional expression. The
-_message_ is optional, and must be quoted.
-
-_For examples of more sophisticated expressions, see `assertTrue`._
-
-### <a name="failures"></a> Failures
-
-Just to clarify, failures __do not__ test the various arguments against one
-another. Failures simply fail, optionally with a message, and that is all they
-do. If you need to test arguments against one another, use asserts.
-
-If all failures do is fail, why might one use them? There are times when you may
-have some very complicated logic that you need to test, and the simple asserts
-provided are simply not adequate. You can do your own validation of the code,
-use an `assertTrue ${SHUNIT_TRUE}` if your own tests succeeded, and use a
-failure to record a failure.
-
-`fail [message]`
-
-Fails the test immediately. The _message_ is optional, and must be quoted.
-
-`failNotEquals [message] unexpected actual`
-
-Fails the test immediately, reporting that the _unexpected_ and _actual_ values
-are not equal to one another. The _message_ is optional, and must be quoted.
-
-_Note: no actual comparison of unexpected and actual is done._
-
-`failSame [message] expected actual`
-
-Fails the test immediately, reporting that the _expected_ and _actual_ values
-are the same. The _message_ is optional, and must be quoted.
-
-_Note: no actual comparison of expected and actual is done._
-
-`failNotSame [message] expected actual`
-
-Fails the test immediately, reporting that the _expected_ and _actual_ values
-are not the same. The _message_ is optional, and must be quoted.
-
-_Note: no actual comparison of expected and actual is done._
-
-`failFound [message] content`
-
-Fails the test immediately, reporting that the _content_ was found. The
-_message_ is optional, and must be quoted.
-
-_Note: no actual search of content is done._
-
-`failNotFound [message] content`
-
-Fails the test immediately, reporting that the _content_ was not found. The
-_message_ is optional, and must be quoted.
-
-_Note: no actual search of content is done._
-
-### <a name="setup-teardown"></a> Setup/Teardown
-
-`oneTimeSetUp`
-
-This function can be be optionally overridden by the user in their test suite.
-
-If this function exists, it will be called once before any tests are run. It is
-useful to prepare a common environment for all tests.
-
-`oneTimeTearDown`
-
-This function can be be optionally overridden by the user in their test suite.
-
-If this function exists, it will be called once after all tests are completed.
-It is useful to clean up the environment after all tests.
-
-`setUp`
-
-This function can be be optionally overridden by the user in their test suite.
-
-If this function exists, it will be called before each test is run. It is useful
-to reset the environment before each test.
-
-`tearDown`
-
-This function can be be optionally overridden by the user in their test suite.
-
-If this function exists, it will be called after each test completes. It is
-useful to clean up the environment after each test.
-
-### <a name="skipping"></a> Skipping
-
-`startSkipping`
-
-This function forces the remaining _assert_ and _fail_ functions to be
-"skipped", i.e. they will have no effect. Each function skipped will be recorded
-so that the total of asserts and fails will not be altered.
-
-`endSkipping`
-
-This function returns calls to the _assert_ and _fail_ functions to their
-default behavior, i.e. they will be called.
-
-`isSkipping`
-
-This function returns the current state of skipping. It can be compared against
-`${SHUNIT_TRUE}` or `${SHUNIT_FALSE}` if desired.
-
-### <a name="suites"></a> Suites
-
-The default behavior of shUnit2 is that all tests will be found dynamically. If
-you have a specific set of tests you want to run, or you don't want to use the
-standard naming scheme of prefixing your tests with `test`, these functions are
-for you. Most users will never use them though.
-
-`suite`
-
-This function can be optionally overridden by the user in their test suite.
-
-If this function exists, it will be called when `shunit2` is sourced. If it does
-not exist, shUnit2 will search the parent script for all functions beginning
-with the word `test`, and they will be added dynamically to the test suite.
-
-`suite_addTest name`
-
-This function adds a function named _name_ to the list of tests scheduled for
-execution as part of this test suite. This function should only be called from
-within the `suite()` function.
-
----
-
-## <a name="advanced-usage"></a> Advanced Usage
-
-### <a name="some-constants-you-can-use"></a> Some constants you can use
-
-There are several constants provided by shUnit2 as variables that might be of
-use to you.
-
-*Predefined*
-
-| Constant | Value |
-| --------------- | ----- |
-| SHUNIT\_TRUE | Standard shell `true` value (the integer value 0). |
-| SHUNIT\_FALSE | Standard shell `false` value (the integer value 1). |
-| SHUNIT\_ERROR | The integer value 2. |
-| SHUNIT\_TMPDIR | Path to temporary directory that will be automatically cleaned up upon exit of shUnit2. |
-| SHUNIT\_VERSION | The version of shUnit2 you are running. |
-
-*User defined*
-
-| Constant | Value |
-| ----------------- | ----- |
-| SHUNIT\_CMD\_EXPR | Override which `expr` command is used. By default `expr` is used, except on BSD systems where `gexpr` is used. |
-| SHUNIT\_COLOR | Enable colorized output. Options are 'auto', 'always', or 'none', with 'auto' being the default. |
-| SHUNIT\_PARENT | The filename of the shell script containing the tests. This is needed specifically for Zsh support. |
-| SHUNIT\_TEST\_PREFIX | Define this variable to add a prefix in front of each test name that is output in the test report. |
-
-### <a name="error-handling"></a> Error handling
-
-The constants values `SHUNIT_TRUE`, `SHUNIT_FALSE`, and `SHUNIT_ERROR` are
-returned from nearly every function to indicate the success or failure of the
-function. Additionally the variable `flags_error` is filled with a detailed
-error message if any function returns with a `SHUNIT_ERROR` value.
-
-### <a name="including-line-numbers-in-asserts-macros"></a> Including Line Numbers in Asserts (Macros)
-
-If you include lots of assert statements in an individual test function, it can
-become difficult to determine exactly which assert was thrown unless your
-messages are unique. To help somewhat, line numbers can be included in the
-assert messages. To enable this, a special shell "macro" must be used rather
-than the standard assert calls. _Shell doesn't actually have macros; the name is
-used here as the operation is similar to a standard macro._
-
-For example, to include line numbers for a `assertEquals()` function call,
-replace the `assertEquals()` with `${_ASSERT_EQUALS_}`.
-
-_**Example** -- Asserts with and without line numbers_
-
-```sh
-#! /bin/sh
-# file: examples/lineno_test.sh
-
-testLineNo() {
- # This assert will have line numbers included (e.g. "ASSERT:[123] ...").
- echo "ae: ${_ASSERT_EQUALS_}"
- ${_ASSERT_EQUALS_} 'not equal' 1 2
-
- # This assert will not have line numbers included (e.g. "ASSERT: ...").
- assertEquals 'not equal' 1 2
-}
-
-# Load shUnit2.
-. ./shunit2
-```
-
-Notes:
-
-1. Due to how shell parses command-line arguments, all strings used with macros
- should be quoted twice. Namely, single-quotes must be converted to single-
- double-quotes, and vice-versa. If the string being passed is absolutely for
- sure not empty, the extra quoting is not necessary.<br/>
- <br/>
- Normal `assertEquals` call.<br/>
- `assertEquals 'some message' 'x' ''`<br/>
- <br/>
- Macro `_ASSERT_EQUALS_` call. Note the extra quoting around the _message_ and
- the _null_ value.<br/>
- `_ASSERT_EQUALS_ '"some message"' 'x' '""'`
-
-1. Line numbers are not supported in all shells. If a shell does not support
- them, no errors will be thrown. Supported shells include: __bash__ (>=3.0),
- __ksh__, __pdksh__, and __zsh__.
-
-### <a name="test-skipping"></a> Test Skipping
-
-There are times where the test code you have written is just not applicable to
-the system you are running on. This section describes how to skip these tests
-but maintain the total test count.
-
-Probably the easiest example would be shell code that is meant to run under the
-__bash__ shell, but the unit test is running under the Bourne shell. There are
-things that just won't work. The following test code demonstrates two sample
-functions, one that will be run under any shell, and the another that will run
-only under the __bash__ shell.
-
-_**Example** -- math include_
-```sh
-# file: examples/math.inc.
-
-add_generic() {
- num_a=$1
- num_b=$2
-
- expr $1 + $2
-}
-
-add_bash() {
- num_a=$1
- num_b=$2
-
- echo $(($1 + $2))
-}
-```
-
-And here is a corresponding unit test that correctly skips the `add_bash()` function when the unit test is not running under the __bash__ shell.
-
-_**Example** -- math unit test_
-```sh
-#! /bin/sh
-# file: examples/math_test.sh
-
-testAdding() {
- result=`add_generic 1 2`
- assertEquals \
- "the result of '${result}' was wrong" \
- 3 "${result}"
-
- # Disable non-generic tests.
- [ -z "${BASH_VERSION:-}" ] && startSkipping
-
- result=`add_bash 1 2`
- assertEquals \
- "the result of '${result}' was wrong" \
- 3 "${result}"
-}
-
-oneTimeSetUp() {
- # Load include to test.
- . ./math.inc
-}
-
-# Load and run shUnit2.
-. ./shunit2
-```
-
-Running the above test under the __bash__ shell will result in the following
-output.
-
-```console
-$ /bin/bash math_test.sh
-testAdding
-
-Ran 1 test.
-
-OK
-```
-
-But, running the test under any other Unix shell will result in the following
-output.
-
-```console
-$ /bin/ksh math_test.sh
-testAdding
-
-Ran 1 test.
-
-OK (skipped=1)
-```
-
-As you can see, the total number of tests has not changed, but the report
-indicates that some tests were skipped.
-
-Skipping can be controlled with the following functions: `startSkipping()`,
-`endSkipping()`, and `isSkipping()`. Once skipping is enabled, it will remain
-enabled until the end of the current test function call, after which skipping is
-disabled.
-
-### <a name="cmd-line-args"></a> Running specific tests from the command line.
-
-When running a test script, you may override the default set of tests, or the suite-specified set of tests, by providing additional arguments on the command line. Each additional argument after the `--` marker is assumed to be the name of a test function to be run in the order specified. e.g.
-
-```console
-test-script.sh -- testOne testTwo otherFunction
-```
-
-or
-
-```console
-shunit2 test-script.sh testOne testTwo otherFunction
-```
-
-In either case, three functions will be run as tests, `testOne`, `testTwo`, and `otherFunction`. Note that the function `otherFunction` would not normally be run by `shunit2` as part of the implicit collection of tests as it's function name does not match the test function name pattern `test*`.
-
-If a specified test function does not exist, `shunit2` will still attempt to run that function and thereby cause a failure which `shunit2` will catch and mark as a failed test. All other tests will run normally.
-
-The specification of tests does not affect how `shunit2` looks for and executes the setup and tear down functions, which will still run as expected.
-
----
-
-## <a name="appendix"></a> Appendix
-
-### <a name="getting-help"></a> Getting Help
-
-For help, please send requests to either the shunit2-users@forestent.com mailing
-list (archives available on the web at
-https://groups.google.com/a/forestent.com/forum/#!forum/shunit2-users) or
-directly to Kate Ward <kate dot ward at forestent dot com>.
-
-### <a name="zsh"></a> Zsh
-
-For compatibility with Zsh, there is one requirement that must be met -- the
-`shwordsplit` option must be set. There are three ways to accomplish this.
-
-1. In the unit-test script, add the following shell code snippet before sourcing
- the `shunit2` library.
-
- ```sh
- setopt shwordsplit
- ```
-
-2. When invoking __zsh__ from either the command-line or as a script with `#!`,
- add the `-y` parameter.
-
- ```sh
- #! /bin/zsh -y
- ```
-
-3. When invoking __zsh__ from the command-line, add `-o shwordsplit --` as
- parameters before the script name.
-
- ```console
- $ zsh -o shwordsplit -- some_script
- ```
-
-[log4sh]: https://github.com/kward/log4sh
-[shflags]: https://github.com/kward/shflags