]> granicus.if.org Git - pdns/commitdiff
test-dnsrecords: refactor handling (binary) strings
authorStefan Bühler <stbuehler@web.de>
Sat, 30 Dec 2017 15:34:50 +0000 (16:34 +0100)
committerStefan Bühler <stbuehler@web.de>
Thu, 4 Jan 2018 17:35:06 +0000 (18:35 +0100)
- also treat normal strings as "binary" (i.e. could contain '\0' bytes)
- assume all test inputs are given as string literals (char arrays with
  trailing '\0')

pdns/test-dnsrecords_cc.cc

index 484811a743368d36c42730cb37bae746dec27ac3..77a5add4026ff69864e5105455b34150054ad108 100644 (file)
@@ -17,7 +17,11 @@ namespace {
   };
 }
 
-#define _CASE_L(type, inval, zoneval, lineval, broken) case_t(type, std::string(inval), std::string(zoneval), std::string(lineval, sizeof(lineval)-1), broken)
+// use a user-defined literal operator instead? should be supported in
+// C++11, but only C++14 added the `s` suffix.
+#define BINARY(s) (std::string(s, sizeof(s) - 1))
+
+#define _CASE_L(type, inval, zoneval, lineval, broken) case_t(type, BINARY(inval), BINARY(zoneval), BINARY(lineval), broken)
 #define CASE_L(type, inval, zoneval, lineval) _CASE_L(type, inval, zoneval, lineval, broken_marker::WORKING)
 #define CASE_S(type, zoneval, lineval) _CASE_L(type, zoneval, zoneval, lineval, broken_marker::WORKING)
 #define BROKEN_CASE_L(type, inval, zoneval, lineval) _CASE_L(type, inval, zoneval, lineval, broken_marker::BROKEN)
@@ -251,10 +255,10 @@ BOOST_AUTO_TEST_CASE(test_record_types_bad_values) {
   typedef boost::tuple<const QType::typeenum, const std::string, case_type_t, broken_marker> case_t;
   typedef std::list<case_t> cases_t;
 
-#define ZONE_CASE(type, input) case_t(type, input, case_type_t::zone, broken_marker::WORKING)
-#define WIRE_CASE(type, input) case_t(type, std::string(input, sizeof(input) - 1), case_type_t::wire, broken_marker::WORKING)
-#define BROKEN_ZONE_CASE(type, input) case_t(type, input, case_type_t::zone, broken_marker::BROKEN)
-#define BROKEN_WIRE_CASE(type, input) case_t(type, std::string(input, sizeof(input) - 1), case_type_t::wire, broken_marker::BROKEN)
+#define ZONE_CASE(type, input) case_t(type, BINARY(input), case_type_t::zone, broken_marker::WORKING)
+#define WIRE_CASE(type, input) case_t(type, BINARY(input), case_type_t::wire, broken_marker::WORKING)
+#define BROKEN_ZONE_CASE(type, input) case_t(type, BINARY(input), case_type_t::zone, broken_marker::BROKEN)
+#define BROKEN_WIRE_CASE(type, input) case_t(type, BINARY(input), case_type_t::wire, broken_marker::BROKEN)
 
   const cases_t cases = boost::assign::list_of
      (ZONE_CASE(QType::A, "932.521.256.42")) // hollywood IP