Fix previous and add unit test for Key::hex.
authorCarl Hetherington <cth@carlh.net>
Mon, 8 Apr 2019 20:14:19 +0000 (21:14 +0100)
committerCarl Hetherington <cth@carlh.net>
Mon, 8 Apr 2019 20:14:19 +0000 (21:14 +0100)
src/key.cc
src/key.h
test/key_test.cc [new file with mode: 0644]
test/wscript

index 58cc6d5443d4ec863a214b81f7345cc644914273..6fc075cbcf5240057d5b8e1cfe8fe46e933e2356 100644 (file)
@@ -90,6 +90,7 @@ Key::operator= (Key const & other)
                return *this;
        }
 
+       _length = other._length;
        memcpy (_value, other._value, _length);
        return *this;
 }
@@ -102,9 +103,9 @@ Key::hex () const
        char* p = buffer;
        for (int i = 0; i < _length; ++i) {
 #ifdef LIBDCP_WINDOWS
-               __mingw_snprintf (p, 3, "%02hhx", buffer[i]);
+               __mingw_snprintf (p, 3, "%02hhx", _value[i]);
 #else
-               snprintf (p, 3, "%02hhx", buffer[i]);
+               snprintf (p, 3, "%02hhx", _value[i]);
 #endif
                p += 2;
        }
index 0464296f8f821011990449071d773480147c1d67..690799f3b92ddf5354f88c6d509e50966a105070 100644 (file)
--- a/src/key.h
+++ b/src/key.h
@@ -51,7 +51,7 @@ class Key
 {
 public:
        /** Create a new, random key */
-       Key (int length = ASDCP::KeyLen);
+       explicit Key (int length = ASDCP::KeyLen);
 
        /** Create a Key from a raw key value */
        explicit Key (uint8_t const *, int length = ASDCP::KeyLen);
@@ -60,10 +60,10 @@ public:
        explicit Key (std::string);
 
        Key (Key const &);
-       ~Key ();
-
        Key& operator= (Key const &);
 
+       ~Key ();
+
        /** @return Raw key value */
        uint8_t const * value () const {
                return _value;
diff --git a/test/key_test.cc b/test/key_test.cc
new file mode 100644 (file)
index 0000000..d0e95f8
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+    Copyright (C) 2019 Carl Hetherington <cth@carlh.net>
+
+    This file is part of libdcp.
+
+    libdcp is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    libdcp is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with libdcp.  If not, see <http://www.gnu.org/licenses/>.
+
+    In addition, as a special exception, the copyright holders give
+    permission to link the code of portions of this program with the
+    OpenSSL library under certain conditions as described in each
+    individual source file, and distribute linked combinations
+    including the two.
+
+    You must obey the GNU General Public License in all respects
+    for all of the code used other than OpenSSL.  If you modify
+    file(s) with this exception, you may extend this exception to your
+    version of the file(s), but you are not obligated to do so.  If you
+    do not wish to do so, delete this exception statement from your
+    version.  If you delete this exception statement from all source
+    files in the program, then also delete it here.
+*/
+
+#include "key.h"
+#include <boost/test/unit_test.hpp>
+#include <iostream>
+
+using std::string;
+
+BOOST_AUTO_TEST_CASE (key_hex_test)
+{
+       dcp::Key key (string("0123456789abcdef915a9157123ba218"));
+       BOOST_CHECK_EQUAL (key.hex(), "0123456789abcdef915a9157123ba218");
+       key = dcp::Key (string("af1a1b061389ddac62be8a19bbc52dff"));
+       BOOST_CHECK_EQUAL (key.hex(), "af1a1b061389ddac62be8a19bbc52dff");
+       key = dcp::Key (string("af1a1b061389ddac62be8a"));
+       BOOST_CHECK_EQUAL (key.hex(), "af1a1b061389ddac62be8a");
+}
index d5412b4d7997ba3d5217571756bf252945a7ab3a..5bfe5bb860491ecc17975844defbacebba974866 100644 (file)
@@ -83,6 +83,7 @@ def build(bld):
                  make_digest_test.cc
                  markers_test.cc
                  kdm_test.cc
+                 key_test.cc
                  raw_convert_test.cc
                  read_dcp_test.cc
                  read_interop_subtitle_test.cc