X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=test%2Fsrc%2FslipBioTest.cpp;h=8f967de73f47733967b7c3373cee803f939267a1;hb=a477eeab986cf4307f74d1b4601cc46a7b0173c0;hp=a54637f3c52958e980c449f9afcdfc4611dcb512;hpb=2122cd29edf77845bdddd43fd03ebf3816cee4bf;p=cassiopeia.git diff --git a/test/src/slipBioTest.cpp b/test/src/slipBioTest.cpp index a54637f..8f967de 100644 --- a/test/src/slipBioTest.cpp +++ b/test/src/slipBioTest.cpp @@ -3,20 +3,21 @@ #include -#include "bios.h" -#include "slipBio.h" +#include +#include + +#include "io/bios.h" +#include "io/opensslBIO.h" +#include "io/slipBio.h" class OpensslBIOVector : public OpensslBIO { private: - std::vector>::iterator it, end; std::vector> input; + std::vector>::iterator it, end; public: std::vector> result = std::vector>(); - OpensslBIOVector( std::vector> data ) { - input = data; - it = input.begin(); - end = input.end(); + OpensslBIOVector( std::vector> data ) : input( data ), it( input.begin() ), end( input.end() ) { } int write( const char* buf, int num ); @@ -42,7 +43,7 @@ int OpensslBIOVector::read( char* buf, int size ) { std::copy( it->begin(), it->end(), buf ); auto result = it->size(); - it++; + ++it; return result; } @@ -103,6 +104,67 @@ BOOST_AUTO_TEST_CASE( TestSLIP ) { BOOST_CHECK_EQUAL( res, 2 ); char res3[] = {( char ) 0xdb, 2}; BOOST_CHECK_EQUAL_COLLECTIONS( buf, buf + 2, res3, res3 + 2 ); + delete slip; +} + +BOOST_AUTO_TEST_CASE( TestSSLThroughSLIP ) { + BIO* bio1, *bio2; + BOOST_REQUIRE_EQUAL( BIO_new_bio_pair( &bio1, 8096, &bio2, 8096 ), 1 ); + BIO* slip1 = BIO_new( toBio() ); + ( ( SlipBIO* )slip1->ptr )->setTarget( std::shared_ptr( new OpensslBIOWrapper( std::shared_ptr( bio1, BIO_free ) ) ) ); + BIO* slip2 = BIO_new( toBio() ); + ( ( SlipBIO* )slip2->ptr )->setTarget( std::shared_ptr( new OpensslBIOWrapper( std::shared_ptr( bio2, BIO_free ) ) ) ); + + auto meth = TLSv1_method(); + auto c_ctx = SSL_CTX_new( meth ); + auto s_ctx = SSL_CTX_new( meth ); + //SSL_CTX_set_cipher_list(c_ctx, "ALL"); + //SSL_CTX_set_cipher_list(s_ctx, "ALL"); + SSL_CTX_use_certificate_file( s_ctx, "testdata/server.crt", SSL_FILETYPE_PEM ); + SSL_CTX_use_PrivateKey_file( s_ctx, "testdata/server.key", SSL_FILETYPE_PEM ); + auto c_ssl = SSL_new( c_ctx ); + auto s_ssl = SSL_new( s_ctx ); + auto c_bio = BIO_new( BIO_f_ssl() ); + auto s_bio = BIO_new( BIO_f_ssl() ); + SSL_set_connect_state( c_ssl ); + SSL_set_bio( c_ssl, slip1, slip1 ); + BIO_set_ssl( c_bio, c_ssl, BIO_NOCLOSE ); + + SSL_set_accept_state( s_ssl ); + SSL_set_bio( s_ssl, slip2, slip2 ); + BIO_set_ssl( s_bio, s_ssl, BIO_NOCLOSE ); + + char data[] = {1, 2, 3, 4, 5}; + char data2[5]; + //ERR_load_SSL_strings(); + //ERR_load_crypto_strings(); + + int res = BIO_write( c_bio, data, 5 ); + BOOST_CHECK_EQUAL( res, -1 ); + res = BIO_read( s_bio, data2, sizeof( data2 ) ); + BOOST_CHECK_EQUAL( res, -1 ); + + res = BIO_write( c_bio, data, 5 ); + BOOST_CHECK_EQUAL( res, -1 ); + + res = BIO_read( s_bio, data2, sizeof( data2 ) ); + BOOST_CHECK_EQUAL( res, -1 ); + res = BIO_write( c_bio, data, 5 ); + BOOST_CHECK_EQUAL( res, 5 ); + res = BIO_read( s_bio, data2, sizeof( data2 ) ); + BOOST_CHECK_EQUAL( res, 5 ); + BOOST_CHECK_EQUAL_COLLECTIONS( data, data + 5, data2, data2 + 5 ); + + BIO_free( c_bio ); + BIO_free( s_bio ); + + BIO_free( slip1 ); + BIO_free( slip2 ); + SSL_free( c_ssl ); + SSL_free( s_ssl ); + + SSL_CTX_free( c_ctx ); + SSL_CTX_free( s_ctx ); } BOOST_AUTO_TEST_SUITE_END()