Ejemplo n.º 1
0
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);
  }
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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 << ")";
}
Ejemplo n.º 4
0
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);
  }
}
Ejemplo n.º 5
0
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));
         }
      }

}