diff --git a/tests/management/test-nfd-control.cpp b/tests/management/test-nfd-control.cpp
index 79b4d39..2e53512 100644
--- a/tests/management/test-nfd-control.cpp
+++ b/tests/management/test-nfd-control.cpp
@@ -24,9 +24,13 @@
                                          0x66, 0x6f, 0x75, 0x6e, 0x64};
 
 const uint8_t TestFibManagementOptions[] = {
-  0x68, 0x1e, 0x07, 0x16, 0x08, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68,
+  0x68, 0x49, 0x07, 0x16, 0x08, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68,
   0x6f, 0x73, 0x74, 0x08, 0x03, 0x72, 0x65, 0x67, 0x08, 0x04, 0x74, 0x65,
-  0x73, 0x74, 0x69, 0x01, 0x00, 0x6a, 0x01, 0x01
+  0x73, 0x74, 0x69, 0x01, 0x00, 0x6a, 0x01, 0x01, 0x6b, 0x29, 0x07, 0x27,
+  0x08, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x08,
+  0x03, 0x6e, 0x66, 0x64, 0x08, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65,
+  0x67, 0x79, 0x08, 0x0b, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x2d, 0x77, 0x6f,
+  0x72, 0x6c, 0x64
 };
 
 const uint8_t TestFaceManagementOptions[] = {
@@ -37,7 +41,7 @@
 
 // ControlResponse
 
-BOOST_AUTO_TEST_CASE (ControlResponseEncode)
+BOOST_AUTO_TEST_CASE(ControlResponseEncode)
 {
   ControlResponse controlResponse(404, "Nothing not found");
   const Block &wire = controlResponse.wireEncode();
@@ -46,10 +50,10 @@
                                   wire.begin(), wire.end());
 }
 
