TEST_F(PBRPCURLTest, URLWithMultipleAddressesAndVolume) { // Build an URL to parse stringstream url_to_parse; ServerList::const_iterator servers_it = servers.begin(); for (; servers_it != servers.end(); ++servers_it) { if(servers_it != servers.begin()) { url_to_parse << ','; } url_to_parse << *servers_it; } url_to_parse << '/' << volume_name; // Parse URL and get addresses pbrpc_url_->ParseURL(url_to_parse.str(), default_scheme, default_port); ServiceAddresses addresses = pbrpc_url_->GetAddresses(); // Check expectations EXPECT_EQ(servers.size(), addresses.size()); EXPECT_EQ(volume_name, pbrpc_url_->volume()); EXPECT_EQ(default_scheme, pbrpc_url_->scheme()); servers_it = servers.begin(); stringstream expected_address; ServiceAddresses::Addresses services = addresses.GetAddresses(); for(ServiceAddresses::Addresses::iterator it = services.begin(); it != services.end(); ++it, ++servers_it) { expected_address.str(""); expected_address << *servers_it << ':' << default_port; EXPECT_EQ(expected_address.str(), *it); } }
ServiceAddresses PBRPCURL::GetAddresses() const { ServiceAddresses addresses; ostringstream host; assert(servers_.size() == ports_.size()); ServerList::const_iterator servers_it = servers_.begin(); PortList::const_iterator ports_it = ports_.begin(); for (; servers_it != servers_.end(); ++servers_it, ++ports_it) { host << *servers_it << ":" << *ports_it; addresses.Add(host.str()); host.str(""); } return addresses; }
void EntityInput::print(std::ostream& os) const { os << "EntityInput(" << "Services="; for( Services::const_iterator itr = fServices.begin(); itr != fServices.end(); ++itr ) { os << "[addresses="; ServiceAddresses addresses = itr->first; for( ServiceAddresses::const_iterator addrItr = addresses.begin(); addrItr != addresses.end(); ++addrItr ) { os << *addrItr << ","; } os << "id=" << itr->second << "]"; } os << ")"; }
static void AddAddresses(const ServiceAddresses& service_addresses, SimpleUUIDIterator* uuid_iterator) { ServiceAddresses::Addresses as_list = service_addresses.GetAddresses(); for (ServiceAddresses::Addresses::const_iterator iter = as_list.begin(); iter != as_list.end(); ++iter) { uuid_iterator->AddUUID(*iter); } }
void EntityInput::loadServices( EntityInput& input, string result ) { // TODO: LK: why is the service assignment so complicated? Why is it not only Address=Name? stringstream sstr(result); string setting; while( sstr >> setting ) { int pos = setting.find('='); if( pos <= 0 ) { // erase a possible service when no '=' is used ServiceAddress addr = boost::lexical_cast<ServiceAddress>(setting); #ifdef DEBUG Logger::debug3() << "EntityInput: erasing service " << addr << std::endl; #endif for( Services::iterator itr = input.fServices.begin(); itr != input.fServices.end(); ++itr ) { bool hasAddr = false; for( ServiceAddresses::iterator addrItr = itr->first.begin(); addrItr != itr->first.end(); ++addrItr ) { if(*addrItr == addr) { #ifdef DEBUG Logger::debug3() << "EntityInput: erasing ServiceAddress" << std::endl; #endif hasAddr = true; itr->first.erase(addrItr); break; } } if(hasAddr) { if(itr->first.size() == 0) { // erase the whole thing #ifdef DEBUG Logger::debug3() << "EntityInput: erasing ServiceAssignment" << std::endl; #endif input.fServices.erase(itr); } break; } } } else { #ifdef DEBUG Logger::debug3() << "EntityInput: adding service" << std::endl; #endif // add serviceaddr-servicename setting string addressStr = setting.substr(0,pos); ServiceName id = boost::lexical_cast<ServiceName>( setting.substr(pos+1,setting.size()) ); #ifdef DEBUG Logger::debug3() << "EntityInput: id: " << id << std::endl; #endif ServiceAddresses addresses; pos = addressStr.find(','); while(pos > 0) { ServiceAddress address = boost::lexical_cast<ServiceAddress>( addressStr.substr(0, pos)); addresses.push_back(address); addressStr = addressStr.substr(pos+1, addressStr.size()); pos = addressStr.find(','); } // add last address ServiceAddress address = boost::lexical_cast<ServiceAddress>( addressStr); addresses.push_back(address); #ifdef DEBUG Logger::debug3() << "EntityInput: addresses: " << std::endl; #endif for( ServiceAddresses::const_iterator itr = addresses.begin(); itr != addresses.end(); ++itr ) { #ifdef DEBUG Logger::debug3() << " " << *itr << std::endl; #endif } input.fServices.push_back(ServiceAssignment(addresses, id)); } } }