BOOST_FIXTURE_TEST_CASE( simple_value_can_be_written, simple_char ) { const bluetoe::details::attribute value_attribute = attribute_at< cccd_indices, 0, suuid, srv >( 1 ); std::uint8_t new_value[] = { 0x01, 0x02, 0x03, 0x04 }; auto write = bluetoe::details::attribute_access_arguments::write( new_value ); BOOST_REQUIRE( bluetoe::details::attribute_access_result::success == value_attribute.access( write, 1 ) ); std::uint8_t buffer[ 4 ]; auto read = bluetoe::details::attribute_access_arguments::read( buffer, 0 ); BOOST_REQUIRE( bluetoe::details::attribute_access_result::success == value_attribute.access( read, 1 ) ); static const std::uint8_t expected_value[] = { 0x01, 0x02, 0x03, 0x04 }; BOOST_CHECK_EQUAL_COLLECTIONS( std::begin( expected_value ), std::end( expected_value ), read.buffer, read.buffer + read.buffer_size ); }
BOOST_FIXTURE_TEST_CASE( char_value_returns_invalid_offset_when_read_behind_the_data, simple_char ) { const bluetoe::details::attribute value_attribute = attribute_at< cccd_indices, 0, suuid, srv >( 1 ); std::uint8_t buffer[ 100 ]; auto read = bluetoe::details::attribute_access_arguments::read( buffer, 5 ); BOOST_CHECK( bluetoe::details::attribute_access_result::invalid_offset == value_attribute.access( read, 1 ) ); }
BOOST_FIXTURE_TEST_CASE( simple_value_can_be_read_with_offset_equal_to_length, simple_char ) { const bluetoe::details::attribute value_attribute = attribute_at< cccd_indices, 0, suuid, srv >( 1 ); std::uint8_t buffer[ 100 ]; auto read = bluetoe::details::attribute_access_arguments::read( buffer, 4 ); BOOST_REQUIRE( bluetoe::details::attribute_access_result::success == value_attribute.access( read, 1 ) ); BOOST_CHECK_EQUAL( read.buffer_size, 0u ); }
BOOST_FIXTURE_TEST_CASE( simple_value_can_be_read_with_offset, simple_char ) { const bluetoe::details::attribute value_attribute = attribute_at< cccd_indices, 0, suuid, srv >( 1 ); std::uint8_t buffer[ 100 ]; auto read = bluetoe::details::attribute_access_arguments::read( buffer, 2 ); BOOST_REQUIRE( bluetoe::details::attribute_access_result::success == value_attribute.access( read, 1 ) ); static const std::uint8_t expected_value[] = { 0xbb, 0xaa }; BOOST_CHECK_EQUAL_COLLECTIONS( std::begin( expected_value ), std::end( expected_value ), read.buffer, read.buffer + read.buffer_size ); }
bluetoe::details::attribute_access_result read_characteristic_impl( const std::initializer_list< std::uint8_t >& input, const bluetoe::details::attribute& value_attribute, std::size_t offset = 0, std::size_t buffer_size = 100 ) { const std::vector< std::uint8_t > values( input ); std::uint8_t buffer[ 1000 ]; auto read = bluetoe::details::attribute_access_arguments::read( &buffer[ 0 ], &buffer[ buffer_size ], offset, this->client_configurations(), nullptr ); auto result = value_attribute.access( read, 1 ); BOOST_REQUIRE_EQUAL_COLLECTIONS( values.begin(), values.end(), &read.buffer[ 0 ], &read.buffer[ read.buffer_size ] ); return result; }
BOOST_FIXTURE_TEST_CASE( simple_const_value_can_not_be_writte, simple_const_char ) { const bluetoe::details::attribute value_attribute = attribute_at< cccd_indices, 0, suuid, srv >( 1 ); std::uint8_t new_value[] = { 0x01, 0x02, 0x03, 0x04 }; auto write = bluetoe::details::attribute_access_arguments::write( new_value ); BOOST_REQUIRE( bluetoe::details::attribute_access_result::write_not_permitted == value_attribute.access( write, 1 ) ); }