4 #include <boost/test/unit_test.hpp>
9 class OpensslBIOVector : public OpensslBIO {
11 std::vector<std::vector<char>>::iterator it, end;
12 std::vector<std::vector<char>> input;
15 std::vector<std::vector<char>> result = std::vector<std::vector<char>>();
16 OpensslBIOVector( std::vector<std::vector<char>> data ) {
22 int write( const char* buf, int num );
23 int read( char* buf, int size );
24 long ctrl( int cmod, long arg1, void* arg2 );
26 static const char* getName();
29 int OpensslBIOVector::write( const char* buf, int num ) {
30 result.push_back( std::vector<char>( buf, buf + num ) );
34 int OpensslBIOVector::read( char* buf, int size ) {
39 if( ( unsigned int ) size < it->size() ) {
40 throw "Error, to small buffer";
43 std::copy( it->begin(), it->end(), buf );
44 auto result = it->size();
49 long OpensslBIOVector::ctrl( int cmod, long arg1, void* arg2 ) {
56 const char* OpensslBIOVector::getName() {
60 BOOST_AUTO_TEST_SUITE( TestSLIPBioWrapper )
62 BOOST_AUTO_TEST_CASE( TestMockup ) {
63 std::vector<std::vector<char>> source = {{1, 2}, {1, 2, 3}, {1, 2, 3, 4}, {1, 2, 3, 4, 5}};
65 OpensslBIOVector* data = new OpensslBIOVector( source );
69 for( auto it = source.begin(); it != source.end(); it++ ) {
70 auto len = data->read( buf, sizeof( buf ) );
71 BOOST_CHECK_EQUAL( len, it->size() );
72 BOOST_CHECK_EQUAL_COLLECTIONS( buf, buf + len, it->begin(), it->end() );
73 BOOST_CHECK_EQUAL( data->write( buf, len ), len );
76 BOOST_CHECK_EQUAL( data->read( buf, sizeof( buf ) ), -1 );
78 for( unsigned int i = 0; i < source.size(); i++ ) {
79 BOOST_CHECK_EQUAL_COLLECTIONS( data->result[i].begin(), data->result[i].end(), source[i].begin(), source[i].end() );
85 BOOST_AUTO_TEST_CASE( TestSLIP ) {
86 std::vector<std::vector<char>> source = { {1, 2, 3, 4, 5, ( char ) 0xc0, 1, ( char ) 0xc0}, {1, 2}, {( char ) 0xc0}, {1, ( char ) 0xdb}, {( char ) 0xdc}, {( char ) 0xc0, ( char )0xdb}, {( char ) 0xdd, 2}, {( char ) 0xc0}};
87 std::shared_ptr<OpensslBIOVector> data = std::shared_ptr<OpensslBIOVector>( new OpensslBIOVector( source ) );
89 SlipBIO* slip = new SlipBIO( data );
90 int res = slip->read( buf, sizeof( buf ) );
91 BOOST_CHECK_EQUAL( res, 5 );
92 res = slip->read( buf, sizeof( buf ) );
93 BOOST_CHECK_EQUAL( res, 1 );
94 res = slip->read( buf, sizeof( buf ) );
95 BOOST_CHECK_EQUAL( res, 2 );
97 res = slip->read( buf, sizeof( buf ) );
98 BOOST_CHECK_EQUAL( res, 2 );
99 char res2[] = {1, ( char ) 0xc0};
100 BOOST_CHECK_EQUAL_COLLECTIONS( buf, buf + 2, res2, res2 + 2 );
102 res = slip->read( buf, sizeof( buf ) );
103 BOOST_CHECK_EQUAL( res, 2 );
104 char res3[] = {( char ) 0xdb, 2};
105 BOOST_CHECK_EQUAL_COLLECTIONS( buf, buf + 2, res3, res3 + 2 );
108 BOOST_AUTO_TEST_SUITE_END()