aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/core_tests/chaingen.h1
-rw-r--r--tests/core_tests/chaingen_main.cpp6
-rw-r--r--tests/performance_tests/main.cpp21
-rw-r--r--tests/unit_tests/CMakeLists.txt1
-rw-r--r--tests/unit_tests/crypto.cpp8
-rw-r--r--tests/unit_tests/random.cpp47
-rw-r--r--tests/unit_tests/ringdb.cpp22
-rw-r--r--tests/unit_tests/serialization.cpp2
8 files changed, 78 insertions, 30 deletions
diff --git a/tests/core_tests/chaingen.h b/tests/core_tests/chaingen.h
index 201da4fa0..bbc9edd19 100644
--- a/tests/core_tests/chaingen.h
+++ b/tests/core_tests/chaingen.h
@@ -664,6 +664,7 @@ inline bool do_replay_file(const std::string& filename)
}
#define GENERATE_AND_PLAY(genclass) \
+ if (filter.empty() || boost::regex_match(std::string(#genclass), match, boost::regex(filter))) \
{ \
std::vector<test_event_entry> events; \
++tests_count; \
diff --git a/tests/core_tests/chaingen_main.cpp b/tests/core_tests/chaingen_main.cpp
index 6a1992cd1..c31655070 100644
--- a/tests/core_tests/chaingen_main.cpp
+++ b/tests/core_tests/chaingen_main.cpp
@@ -30,6 +30,7 @@
#include "chaingen.h"
#include "chaingen_tests_list.h"
+#include "common/util.h"
#include "common/command_line.h"
#include "transaction_tests.h"
@@ -42,6 +43,7 @@ namespace
const command_line::arg_descriptor<bool> arg_play_test_data = {"play_test_data", ""};
const command_line::arg_descriptor<bool> arg_generate_and_play_test_data = {"generate_and_play_test_data", ""};
const command_line::arg_descriptor<bool> arg_test_transactions = {"test_transactions", ""};
+ const command_line::arg_descriptor<std::string> arg_filter = { "filter", "Regular expression filter for which tests to run" };
}
int main(int argc, char* argv[])
@@ -61,6 +63,7 @@ int main(int argc, char* argv[])
command_line::add_arg(desc_options, arg_play_test_data);
command_line::add_arg(desc_options, arg_generate_and_play_test_data);
command_line::add_arg(desc_options, arg_test_transactions);
+ command_line::add_arg(desc_options, arg_filter);
po::variables_map vm;
bool r = command_line::handle_error_helper(desc_options, [&]()
@@ -78,6 +81,9 @@ int main(int argc, char* argv[])
return 0;
}
+ const std::string filter = tools::glob_to_regex(command_line::get_arg(vm, arg_filter));
+ boost::smatch match;
+
size_t tests_count = 0;
std::vector<std::string> failed_tests;
std::string tests_folder = command_line::get_arg(vm, arg_test_data_path);
diff --git a/tests/performance_tests/main.cpp b/tests/performance_tests/main.cpp
index 902bd89c0..bc3622ea8 100644
--- a/tests/performance_tests/main.cpp
+++ b/tests/performance_tests/main.cpp
@@ -54,25 +54,6 @@
namespace po = boost::program_options;
-std::string glob_to_regex(const std::string &val)
-{
- std::string newval;
-
- bool escape = false;
- for (char c: val)
- {
- if (c == '*')
- newval += escape ? "*" : ".*";
- else if (c == '?')
- newval += escape ? "?" : ".";
- else if (c == '\\')
- newval += '\\', escape = !escape;
- else
- newval += c;
- }
- return newval;
-}
-
int main(int argc, char** argv)
{
TRY_ENTRY();
@@ -97,7 +78,7 @@ int main(int argc, char** argv)
if (!r)
return 1;
- const std::string filter = glob_to_regex(command_line::get_arg(vm, arg_filter));
+ const std::string filter = tools::glob_to_regex(command_line::get_arg(vm, arg_filter));
performance_timer timer;
timer.start();
diff --git a/tests/unit_tests/CMakeLists.txt b/tests/unit_tests/CMakeLists.txt
index ffa8065ab..3c7414640 100644
--- a/tests/unit_tests/CMakeLists.txt
+++ b/tests/unit_tests/CMakeLists.txt
@@ -56,6 +56,7 @@ set(unit_tests_sources
mul_div.cpp
multisig.cpp
parse_amount.cpp
+ random.cpp
serialization.cpp
sha256.cpp
slow_memmem.cpp
diff --git a/tests/unit_tests/crypto.cpp b/tests/unit_tests/crypto.cpp
index 4bed06173..9e1680568 100644
--- a/tests/unit_tests/crypto.cpp
+++ b/tests/unit_tests/crypto.cpp
@@ -73,3 +73,11 @@ TEST(Crypto, Ostream)
EXPECT_TRUE(is_formatted<crypto::key_derivation>());
EXPECT_TRUE(is_formatted<crypto::key_image>());
}
+
+TEST(Crypto, null_keys)
+{
+ char zero[32];
+ memset(zero, 0, 32);
+ ASSERT_EQ(memcmp(crypto::null_skey.data, zero, 32), 0);
+ ASSERT_EQ(memcmp(crypto::null_pkey.data, zero, 32), 0);
+}
diff --git a/tests/unit_tests/random.cpp b/tests/unit_tests/random.cpp
new file mode 100644
index 000000000..7653453cd
--- /dev/null
+++ b/tests/unit_tests/random.cpp
@@ -0,0 +1,47 @@
+// Copyright (c) 2018, The Monero Project
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification, are
+// permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of
+// conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice, this list
+// of conditions and the following disclaimer in the documentation and/or other
+// materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be
+// used to endorse or promote products derived from this software without specific
+// prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "gtest/gtest.h"
+
+#include "crypto/crypto.h"
+
+extern "C" {
+#include "crypto/crypto-ops.h"
+}
+
+TEST(random32_unbiased, less_than_order)
+{
+ unsigned char tmp[32], tmp2[32];
+ for (int i = 0; i < 1000; ++i)
+ {
+ crypto::random32_unbiased(tmp);
+ memcpy(tmp2, tmp, 32);
+ sc_reduce32(tmp2);
+ ASSERT_EQ(memcmp(tmp, tmp2, 32), 0);
+ }
+}
diff --git a/tests/unit_tests/ringdb.cpp b/tests/unit_tests/ringdb.cpp
index d50d61b0f..8b0ea10d4 100644
--- a/tests/unit_tests/ringdb.cpp
+++ b/tests/unit_tests/ringdb.cpp
@@ -39,25 +39,29 @@
#include "crypto/crypto.h"
#include "crypto/random.h"
#include "crypto/chacha.h"
+#include "ringct/rctOps.h"
+#include "cryptonote_basic/cryptonote_basic.h"
#include "wallet/ringdb.h"
static crypto::chacha_key generate_chacha_key()
{
- uint8_t key[CHACHA_KEY_SIZE];
- crypto::rand(CHACHA_KEY_SIZE, key);
crypto::chacha_key chacha_key;
- memcpy(&chacha_key, key, CHACHA_KEY_SIZE);
+ uint64_t password = crypto::rand<uint64_t>();
+ crypto::generate_chacha_key(std::string((const char*)&password, sizeof(password)), chacha_key);
return chacha_key;
}
static crypto::key_image generate_key_image()
{
- return crypto::rand<crypto::key_image>();
+ crypto::key_image key_image;
+ cryptonote::keypair keypair = cryptonote::keypair::generate(hw::get_device("default"));
+ crypto::generate_key_image(keypair.pub, keypair.sec, key_image);
+ return key_image;
}
static crypto::public_key generate_output()
{
- return crypto::rand<crypto::public_key>();
+ return rct::rct2pk(rct::scalarmultBase(rct::skGen()));
}
@@ -76,13 +80,13 @@ public:
private:
std::string make_filename()
{
- boost::filesystem::path path = tools::get_default_data_dir();
- path /= "fake";
+ boost::filesystem::path path =
+ boost::filesystem::temp_directory_path();
#if defined(__MINGW32__) || defined(__MINGW__)
- filename = tempnam(path.string().c_str(), "ringdb-test-");
+ filename = tempnam(path.string().c_str(), "monero-ringdb-test-");
EXPECT_TRUE(filename != NULL);
#else
- path /= "ringdb-test-XXXXXX";
+ path /= "monero-ringdb-test-XXXXXX";
filename = strdup(path.string().c_str());
EXPECT_TRUE(mkdtemp(filename) != NULL);
#endif
diff --git a/tests/unit_tests/serialization.cpp b/tests/unit_tests/serialization.cpp
index 5a2114027..40616059a 100644
--- a/tests/unit_tests/serialization.cpp
+++ b/tests/unit_tests/serialization.cpp
@@ -810,7 +810,7 @@ TEST(Serialization, portability_outputs)
if(ciphertext.size() < prefix_size)
return {};
crypto::chacha_key key;
- crypto::generate_chacha_key(&skey, sizeof(skey), key);
+ crypto::generate_chacha_key(&skey, sizeof(skey), key, 1);
const crypto::chacha_iv &iv = *(const crypto::chacha_iv*)&ciphertext[0];
std::string plaintext;
plaintext.resize(ciphertext.size() - prefix_size);