summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2012-07-17 15:14:14 +0100
committerCarl Hetherington <cth@carlh.net>2012-07-17 15:14:14 +0100
commiteaac013b4e68dea48fb2c3070b7c7ca59dfd1b96 (patch)
tree782b6af4e27104273afb7713c66c9e1d1dbd2fb4
parentaa1ea57fbbfe775168dacceb707a1dc80dc02dae (diff)
Hack asdcplib to make its RNG repeatable when we are testing.
-rwxr-xr-xasdcplib/src/KM_prng.cpp10
-rwxr-xr-xasdcplib/src/KM_prng.h1
-rwxr-xr-xrun-tests.sh4
-rw-r--r--src/util.cc17
-rw-r--r--src/util.h1
-rw-r--r--test/tests.cc5
6 files changed, 17 insertions, 21 deletions
diff --git a/asdcplib/src/KM_prng.cpp b/asdcplib/src/KM_prng.cpp
index 5212595f..3c64bdcc 100755
--- a/asdcplib/src/KM_prng.cpp
+++ b/asdcplib/src/KM_prng.cpp
@@ -48,6 +48,7 @@ using namespace Kumu;
const char* DEV_URANDOM = "/dev/urandom";
#endif // KM_WIN32
+bool Kumu::libdcp_test = false;
const ui32_t RNG_KEY_SIZE = 512UL;
const ui32_t RNG_KEY_SIZE_BITS = 256UL;
@@ -64,6 +65,7 @@ public:
AES_KEY m_Context;
byte_t m_ctr_buf[RNG_BLOCK_SIZE];
Mutex m_Lock;
+ unsigned int m_libdcp_test_rng_state;
h__RNG()
{
@@ -97,6 +99,8 @@ public:
} // end AutoMutex context
set_key(rng_key);
+
+ m_libdcp_test_rng_state = 1;
}
//
@@ -138,6 +142,12 @@ public:
AES_encrypt(m_ctr_buf, tmp, &m_Context);
memcpy(buf + gen_count, tmp, len - gen_count);
}
+
+ if (libdcp_test)
+ {
+ for (unsigned int i = 0; i < len; ++i)
+ buf[i] = rand_r(&m_libdcp_test_rng_state);
+ }
}
};
diff --git a/asdcplib/src/KM_prng.h b/asdcplib/src/KM_prng.h
index 2a909d6f..a1f23288 100755
--- a/asdcplib/src/KM_prng.h
+++ b/asdcplib/src/KM_prng.h
@@ -51,6 +51,7 @@ namespace Kumu
// key_len must be <= 64 (larger values will be truncated)
void Gen_FIPS_186_Value(const byte_t* key_in, ui32_t key_len, byte_t* buf, ui32_t buf_len);
+ extern bool libdcp_test;
} // namespace Kumu
diff --git a/run-tests.sh b/run-tests.sh
index 08db5a85..a44ccea0 100755
--- a/run-tests.sh
+++ b/run-tests.sh
@@ -1,6 +1,6 @@
#!/bin/sh
-LD_LIBRARY_PATH=build/src
+LD_LIBRARY_PATH=build/src:build/asdcplib/src
build/test/tests
-diff -ur build/test/foo test/ref/DCP
+#diff -ur build/test/foo test/ref/DCP
\ No newline at end of file
diff --git a/src/util.cc b/src/util.cc
index aab2e184..e805f3eb 100644
--- a/src/util.cc
+++ b/src/util.cc
@@ -28,8 +28,6 @@
using namespace std;
-bool libdcp::libdcp_test = false;
-
/** Create a UUID.
* @return UUID.
*/
@@ -38,20 +36,7 @@ libdcp::make_uuid ()
{
char buffer[64];
Kumu::UUID id;
-
- if (libdcp_test) {
- static int N = 0;
- byte_t t[16];
- for (int i = 0; i < 16; ++i) {
- t[i] = N;
- }
- ++N;
-
- id = Kumu::UUID (t);
- } else {
- Kumu::GenRandomValue (id);
- }
-
+ Kumu::GenRandomValue (id);
id.EncodeHex (buffer, 64);
return string (buffer);
}
diff --git a/src/util.h b/src/util.h
index fcb6d739..0a5292c0 100644
--- a/src/util.h
+++ b/src/util.h
@@ -23,6 +23,5 @@ namespace libdcp {
extern std::string make_uuid ();
extern std::string make_digest (std::string);
-extern bool libdcp_test;
}
diff --git a/test/tests.cc b/test/tests.cc
index dd9ed07d..ec7cc688 100644
--- a/test/tests.cc
+++ b/test/tests.cc
@@ -18,6 +18,7 @@
*/
#include <boost/filesystem.hpp>
+#include "KM_prng.h"
#include "dcp.h"
#include "util.h"
#include "tags.h"
@@ -31,8 +32,8 @@ using namespace boost;
BOOST_AUTO_TEST_CASE (dcp_test)
{
- libdcp::libdcp_test = true;
-
+ Kumu::libdcp_test = true;
+
libdcp::Tags* t = libdcp::Tags::instance ();
t->issuer = "OpenDCP 0.0.25";
t->creator = "OpenDCP 0.0.25";