void Nfdc::ribRegisterPrefix() { m_name = m_commandLineArguments[0]; ControlParameters parameters; parameters .setName(m_name) .setCost(m_cost) .setFlags(m_flags) .setOrigin(m_origin); if (m_expires != DEFAULT_EXPIRATION_PERIOD) parameters.setExpirationPeriod(m_expires); if (!isValidUri(m_commandLineArguments[1])) { try { //So the uri is not valid, may be a faceId is provided. m_faceId = boost::lexical_cast<int>(m_commandLineArguments[1]); } catch (const std::exception& e) { std::cerr << "No valid faceUri or faceId is provided"<< std::endl; return; } parameters.setFaceId(m_faceId); ribRegisterPrefix(parameters); } else { ControlParameters faceParameters; faceParameters.setUri(m_commandLineArguments[1]); m_controller.start<FaceCreateCommand>(faceParameters, bind(&Nfdc::ribRegisterPrefix, this, _1), bind(&Nfdc::onError, this, _1, _2, "Face creation failed")); } }
void Nfdc::fibAddNextHop() { m_name = m_commandLineArguments[0]; ControlParameters parameters; parameters .setName(m_name) .setCost(m_cost); if (!isValidUri(m_commandLineArguments[1])) { try { //So the uri is not valid, may be a faceId is provided. m_faceId = boost::lexical_cast<int>(m_commandLineArguments[1]); } catch (const std::exception& e) { std::cerr << "No valid faceUri or faceId is provided"<< std::endl; return; } parameters.setFaceId(m_faceId); fibAddNextHop(parameters); } else { ControlParameters faceParameters; faceParameters.setUri(m_commandLineArguments[1]); m_controller.start<FaceCreateCommand>(faceParameters, bind(&Nfdc::fibAddNextHop, this, _1), bind(&Nfdc::onError, this, _1, _2, "Face creation failed")); } }
void FaceManager::onCreated(const Name& requestName, ControlParameters& parameters, const shared_ptr<Face>& newFace) { addCreatedFaceToForwarder(newFace); parameters.setFaceId(newFace->getId()); parameters.setUri(newFace->getRemoteUri().toString()); sendResponse(requestName, 200, "Success", parameters.wireEncode()); }
static ControlParameters makeCreateFaceResponse(const Face& face) { ControlParameters params = makeUpdateFaceResponse(face); params.setUri(face.getRemoteUri().toString()) .setLocalUri(face.getLocalUri().toString()); copyMtu(face, params); return params; }
BOOST_FIXTURE_TEST_CASE(OnCreated, AuthorizedCommandFixture<FaceFixture>) { ControlParameters parameters; parameters.setUri("tcp://127.0.0.1"); Block encodedParameters(parameters.wireEncode()); Name commandName("/localhost/nfd/faces"); commandName.append("create"); commandName.append(encodedParameters); shared_ptr<Interest> command(make_shared<Interest>(commandName)); generateCommand(*command); ControlParameters resultParameters; resultParameters.setUri("dummy://"); resultParameters.setFaceId(FACEID_RESERVED_MAX + 1); shared_ptr<DummyFace> dummy(make_shared<DummyFace>()); ndn::nfd::FaceEventNotification expectedFaceEvent; expectedFaceEvent.setKind(ndn::nfd::FACE_EVENT_CREATED) .setFaceId(FACEID_RESERVED_MAX + 1) .setRemoteUri(dummy->getRemoteUri().toString()) .setLocalUri(dummy->getLocalUri().toString()) .setFaceScope(ndn::nfd::FACE_SCOPE_NON_LOCAL) .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_PERSISTENT); Block encodedResultParameters(resultParameters.wireEncode()); getFace()->onReceiveData += [this, command, encodedResultParameters, expectedFaceEvent] (const Data& response) { this->callbackDispatch(response,command->getName(), 200, "Success", encodedResultParameters, expectedFaceEvent); }; onCreated(command->getName(), parameters, dummy); BOOST_REQUIRE(didCallbackFire()); BOOST_REQUIRE(didReceiveNotication()); }
void Nfdc::startFaceCreate(const ndn::util::FaceUri& canonicalUri) { ControlParameters parameters; parameters.setUri(canonicalUri.toString()); m_controller.start<FaceCreateCommand>(parameters, bind(&Nfdc::onSuccess, this, _1, "Face creation succeeded"), bind(&Nfdc::onError, this, _1, _2, "Face creation failed")); }
BOOST_FIXTURE_TEST_CASE(OnCreated, AuthorizedCommandFixture<FaceFixture>) { ControlParameters parameters; parameters.setUri("tcp://127.0.0.1"); Block encodedParameters(parameters.wireEncode()); Name commandName("/localhost/nfd/faces"); commandName.append("create"); commandName.append(encodedParameters); shared_ptr<Interest> command(make_shared<Interest>(commandName)); generateCommand(*command); ControlParameters resultParameters; resultParameters.setUri("tcp://127.0.0.1"); resultParameters.setFaceId(1); shared_ptr<DummyFace> dummy(make_shared<DummyFace>()); ndn::nfd::FaceEventNotification expectedFaceEvent; expectedFaceEvent.setKind(ndn::nfd::FACE_EVENT_CREATED) .setFaceId(1) .setRemoteUri(dummy->getRemoteUri().toString()) .setLocalUri(dummy->getLocalUri().toString()) .setFlags(0); Block encodedResultParameters(resultParameters.wireEncode()); getFace()->onReceiveData += bind(&FaceFixture::callbackDispatch, this, _1, command->getName(), 200, "Success", encodedResultParameters, expectedFaceEvent); onCreated(command->getName(), parameters, dummy); BOOST_REQUIRE(didCallbackFire()); BOOST_REQUIRE(didReceiveNotication()); }
void Nfdc::FaceIdFetcher::startFaceCreate(const ndn::util::FaceUri& canonicalUri) { ControlParameters parameters; parameters.setUri(canonicalUri.toString()); m_controller.start<FaceCreateCommand>(parameters, [this] (const ControlParameters& result) { succeed(result.getFaceId()); }, bind(&FaceIdFetcher::onFaceCreateError, this, _1, _2, "Face creation failed")); }
void Nfdc::faceCreate() { if (!isValidUri(m_commandLineArguments[0])) throw Error("invalid uri format"); ControlParameters parameters; parameters.setUri(m_commandLineArguments[0]); m_controller.start<FaceCreateCommand>(parameters, bind(&Nfdc::onSuccess, this, _1, "Face creation succeeded"), bind(&Nfdc::onError, this, _1, _2, "Face creation failed")); }
BOOST_FIXTURE_TEST_CASE(ValidatedFaceRequestDestroyFace, AuthorizedCommandFixture<ValidatedFaceRequestFixture>) { ControlParameters parameters; parameters.setUri("tcp://127.0.0.1"); Block encodedParameters(parameters.wireEncode()); Name commandName("/localhost/nfd/faces"); commandName.append("destroy"); commandName.append(encodedParameters); shared_ptr<Interest> command(make_shared<Interest>(commandName)); generateCommand(*command); onValidatedFaceRequest(command); BOOST_CHECK(didDestroyFaceFire()); }
BOOST_FIXTURE_TEST_CASE(CreateFaceBadUri, AuthorizedCommandFixture<FaceFixture>) { ControlParameters parameters; parameters.setUri("tcp:/127.0.0.1"); Block encodedParameters(parameters.wireEncode()); Name commandName("/localhost/nfd/faces"); commandName.append("create"); commandName.append(encodedParameters); shared_ptr<Interest> command(make_shared<Interest>(commandName)); generateCommand(*command); getFace()->onReceiveData += bind(&FaceFixture::validateControlResponse, this, _1, command->getName(), 400, "Malformed command"); createFace(*command, parameters); BOOST_REQUIRE(didCallbackFire()); }
BOOST_FIXTURE_TEST_CASE(OnConnectFailed, AuthorizedCommandFixture<FaceFixture>) { ControlParameters parameters; parameters.setUri("tcp://127.0.0.1"); Block encodedParameters(parameters.wireEncode()); Name commandName("/localhost/nfd/faces"); commandName.append("create"); commandName.append(encodedParameters); shared_ptr<Interest> command(make_shared<Interest>(commandName)); generateCommand(*command); getFace()->onReceiveData += bind(&FaceFixture::validateControlResponse, this, _1, command->getName(), 408, "unit-test-reason"); onConnectFailed(command->getName(), "unit-test-reason"); BOOST_REQUIRE(didCallbackFire()); BOOST_CHECK_EQUAL(didReceiveNotication(), false); }
BOOST_FIXTURE_TEST_CASE(CreateFaceUnknownScheme, AuthorizedCommandFixture<FaceFixture>) { ControlParameters parameters; // this will be an unsupported protocol because no factories have been // added to the face manager parameters.setUri("tcp://127.0.0.1"); Block encodedParameters(parameters.wireEncode()); Name commandName("/localhost/nfd/faces"); commandName.append("create"); commandName.append(encodedParameters); shared_ptr<Interest> command(make_shared<Interest>(commandName)); generateCommand(*command); getFace()->onReceiveData += bind(&FaceFixture::validateControlResponse, this, _1, command->getName(), 501, "Unsupported protocol"); createFace(*command, parameters); BOOST_REQUIRE(didCallbackFire()); }