Example #1
0
TEST(ResourcesTest, ScalarAddition)
{
  Resource cpus1 = Resources::parse("cpus", "1");
  Resource mem1 = Resources::parse("mem", "5");

  Resource cpus2 = Resources::parse("cpus", "2");
  Resource mem2 = Resources::parse("mem", "10");

  Resources r1;
  r1 += cpus1;
  r1 += mem1;

  Resources r2;
  r2 += cpus2;
  r2 += mem2;

  Resources sum = r1 + r2;
  EXPECT_EQ(2, sum.size());
  EXPECT_EQ(3, sum.get("cpus", Resource::Scalar()).value());
  EXPECT_EQ(15, sum.get("mem", Resource::Scalar()).value());

  Resources r = r1;
  r += r2;
  EXPECT_EQ(2, r.size());
  EXPECT_EQ(3, r.get("cpus", Resource::Scalar()).value());
  EXPECT_EQ(15, r.get("mem", Resource::Scalar()).value());
}
Example #2
0
TEST(ResourcesTest, ScalarSubtraction)
{
  Resource cpus1 = Resources::parse("cpus", "50");
  Resource mem1 = Resources::parse("mem", "4096");

  Resource cpus2 = Resources::parse("cpus", "0.5");
  Resource mem2 = Resources::parse("mem", "1024");

  Resources r1;
  r1 += cpus1;
  r1 += mem1;

  Resources r2;
  r2 += cpus2;
  r2 += mem2;

  Resources diff = r1 - r2;
  EXPECT_EQ(2, diff.size());
  EXPECT_EQ(49.5, diff.get("cpus", Resource::Scalar()).value());
  EXPECT_EQ(3072, diff.get("mem", Resource::Scalar()).value());

  Resources r = r1;
  r -= r2;
  EXPECT_EQ(49.5, diff.get("cpus", Resource::Scalar()).value());
  EXPECT_EQ(3072, diff.get("mem", Resource::Scalar()).value());

  r = r1;
  r -= r1;
  EXPECT_EQ(0, r.allocatable().size());
}
Example #3
0
TEST(ResourcesTest, SetAddition)
{
  Resource disks1 = Resources::parse("disks", "{sda1,sda2,sda3}");
  Resource disks2 = Resources::parse("disks", "{sda1,sda2,sda3,sda4}");

  Resources r;
  r += disks1;
  r += disks2;

  EXPECT_EQ(1, r.size());

  const Resource::Set& set = r.get("disks", Resource::Set());

  EXPECT_EQ(4, set.item_size());
}
Example #4
0
TEST(ResourcesTest, RangesSubtraction)
{
  Resource ports1 = Resources::parse("ports", "[20000-40000]");
  Resource ports2 = Resources::parse("ports", "[10000-20000, 30000-50000]");

  Resources r;
  r += ports1;
  r -= ports2;

  EXPECT_EQ(1, r.size());

  const Resource::Ranges& ranges = r.get("ports", Resource::Ranges());

  EXPECT_EQ(1, ranges.range_size());
  EXPECT_EQ(20001, ranges.range(0).begin());
  EXPECT_EQ(29999, ranges.range(0).end());
}
Example #5
0
TEST(ResourcesTest, RangesAddition)
{
  Resource ports1 = Resources::parse("ports", "[20000-40000, 21000-38000]");
  Resource ports2 = Resources::parse("ports", "[30000-50000, 10000-20000]");

  Resources r;
  r += ports1;
  r += ports2;

  EXPECT_EQ(1, r.size());

  const Resource::Ranges& ranges = r.get("ports", Resource::Ranges());

  EXPECT_EQ(1, ranges.range_size());
  EXPECT_EQ(10000, ranges.range(0).begin());
  EXPECT_EQ(50000, ranges.range(0).end());
}
Example #6
0
Bytes JSONFormatter::compose( const Resources& values, const bool styled )
{
    auto json = json::object( );
    
    if ( values.size( ) == 1 )
    {
        json[ "data" ] = compose_object( values.front( ) );
    }
    else
    {
        auto objects = json::array( );
        
        for ( const auto& value : values )
        {
            objects.push_back( compose_object( value ) );
        }
        
        json[ "data" ] = objects;
    }
    
    return to_bytes( json, styled );
}
Example #7
0
void STLRepository::read( const shared_ptr< Query > query, const function< void ( const shared_ptr< Query > ) >& callback )
{
    Resources values;
    Resources resources;
    const auto keys = query->get_keys( );
    
    unique_lock< mutex> lock( m_resources_lock );
    
    if ( not keys.empty( ) )
    {
        for ( const auto& key : keys )
        {
            auto resource = find_if( m_resources.begin( ), m_resources.end( ), [ &key ]( const Resource & resource )
            {
                if ( resource.count( "key" ) == 0 )
                {
                    return false;
                }
                
                return String::lowercase( key ) == String::lowercase( String::to_string( resource.lower_bound( "key" )->second ) );
            } );
            
            if ( resource == m_resources.end( ) )
            {
                query->set_error_code( 40004 );
                return callback( query );
            }
            
            resources.push_back( *resource );
        }
    }
    else
    {
        resources = m_resources;
    }
    
    lock.unlock( );
    
    filter( resources, query->get_inclusive_filters( ), query->get_exclusive_filters( ) ); //just pass query
    
    const auto& index = query->get_index( );
    const auto& limit = query->get_limit( );
    
    if ( index < resources.size( ) and limit not_eq 0 )
    {
        auto start = resources.begin( );
        advance( start, index );
        
        while ( start not_eq resources.end( ) and limit not_eq values.size( ) )
        {
            values.push_back( *start );
            start++;
        }
    }
    
    include( query->get_include( ), values );
    
    auto results = fields( values, query );
    
    query->set_resultset( results );
    callback( query );
}
Example #8
0
TEST(ResourcesTest, InitializedIsEmpty)
{
  Resources r;
  EXPECT_EQ(0, r.size());
}