]> WPIA git - cassiopeia.git/blobdiff - test/src/slipBioTest.cpp
add: Full CRL tranfer (non-chunked)
[cassiopeia.git] / test / src / slipBioTest.cpp
index a54637f3c52958e980c449f9afcdfc4611dcb512..d579eb383cba9caecae8810b8a9bd01c2ef1941d 100644 (file)
@@ -3,8 +3,12 @@
 
 #include <boost/test/unit_test.hpp>
 
-#include "bios.h"
-#include "slipBio.h"
+#include <openssl/ssl.h>
+#include <openssl/err.h>
+
+#include "io/bios.h"
+#include "io/opensslBIO.h"
+#include "io/slipBio.h"
 
 class OpensslBIOVector : public OpensslBIO {
 private:
@@ -103,6 +107,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>() );
+    ( ( SlipBIO* )slip1->ptr )->setTarget( std::shared_ptr<OpensslBIO>( new OpensslBIOWrapper( std::shared_ptr<BIO>( bio1, BIO_free ) ) ) );
+    BIO* slip2 = BIO_new( toBio<SlipBIO>() );
+    ( ( SlipBIO* )slip2->ptr )->setTarget( std::shared_ptr<OpensslBIO>( new OpensslBIOWrapper( std::shared_ptr<BIO>( 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()