[svn] commit: r356 - in /branches/jinmei-dnsmessageapi/src/lib/dns/cpp: messagerenderer_unittest.cc unittest_util.cc unittest_util.h
BIND 10 source code commits
bind10-changes at lists.isc.org
Fri Dec 11 09:22:16 UTC 2009
Author: jinmei
Date: Fri Dec 11 09:22:16 2009
New Revision: 356
Log:
improved wire data comparison test by making failure messages more meaningful.
Modified:
branches/jinmei-dnsmessageapi/src/lib/dns/cpp/messagerenderer_unittest.cc
branches/jinmei-dnsmessageapi/src/lib/dns/cpp/unittest_util.cc
branches/jinmei-dnsmessageapi/src/lib/dns/cpp/unittest_util.h
Modified: branches/jinmei-dnsmessageapi/src/lib/dns/cpp/messagerenderer_unittest.cc
==============================================================================
--- branches/jinmei-dnsmessageapi/src/lib/dns/cpp/messagerenderer_unittest.cc (original)
+++ branches/jinmei-dnsmessageapi/src/lib/dns/cpp/messagerenderer_unittest.cc Fri Dec 11 09:22:16 2009
@@ -68,7 +68,7 @@
renderer.writeName(Name("a.example.com."));
renderer.writeName(Name("b.example.com."), false);
renderer.writeName(Name("b.example.com."));
- EXPECT_EQ(true, buffer.getLength() == data.size() &&
- memcmp(buffer.getData(), &data[0], data.size()) == 0);
+ EXPECT_PRED_FORMAT4(UnitTestUtil::matchWireData, buffer.getData(),
+ buffer.getLength(), &data[0], data.size());
}
}
Modified: branches/jinmei-dnsmessageapi/src/lib/dns/cpp/unittest_util.cc
==============================================================================
--- branches/jinmei-dnsmessageapi/src/lib/dns/cpp/unittest_util.cc (original)
+++ branches/jinmei-dnsmessageapi/src/lib/dns/cpp/unittest_util.cc Fri Dec 11 09:22:16 2009
@@ -20,6 +20,8 @@
#include <stdexcept>
#include <vector>
#include <string>
+
+#include <gtest/gtest.h>
#include "unittest_util.h"
@@ -72,3 +74,33 @@
}
} while (!iss.eof());
}
+
+::testing::AssertionResult
+UnitTestUtil::matchWireData(const char* dataexp1, const char* lenexp1,
+ const char* dataexp2, const char* lenexp2,
+ const void* data1, size_t len1,
+ const void* data2, size_t len2)
+{
+ ::testing::Message msg;
+ size_t cmplen = std::min(len1, len2);
+
+ for (int i = 0; i < cmplen; i++) {
+ uint8_t ch1 = static_cast<const uint8_t*>(data1)[i];
+ uint8_t ch2 = static_cast<const uint8_t*>(data2)[i];
+ if (ch1 != ch2) {
+ msg << "Wire data mismatch at " << i << "th byte\n"
+ << " Actual: " << std::dec <<
+ static_cast<int>(ch1) << "\n"
+ << "Expected: " << std::dec <<
+ static_cast<int>(ch2) << "\n";
+ return (::testing::AssertionFailure(msg));
+ }
+ }
+ if (len1 != len2) {
+ msg << "Wire data mismatch in length:\n"
+ << " Actual: " << len1 << "\n"
+ << "Expected: " << len2 << "\n";
+ return (::testing::AssertionFailure(msg));
+ }
+ return ::testing::AssertionSuccess();
+}
Modified: branches/jinmei-dnsmessageapi/src/lib/dns/cpp/unittest_util.h
==============================================================================
--- branches/jinmei-dnsmessageapi/src/lib/dns/cpp/unittest_util.h (original)
+++ branches/jinmei-dnsmessageapi/src/lib/dns/cpp/unittest_util.h Fri Dec 11 09:22:16 2009
@@ -20,6 +20,8 @@
#include <vector>
#include <string>
+#include <gtest/gtest.h>
+
namespace isc {
class UnitTestUtil {
@@ -36,6 +38,27 @@
///
static void readWireData(const std::string& datastr,
std::vector<unsigned char>& data);
+
+ ///
+ /// Compare len1 bytes of data1 with len2 bytes of data2 as binary data.
+ /// If they don't match report the point of mismatch in the google test
+ /// format. This method is expected to be used from the EXPECT_PRED_FORMAT4
+ /// macro of google test as follows:
+ /// \code EXPECT_PRED_FORMAT4(UnitTestUtil::matchWireData,
+ /// actual_data, actual_data_len,
+ /// expected_data, expected_data_len); \endcode
+ /// Parameters from dataexp1 to lenexp2 are passed via the macro but will
+ /// be ignored by this method.
+ /// Note: newer versions of google test supports the direct use of
+ /// AssertionResult with the EXPECT_TRUE macro, which would be more
+ /// intuitive, but to be as compatible as possible we use the more primitive
+ /// macro, i.e., EXPECT_PRED_FORMAT4.
+ ///
+ static ::testing::AssertionResult
+ matchWireData(const char* dataexp1, const char* lenexp1,
+ const char* dataexp2, const char* lenexp2,
+ const void* data1, size_t len1,
+ const void* data2, size_t len2);
};
}
More information about the bind10-changes
mailing list