-BOOST_AUTO_TEST_CASE (ControlResponseDecode)
+BOOST_AUTO_TEST_CASE(ControlResponseDecode)
 {
   ControlResponse controlResponse;
-  
+
   BOOST_REQUIRE_NO_THROW(controlResponse.wireDecode(Block(TestControlResponse, sizeof(TestControlResponse))));
 
   BOOST_REQUIRE_EQUAL(controlResponse.getCode(), 404);
@@ -58,84 +62,87 @@
 
 // FibManagementOptions
 
-BOOST_AUTO_TEST_CASE (FibManagementOptionsEncoding)
+BOOST_AUTO_TEST_CASE(FibManagementOptionsEncoding)
 {
-  Name n ("/localhost/reg/test");
+  Name n("/localhost/reg/test");
   FibManagementOptions opt;
 
-  opt.setName (n);
-  opt.setFaceId (0);
-  opt.setCost (1);
+  opt.setName(n);
+  opt.setFaceId(0);
+  opt.setCost(1);
+  opt.setStrategy("/localhost/nfd/strategy/hello-world");
 
-  const Block& blk = opt.wireEncode ();
+  const Block& blk = opt.wireEncode();
 
-  BOOST_REQUIRE_EQUAL_COLLECTIONS (TestFibManagementOptions,
-                                   TestFibManagementOptions + sizeof (TestFibManagementOptions),
-                                   blk.begin (), blk.end ());
+  BOOST_REQUIRE_EQUAL_COLLECTIONS(TestFibManagementOptions,
+                                  TestFibManagementOptions + sizeof(TestFibManagementOptions),
+                                  blk.begin(), blk.end());
 }
 
-BOOST_AUTO_TEST_CASE (FibManagementOptionsFastEncoding)
+BOOST_AUTO_TEST_CASE(FibManagementOptionsFastEncoding)
 {
-  Name n ("/localhost/reg/test");
+  Name n("/localhost/reg/test");
   FibManagementOptions opt;
 
-  opt.setName (n);
-  opt.setFaceId (0);
-  opt.setCost (1);
+  opt.setName(n);
+  opt.setFaceId(0);
+  opt.setCost(1);
+  opt.setStrategy("/localhost/nfd/strategy/hello-world");
 
   EncodingBuffer blk;
 
-  BOOST_REQUIRE_NO_THROW (opt.wireEncode (blk));
+  BOOST_REQUIRE_NO_THROW(opt.wireEncode(blk));
 
-  BOOST_REQUIRE_EQUAL_COLLECTIONS (TestFibManagementOptions,
-                                   TestFibManagementOptions + sizeof (TestFibManagementOptions),
-                                   blk.begin (), blk.end ());
+  BOOST_REQUIRE_EQUAL_COLLECTIONS(TestFibManagementOptions,
+                                  TestFibManagementOptions + sizeof(TestFibManagementOptions),
+                                  blk.begin(), blk.end());
 
-  EncodingBuffer blk2 (4);
+  EncodingBuffer blk2(4);
 
-  BOOST_REQUIRE_NO_THROW (opt.wireEncode (blk2));
+  BOOST_REQUIRE_NO_THROW(opt.wireEncode(blk2));
 
-  BOOST_REQUIRE_EQUAL_COLLECTIONS (TestFibManagementOptions,
-                                   TestFibManagementOptions + sizeof (TestFibManagementOptions),
-                                   blk2.begin (), blk2.end ());
+  BOOST_REQUIRE_EQUAL_COLLECTIONS(TestFibManagementOptions,
+                                  TestFibManagementOptions + sizeof(TestFibManagementOptions),
+                                  blk2.begin(), blk2.end());
 }
 
-BOOST_AUTO_TEST_CASE (FibManagementOptionsDecoding)
+BOOST_AUTO_TEST_CASE(FibManagementOptionsDecoding)
 {
-  Block blk (TestFibManagementOptions, sizeof (TestFibManagementOptions));
-  Name n ("/localhost/reg/test");
+  Block blk(TestFibManagementOptions, sizeof(TestFibManagementOptions));
+  Name n("/localhost/reg/test");
   FibManagementOptions opt;
 
-  BOOST_REQUIRE_NO_THROW (opt.wireDecode (blk));
-  
-  BOOST_CHECK_EQUAL (opt.getName (), n);
-  BOOST_CHECK_EQUAL (opt.getFaceId (), 0);
-  BOOST_CHECK_EQUAL (opt.getCost (), 1);
+  BOOST_REQUIRE_NO_THROW(opt.wireDecode(blk));
+
+  BOOST_CHECK_EQUAL(opt.getName(), n);
+  BOOST_CHECK_EQUAL(opt.getFaceId(), 0);
+  BOOST_CHECK_EQUAL(opt.getCost(), 1);
+  BOOST_CHECK_EQUAL(opt.getStrategy().toUri(), "/localhost/nfd/strategy/hello-world");
 }
 
-BOOST_AUTO_TEST_CASE (FaceManagementOptionsFastEncoding)
+BOOST_AUTO_TEST_CASE(FaceManagementOptionsFastEncoding)
 {
   FaceManagementOptions opt;
 
-  opt.setFaceId (10);
-  opt.setUri ("tcp://1.1.1.1/hello/world");
+  opt.setFaceId(10);
+  opt.setUri("tcp://1.1.1.1/hello/world");
 
-  BOOST_REQUIRE_NO_THROW (opt.wireEncode ());
+  BOOST_REQUIRE_NO_THROW(opt.wireEncode ());
 
-  BOOST_REQUIRE_EQUAL_COLLECTIONS (TestFaceManagementOptions,
-                                   TestFaceManagementOptions + sizeof (TestFibManagementOptions),
-                                   opt.wireEncode ().begin (), opt.wireEncode ().end ());
+  BOOST_REQUIRE_EQUAL_COLLECTIONS(TestFaceManagementOptions,
+                                  TestFaceManagementOptions + sizeof(TestFaceManagementOptions),
+                                  opt.wireEncode().begin(), opt.wireEncode().end());
 }
 
-BOOST_AUTO_TEST_CASE (FaceManagementOptionsDecoding)
+BOOST_AUTO_TEST_CASE(FaceManagementOptionsDecoding)
 {
-  Block blk (TestFaceManagementOptions, sizeof (TestFaceManagementOptions));
+  Block blk(TestFaceManagementOptions, sizeof(TestFaceManagementOptions));
   FaceManagementOptions opt;
 
-  BOOST_REQUIRE_NO_THROW (opt.wireDecode (blk));
-  
-  BOOST_CHECK_EQUAL (opt.getFaceId(), 10);
-  BOOST_CHECK_EQUAL (opt.getUri(), "tcp://1.1.1.1/hello/world");
+  BOOST_REQUIRE_NO_THROW(opt.wireDecode (blk));
+
+  BOOST_CHECK_EQUAL(opt.getFaceId(), 10);
+  BOOST_CHECK_EQUAL(opt.getUri(), "tcp://1.1.1.1/hello/world");
 }
 
 BOOST_AUTO_TEST_SUITE_END()
