On Wed, Oct 18, 2017 at 9:50 PM, Sam Lee <skyn...@gmail.com> wrote: > Thank you. > I didn't even post stacktrace and those were the exact errors!!
because I've gotten them before and I knew from your description what you were seeing, they are very specific to what psycopg2 is doing. > I'll take a look at test/engine/test_reconnect.py and probably test against > Pool directly. > What I'm testing is a bit silly cause I'm testing sqlalchemy behavior :P enjoy > > Thanks. > Sam > > > > On Tue, Oct 17, 2017 at 10:21 PM, Mike Bayer <mike...@zzzcomputing.com> > wrote: >> >> On Tue, Oct 17, 2017 at 4:58 PM, Sam Lee <skyn...@gmail.com> wrote: >> > Hi, >> > >> > I am passing a custom creator to sqlalchemy.create_engine(). >> > And, I want to simulate the following scenario in automated test without >> > using actual database connection: >> > >> > 1. Request a connection from pool: connects to DB. >> > 2. DB goes down. >> > 3. Request a connection from pool: connection is invalid. >> > 4. Request a connection from pool: connects to DB again. >> > >> > I'm trying the following testcase: >> > >> > def mycreator(): >> > print('called') >> > # return psycopg2.connect(....) >> > return unittest.mock.MagicMock() >> > >> > engine = create_engine('postgresql://', creator=mycreator, >> > pool_size=1) >> > c = engine.connect() # calls mycreator >> > c.close() # connection returned to pool >> > c = engine.connect() # does not call mycreator (reuses >> > connection >> > in pool) >> > c.invalidate() >> > c.close() >> > c = engine.connect() # calls mycreator (because connection is >> > invalidated) >> > >> > >> > But, it throws exception because MagicMock isn't cursor or connection. >> >> I'm assuming you are getting this error from psycopg2 itself. To >> use create_engine(), you'd need to mock whatever is being called that >> is not compatible, which here I am assuming are things like >> psycopg2.extensions.register_type, >> psycopg2.extras.register_default_json, and others. Patch these with >> mocks so that they have no effect. >> >> However, if your test is just looking for the behavior of the pool, >> then test against a QueuePool directly. >> >> The tests in test/engine/test_reconnect.py make extensive use of mocks >> to simulate disconnects though most of the create_engine() integration >> is done using real database connections with a patch to close out the >> DBAPI connection to simulate a disconnect. >> >> >> > What kind of mock or fake connection object should mycreator return in >> > the >> > test >> > so that above snippet will behave as I expect it to, calling mycreator >> > twice? >> > (Using actual connection, psycopg2.connect(), works as expected). >> > >> > Thanks. >> > Sam >> > >> > -- >> > SQLAlchemy - >> > The Python SQL Toolkit and Object Relational Mapper >> > >> > http://www.sqlalchemy.org/ >> > >> > To post example code, please provide an MCVE: Minimal, Complete, and >> > Verifiable Example. See http://stackoverflow.com/help/mcve for a full >> > description. >> > --- >> > You received this message because you are subscribed to the Google >> > Groups >> > "sqlalchemy" group. >> > To unsubscribe from this group and stop receiving emails from it, send >> > an >> > email to sqlalchemy+unsubscr...@googlegroups.com. >> > To post to this group, send email to sqlalchemy@googlegroups.com. >> > Visit this group at https://groups.google.com/group/sqlalchemy. >> > For more options, visit https://groups.google.com/d/optout. >> >> -- >> SQLAlchemy - >> The Python SQL Toolkit and Object Relational Mapper >> >> http://www.sqlalchemy.org/ >> >> To post example code, please provide an MCVE: Minimal, Complete, and >> Verifiable Example. See http://stackoverflow.com/help/mcve for a full >> description. >> --- >> You received this message because you are subscribed to a topic in the >> Google Groups "sqlalchemy" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/sqlalchemy/l7wMxoaNsXE/unsubscribe. >> To unsubscribe from this group and all its topics, send an email to >> sqlalchemy+unsubscr...@googlegroups.com. >> To post to this group, send email to sqlalchemy@googlegroups.com. >> Visit this group at https://groups.google.com/group/sqlalchemy. >> For more options, visit https://groups.google.com/d/optout. > > > -- > SQLAlchemy - > The Python SQL Toolkit and Object Relational Mapper > > http://www.sqlalchemy.org/ > > To post example code, please provide an MCVE: Minimal, Complete, and > Verifiable Example. See http://stackoverflow.com/help/mcve for a full > description. > --- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to sqlalchemy+unsubscr...@googlegroups.com. > To post to this group, send email to sqlalchemy@googlegroups.com. > Visit this group at https://groups.google.com/group/sqlalchemy. > For more options, visit https://groups.google.com/d/optout. -- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.