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()); }
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()); }
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()); }
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()); }
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()); }
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 ); }
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 ); }
TEST(ResourcesTest, InitializedIsEmpty) { Resources r; EXPECT_EQ(0, r.size()); }