mirror of
https://codeberg.org/anoncontributorxmr/monero.git
synced 2024-11-23 07:52:25 +00:00
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)
This commit is contained in:
commit
9d65a9cc98
2 changed files with 145 additions and 0 deletions
117
tests/README.md
Normal file
117
tests/README.md
Normal file
|
@ -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]
|
|
@ -47,6 +47,14 @@ namespace
|
||||||
"8b655970153799af2aeadc9ff1add0ea6c7251d54154cfa92c173a0dd39c1f94"
|
"8b655970153799af2aeadc9ff1add0ea6c7251d54154cfa92c173a0dd39c1f94"
|
||||||
"6c7251d54154cfa92c173a0dd39c1f948b655970153799af2aeadc9ff1add0ea";
|
"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>
|
template<typename T>
|
||||||
bool is_formatted()
|
bool is_formatted()
|
||||||
{
|
{
|
||||||
|
@ -61,6 +69,26 @@ namespace
|
||||||
out << "BEGIN" << value << "END";
|
out << "BEGIN" << value << "END";
|
||||||
return out.str() == "BEGIN<" + std::string{expected, sizeof(T) * 2} + ">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)
|
TEST(Crypto, Ostream)
|
||||||
|
|
Loading…
Reference in a new issue