aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorRiccardo Spagni <ric@spagni.net>2017-11-06 01:52:08 +0200
committerRiccardo Spagni <ric@spagni.net>2017-11-06 01:52:08 +0200
commit9d65a9cc98ae5f72a0ed3d4cb839cdab36fb48e7 (patch)
tree9075895aa65203b5b9ebcd7c7c4815edbe9ddca8 /tests
parentMerge pull request #2729 (diff)
parentEdited test readme for accuracy and depth (diff)
downloadmonero-9d65a9cc98ae5f72a0ed3d4cb839cdab36fb48e7.tar.xz
Merge pull request #2483
ff7745bb Edited test readme for accuracy and depth (Cole Lightfighter) c300ae56 Added test documentation & Keccak unit test (Cole Lightfighter) f6119a8e Added test documentation & Keccak unit test (Cole Lightfighter)
Diffstat (limited to 'tests')
-rw-r--r--tests/README.md117
-rw-r--r--tests/unit_tests/crypto.cpp28
2 files changed, 145 insertions, 0 deletions
diff --git a/tests/README.md b/tests/README.md
new file mode 100644
index 000000000..48a6c41a7
--- /dev/null
+++ b/tests/README.md
@@ -0,0 +1,117 @@
+# Running all tests
+
+To run all tests, run:
+
+```
+cd /path/to/monero
+make [-jn] debug-test # where n is number of compiler processes
+```
+
+To test a release build, replace `debug-test` with `release-test` in the previous command.
+
+# Core tests
+
+Core tests take longer than any other Monero tests, due to the high amount of computational work involved in validating core components.
+
+Tests are located in `tests/core_tests/`, and follow a straightforward naming convention. Most cases cover core functionality (`block_reward.cpp`, `chaingen.cpp`, `rct.cpp`, etc.), while some cover basic security tests (`double_spend.cpp` & `integer_overflow.cpp`).
+
+To run only Monero's core tests (after building):
+
+```
+cd build/debug/tests/core
+ctest
+```
+
+To run the same tests on a release build, replace `debug` with `release`.
+
+
+# Crypto Tests
+
+Crypto tests are located under the `tests/crypto` directory.
+
+- `crypto-tests.h` contains test harness headers
+- `main.cpp` implements the driver for the crypto tests
+
+Tests correspond to components under `src/crypto/`. A quick comparison reveals the pattern, and new tests should continue the naming convention.
+
+To run only Monero's crypto tests (after building):
+
+```
+cd build/debug/tests/crypto
+ctest
+```
+
+To run the same tests on a release build, replace `debug` with `release`.
+
+# Daemon tests
+
+[TODO]
+
+# Functional tests
+
+[TODO]
+
+# Fuzz tests
+
+Fuzz tests are written using American Fuzzy Lop (AFL), and located under the `tests/fuzz` directory.
+
+An additional helper utility is provided `contrib/fuzz_testing/fuzz.sh`. AFL must be installed, and some additional setup may be necessary for the script to run properly.
+
+# Hash tests
+
+Hash tests exist under `tests/hash`, and include a set of target hashes in text files.
+
+To run only Monero's hash tests (after building):
+
+```
+cd build/debug/tests/hash
+ctest
+```
+
+To run the same tests on a release build, replace `debug` with `release`.
+
+# Libwallet API tests
+
+[TODO]
+
+# Net Load tests
+
+[TODO]
+
+# Performance tests
+
+Performance tests are located in `tests/performance_tests`, and test features for performance metrics on the host machine.
+
+To run only Monero's performance tests (after building):
+
+```
+cd build/debug/tests/performance_tests
+./performance_tests
+```
+
+If the `performance_tests` binary does not exist, try running `make` in the `build/debug/tests/performance_tests` directory.
+
+To run the same tests on a release build, replace `debug` with `release`.
+
+# Unit tests
+
+Unit tests are defined under the `tests/unit_tests` directory. Independent components are tested individually to ensure they work properly on their own.
+
+To run only Monero's unit tests (after building):
+
+```
+cd build/debug/tests/unit_tests
+ctest
+```
+
+To run the same tests on a release build, replace `debug` with `release`.
+
+# Writing new tests
+
+## Test hygiene
+
+When writing new tests, please implement all functions in `.cpp` or `.c` files, and only put function headers in `.h` files. This will help keep the fairly complex test suites somewhat sane going forward.
+
+## Writing fuzz tests
+
+[TODO]
diff --git a/tests/unit_tests/crypto.cpp b/tests/unit_tests/crypto.cpp
index 3a8e787ec..51e26c2bb 100644
--- a/tests/unit_tests/crypto.cpp
+++ b/tests/unit_tests/crypto.cpp
@@ -47,6 +47,14 @@ namespace
"8b655970153799af2aeadc9ff1add0ea6c7251d54154cfa92c173a0dd39c1f94"
"6c7251d54154cfa92c173a0dd39c1f948b655970153799af2aeadc9ff1add0ea";
+ static std::uint8_t md[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+
template<typename T>
bool is_formatted()
{
@@ -61,6 +69,26 @@ namespace
out << "BEGIN" << value << "END";
return out.str() == "BEGIN<" + std::string{expected, sizeof(T) * 2} + ">END";
}
+
+ bool keccak_harness()
+ {
+ size_t inlen = sizeof(source);
+ int mdlen = (int)sizeof(md);
+ int ret = keccak(source, inlen, md, mdlen);
+
+ if (md[0] != 0x00)
+ {
+ return true;
+ }
+ else if (!ret)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
}
TEST(Crypto, Ostream)