|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- ///////////////////////////////////////////////////////////////////////////////
- //
- // Copyright (C) 2010-2011 Artyom Beilis (Tonkikh) <artyomtnk@yahoo.com>
- //
- // Distributed under:
- //
- // the Boost Software License, Version 1.0.
- // (See accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt)
- //
- // or (at your opinion) under:
- //
- // The MIT License
- // (See accompanying file MIT.txt or a copy at
- // http://www.opensource.org/licenses/mit-license.php)
- //
- ///////////////////////////////////////////////////////////////////////////////
- #include <cppdb/driver_manager.h>
- #include <cppdb/conn_manager.h>
- #include "test.h"
- #include "dummy_driver.h"
-
- #if ( defined(WIN32) || defined(_WIN32) || defined(__WIN32) ) && !defined(__CYGWIN__)
- # ifndef NOMINMAX
- # define NOMINMAX
- # endif
- # include <windows.h>
- void sleep(int x)
- {
- Sleep(1000*x);
- }
- #else
- # include <stdlib.h>
- # include <unistd.h>
- #endif
-
- void test_driver_manager()
- {
- cppdb::ref_ptr<cppdb::backend::connection> c1,c2,c3,c4;
- cppdb::driver_manager &dm = cppdb::driver_manager::instance();
- std::cout << "Testing drivers collection" << std::endl;
- cppdb::connections_manager &cm = cppdb::connections_manager::instance();
- dm.install_driver("dummy",new dummy::loadable_driver());
- TEST(dummy::drivers==1);
- dm.collect_unused();
- TEST(dummy::drivers==0);
- dm.install_driver("dummy",new dummy::loadable_driver());
- c1=dm.connect("dummy:");
- TEST(dummy::connections==1);
- dm.collect_unused();
- TEST(dummy::drivers==1);
- TEST(dummy::connections==1);
- c2=dm.connect("dummy:");
- dm.collect_unused();
- TEST(dummy::connections==2);
- TEST(dummy::drivers==1);
- c1=0;
- TEST(dummy::connections==1);
- c2=0;
- TEST(dummy::connections==0);
- TEST(dummy::drivers==1);
- dm.collect_unused();
- TEST(dummy::drivers==0);
- THROWS(c1=dm.connect("dummy:"),cppdb::cppdb_error);
- std::cout << "Testing connection pooling" << std::endl;
- dm.install_driver("dummy",new dummy::loadable_driver());
- c1=cm.open("dummy:@pool_size=2;@pool_max_idle=2");
- TEST(dummy::connections==1);
- c2=cm.open("dummy:@pool_size=2;@pool_max_idle=2");
- TEST(dummy::connections==2);
- c3=cm.open("dummy:@pool_size=2;@pool_max_idle=2");
- TEST(dummy::connections==3);
- c1.reset();
- TEST(dummy::connections==3);
- c2.reset();
- TEST(dummy::connections==3);
- c3.reset();
- TEST(dummy::connections==2);
- c3=cm.open("dummy:@pool_size=2;@pool_max_idle=2");
- TEST(dummy::connections==2);
- TEST(dummy::drivers==1);
- cm.gc();
- dm.collect_unused();
- TEST(dummy::connections==2);
- TEST(dummy::drivers==1);
- TEST(dummy::connections==2);
- TEST(dummy::drivers==1);
- cm.gc();
- dm.collect_unused();
- TEST(dummy::connections==2);
- TEST(dummy::drivers==1);
- sleep(3);
- TEST(dummy::connections==2);
- TEST(dummy::drivers==1);
- cm.gc();
- dm.collect_unused();
- TEST(dummy::connections==1);
- TEST(dummy::drivers==1);
- c3.reset();
- TEST(dummy::connections==1);
- TEST(dummy::drivers==1);
- sleep(3);
- cm.gc();
- dm.collect_unused();
- TEST(dummy::connections==0);
- TEST(dummy::drivers==0);
- }
-
- void test_stmt_cache()
- {
- cppdb::ref_ptr<cppdb::backend::connection> c;
- cppdb::ref_ptr<cppdb::backend::statement> s1,s2,s3;
-
- cppdb::driver_manager &dm = cppdb::driver_manager::instance();
- dm.install_driver("dummy",new dummy::loadable_driver());
- c=dm.connect("dummy:@use_prepared=off");
- s1=c->prepare("test1");
- s2=c->prepare("test2");
- TEST(dummy::statements==2);
- s1.reset();
- TEST(dummy::statements==1);
- s2.reset();
- TEST(dummy::statements==0);
- c=dm.connect("dummy:@use_prepared=on;@stmt_cache_size=3");
- s1=c->prepare("test1");
- s1=c->prepare("test2");
- s1=c->prepare("test3");
- TEST(dummy::statements==3);
- s1=c->prepare("test4");
- TEST(dummy::statements==4);
- s1=c->prepare("test5");
- TEST(dummy::statements==4);
- s1.reset();
- s1=c->prepare("test3");
- TEST(dummy::statements==3);
- s1.reset();
- TEST(dummy::statements==3);
- c->clear_cache();
- TEST(dummy::statements==0);
- s1=c->prepare("test");
- s1.reset();
- s1=c->prepare("test");
- TEST(dummy::statements==1);
- s1=c->prepare("test1");
- TEST(dummy::statements==2);
- s2=c->prepare("test1");
- TEST(dummy::statements==3);
- s1.reset();
- s2.reset();
- TEST(dummy::statements==2);
-
- }
-
- int main()
- {
- try {
- test_driver_manager();
- }
- CATCH_BLOCK()
- try {
- test_stmt_cache();
- }
- CATCH_BLOCK()
- SUMMARY();
-
- }
|