diff --git a/tests_boost/test-encode-decode-block.cpp b/tests_boost/test-encode-decode-block.cpp
new file mode 100644
index 0000000..f14b83a
--- /dev/null
+++ b/tests_boost/test-encode-decode-block.cpp
@@ -0,0 +1,66 @@
+/**
+ * Copyright (C) 2013 Regents of the University of California.
+ * @author: Jeff Thompson <jefft0@remap.ucla.edu>
+ * See COPYING for copyright and distribution information.
+ */
+
+#include <boost/test/unit_test.hpp>
+
+#include <ndn-cpp-dev/interest.hpp>
+
+using namespace std;
+using namespace ndn;
+
+BOOST_AUTO_TEST_SUITE(TestBlock)
+
+const uint8_t Interest1[] = {
+  0x1,  0x41, // NDN Interest
+      0x3,  0x14, // Name
+          0x4,  0x5, // NameComponent
+              0x6c,  0x6f,  0x63,  0x61,  0x6c,
+          0x4,  0x3, // NameComponent
+              0x6e,  0x64,  0x6e,
+          0x4,  0x6, // NameComponent
+              0x70,  0x72,  0x65,  0x66,  0x69,  0x78,
+      0x5,  0x1f, // Selectors
+          0x09,  0x1,  0x1,  // MinSuffix
+          0x0a,  0x1,  0x1,  // MaxSuffix
+          0x0c,  0x14, // Exclude
+              0x4,  0x4, // NameComponent
+                  0x61,  0x6c,  0x65,  0x78,
+              0x4,  0x4, // NameComponent
+                  0x78,  0x78,  0x78,  0x78,
+              0xf,  0x0, // Any
+              0x4,  0x4, // NameComponent
+                  0x79,  0x79,  0x79,  0x79,
+          0x0d,  0x1, // ChildSelector
+              0x1,
+      0x6,  0x1, // Nonce
+          0x1,
+      0x7,  0x1, // Scope
+          0x1,
+      0x8,       // InterestLifetime
+          0x2,  0x3,  0xe8
+};
+
+BOOST_AUTO_TEST_CASE (Decode)
+{
+  boost::iostreams::stream<boost::iostreams::array_source> is (reinterpret_cast<const char *>(Interest1), sizeof(Interest1));
+  
+  Block interestBlock(is);
+
+  ndn::Interest i;
+  BOOST_REQUIRE_NO_THROW(i.wireDecode(interestBlock));
+
+  BOOST_REQUIRE_EQUAL(i.getName().toUri(), "/local/ndn/prefix");
+  BOOST_REQUIRE_EQUAL(i.getScope(), 1);
+  BOOST_REQUIRE_EQUAL(i.getInterestLifetime(), 1000);
+  BOOST_REQUIRE_EQUAL(i.getMinSuffixComponents(), 1);
+  BOOST_REQUIRE_EQUAL(i.getMaxSuffixComponents(), 1);
+  BOOST_REQUIRE_EQUAL(i.getChildSelector(), 1);
+  BOOST_REQUIRE_EQUAL(i.getMustBeFresh(), false);
+  BOOST_REQUIRE_EQUAL(i.getExclude().toUri(), "alex,xxxx,*,yyyy");
+  BOOST_REQUIRE_EQUAL(i.getNonce(), 1);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
