Browse Source

[2094] ported wire-data matching utility from libdns++ tests.

and made it more convenient and more consistent with other test syntax.
JINMEI Tatuya 12 years ago
parent
commit
69d4850566

+ 1 - 0
src/lib/util/unittests/Makefile.am

@@ -9,6 +9,7 @@ if HAVE_GTEST
 libutil_unittests_la_SOURCES += resource.h resource.cc
 libutil_unittests_la_SOURCES += run_all.h run_all.cc
 libutil_unittests_la_SOURCES += textdata.h
+libutil_unittests_la_SOURCES += wiredata.h wiredata.cc
 endif
 
 # For now, this isn't needed for libutil_unittests

+ 52 - 0
src/lib/util/unittests/wiredata.cc

@@ -0,0 +1,52 @@
+// Copyright (C) 2012  Internet Systems Consortium, Inc. ("ISC")
+//
+// Permission to use, copy, modify, and/or distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+// PERFORMANCE OF THIS SOFTWARE.
+
+#include "wiredata.h"
+
+#include <gtest/gtest.h>
+
+#include <algorithm>            // for std::min
+
+using namespace std;
+
+namespace isc {
+namespace util {
+namespace unittests {
+
+void
+matchWireData(const void* expected_data, size_t expected_len,
+              const void* actual_data, size_t actual_len)
+{
+    const size_t cmplen = std::min(expected_len, actual_len);
+
+    for (size_t i = 0; i < cmplen; ++i) {
+        const int ebyte = static_cast<const uint8_t*>(expected_data)[i];
+        const int abyte = static_cast<const uint8_t*>(actual_data)[i];
+        if (ebyte != abyte) {
+            FAIL() << "Wire data mismatch at " << i << "th byte\n"
+                   << "  Actual: " << ebyte << "\n"
+                   << "Expected: " << abyte << "\n";
+            return;
+        }
+    }
+    if (expected_len != actual_len) {
+        FAIL() << "Wire data mismatch in length:\n"
+               << "  Actual: " << actual_len << "\n"
+               << "Expected: " << expected_len << "\n";
+    }
+}
+
+} // unittests
+} // util
+} // isc

+ 45 - 0
src/lib/util/unittests/wiredata.h

@@ -0,0 +1,45 @@
+// Copyright (C) 2012  Internet Systems Consortium, Inc. ("ISC")
+//
+// Permission to use, copy, modify, and/or distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+// PERFORMANCE OF THIS SOFTWARE.
+
+#ifndef __UTIL_UNITTESTS_WIREDATA_H
+#define __UTIL_UNITTESTS_WIREDATA_H 1
+
+#include <cstddef>
+
+/// @file wiredata.h
+/// @short Utilities for tests with wire data.
+///
+/// This utility provides convenient helper functions for unit tests using
+/// wire (binary) data.
+
+namespace isc {
+namespace util {
+namespace unittests {
+
+/// \brief Compare two sets of binary data in a google test.
+///
+/// This method checks if the expected and actual data have the same length
+/// and all bytes are the same.  If not, it reports the point of mismatch in
+/// the google test format.
+void matchWireData(const void* expected_data, size_t expected_len,
+                   const void* actual_data, size_t actual_len);
+}
+}
+}
+
+#endif // __UTIL_UNITTESTS_WIREDATA_H
+
+// Local Variables:
+// mode: c++
+// End: