def setUp(self): super().setUp() os.environ["POSTGRES_DBNAME"] = "eventsourcing" os.environ["POSTGRES_HOST"] = "127.0.0.1" os.environ["POSTGRES_PORT"] = "5432" os.environ["POSTGRES_USER"] = "******" os.environ["POSTGRES_PASSWORD"] = "******" db = PostgresDatastore( os.getenv("POSTGRES_DBNAME"), os.getenv("POSTGRES_HOST"), os.getenv("POSTGRES_PORT"), os.getenv("POSTGRES_USER"), os.getenv("POSTGRES_PASSWORD"), ) drop_postgres_table(db, f"{BankAccounts.name.lower()}_events") drop_postgres_table(db, f"{EmailProcess.name.lower()}_events") drop_postgres_table(db, f"{EmailProcess.name.lower()}_tracking") drop_postgres_table(db, f"{EmailProcess.name.lower()}2_events") drop_postgres_table(db, f"{EmailProcess.name.lower()}2_tracking") drop_postgres_table(db, "brokenprocessing_events") drop_postgres_table(db, "brokenprocessing_tracking") drop_postgres_table(db, "brokenconverting_events") drop_postgres_table(db, "brokenconverting_tracking") drop_postgres_table(db, "brokenpulling_events") drop_postgres_table(db, "brokenpulling_tracking") drop_postgres_table(db, "commands_events") drop_postgres_table(db, "commands_tracking") drop_postgres_table(db, "results_events") drop_postgres_table(db, "results_tracking") os.environ["PERSISTENCE_MODULE"] = "eventsourcing.postgres"
def setUp(self) -> None: super().setUp() self.uris = tmpfile_uris() os.environ["INFRASTRUCTURE_FACTORY"] = "eventsourcing.postgres:Factory" os.environ["POSTGRES_DBNAME"] = "eventsourcing" os.environ["POSTGRES_HOST"] = "127.0.0.1" os.environ["POSTGRES_PORT"] = "5432" os.environ["POSTGRES_USER"] = "******" os.environ["POSTGRES_PASSWORD"] = "******" db = PostgresDatastore( os.getenv("POSTGRES_DBNAME"), os.getenv("POSTGRES_HOST"), os.getenv("POSTGRES_PORT"), os.getenv("POSTGRES_USER"), os.getenv("POSTGRES_PASSWORD"), ) drop_postgres_table(db, "worlds_events") del os.environ["INFRASTRUCTURE_FACTORY"] del os.environ["POSTGRES_DBNAME"] del os.environ["POSTGRES_HOST"] del os.environ["POSTGRES_PORT"] del os.environ["POSTGRES_USER"] del os.environ["POSTGRES_PASSWORD"]
def test_connection_of_transaction_not_used_as_context_manager_also_goes_idle( self): datastore = PostgresDatastore( dbname="eventsourcing", host="127.0.0.1", port="5432", user="******", password="******", ) # Get a transaction. transaction = datastore.transaction(commit=False) # Check connection is not idle. conn = transaction.c self.assertFalse(conn.is_idle.is_set()) # Delete the transaction context manager before entering. print( "Testing transaction not used as context manager, expecting exception..." ) del transaction # Check connection is idle after garbage collection. self.assertTrue(conn.is_idle.wait(timeout=0.1))
def setUp(self) -> None: self.datastore = PostgresDatastore( "eventsourcing", "127.0.0.1", "eventsourcing", "eventsourcing", ) drop_postgres_table(self.datastore, "stored_events")
def setUp(self) -> None: self.datastore = PostgresDatastore( "eventsourcing", "127.0.0.1", "5432", "eventsourcing", "eventsourcing", ) self.drop_table()
def drop_tables(self): datastore = PostgresDatastore( "eventsourcing", "127.0.0.1", "5432", "eventsourcing", "eventsourcing", ) drop_postgres_table(datastore, "testcase_events") drop_postgres_table(datastore, "testcase_tracking")
def test_connect_failure_raises_interface_error(self): datastore = PostgresDatastore( dbname="eventsourcing", host="127.0.0.1", port="9876543210", # bad port user="******", password="******", ) with self.assertRaises(InterfaceError): datastore.transaction(commit=True)
def setUp(self) -> None: super().setUp() self.uris = tmpfile_uris() db = PostgresDatastore( "eventsourcing", "127.0.0.1", "5432", "eventsourcing", "eventsourcing", ) drop_postgres_table(db, "universe_events")
def test_timer_closes_connection(self): datastore = PostgresDatastore( dbname="eventsourcing", host="127.0.0.1", port="5432", user="******", password="******", conn_max_age=0, ) # Check connection is closed after using transaction. transaction = datastore.transaction(commit=False) with transaction as conn: with conn.cursor() as c: c.execute("SELECT 1") self.assertEqual(c.fetchall(), [[1]]) self.assertTrue(transaction.c.is_closing.wait(timeout=0.5)) for _ in range(1000): if transaction.c.is_closed: break else: sleep(0.0001) else: self.fail("Connection is not closed") with self.assertRaises(psycopg2.InterfaceError) as cm: transaction.c.cursor() self.assertEqual(cm.exception.args[0], "connection already closed") # Check closed connection can be recreated and also closed. transaction = datastore.transaction(commit=False) with transaction as conn: with conn.cursor() as c: c.execute("SELECT 1") self.assertEqual(c.fetchall(), [[1]]) self.assertTrue(transaction.c.is_closing.wait(timeout=0.5)) for _ in range(1000): if transaction.c.is_closed: break else: sleep(0.0001) else: self.fail("Connection is not closed")
def setUp(self) -> None: super().setUp() self.uris = tmpfile_uris() os.environ["INFRASTRUCTURE_FACTORY"] = "eventsourcing.postgres:Factory" os.environ["CREATE_TABLE"] = "y" os.environ["POSTGRES_DBNAME"] = "eventsourcing" os.environ["POSTGRES_HOST"] = "127.0.0.1" os.environ["POSTGRES_USER"] = "******" os.environ["POSTGRES_PASSWORD"] = "******" db = PostgresDatastore( os.getenv("POSTGRES_DBNAME"), os.getenv("POSTGRES_HOST"), os.getenv("POSTGRES_USER"), os.getenv("POSTGRES_PASSWORD"), ) drop_postgres_table(db, "bankaccounts_events") drop_postgres_table(db, "bankaccounts_snapshots")
def tearDown(self) -> None: db = PostgresDatastore( os.getenv("POSTGRES_DBNAME"), os.getenv("POSTGRES_HOST"), os.getenv("POSTGRES_PORT"), os.getenv("POSTGRES_USER"), os.getenv("POSTGRES_PASSWORD"), ) drop_postgres_table(db, "bankaccounts_events") drop_postgres_table(db, "bankaccounts_snapshots") del os.environ["INFRASTRUCTURE_FACTORY"] del os.environ["CREATE_TABLE"] del os.environ["POSTGRES_DBNAME"] del os.environ["POSTGRES_HOST"] del os.environ["POSTGRES_PORT"] del os.environ["POSTGRES_USER"] del os.environ["POSTGRES_PASSWORD"] super().tearDown()
def test_close_connection(self): datastore = PostgresDatastore( dbname="eventsourcing", host="127.0.0.1", port="5432", user="******", password="******", ) # Try closing without first creating connection. datastore.close_connection() # Create a connection. with datastore.transaction(commit=False) as conn: with conn.cursor() as c: c.execute("SELECT 1") self.assertEqual(c.fetchall(), [[1]]) # Try closing after creating connection. datastore.close_connection()
def setUp(self): os.environ["POSTGRES_DBNAME"] = "eventsourcing" os.environ["POSTGRES_HOST"] = "127.0.0.1" os.environ["POSTGRES_USER"] = "******" os.environ["POSTGRES_PASSWORD"] = "******" db = PostgresDatastore( os.getenv("POSTGRES_DBNAME"), os.getenv("POSTGRES_HOST"), os.getenv("POSTGRES_USER"), os.getenv("POSTGRES_PASSWORD"), ) drop_postgres_table(db, "bankaccounts_events") drop_postgres_table(db, "emailnotifications_events") drop_postgres_table(db, "emailnotifications_tracking") drop_postgres_table(db, "brokenprocessing_events") drop_postgres_table(db, "brokenprocessing_tracking") os.environ["INFRASTRUCTURE_FACTORY"] = "eventsourcing.postgres:Factory"
def tearDown(self) -> None: db = PostgresDatastore( os.getenv("POSTGRES_DBNAME"), os.getenv("POSTGRES_HOST"), os.getenv("POSTGRES_PORT"), os.getenv("POSTGRES_USER"), os.getenv("POSTGRES_PASSWORD"), ) drop_postgres_table(db, "public.bankaccounts_events") drop_postgres_table(db, "public.bankaccounts_snapshots") del os.environ["PERSISTENCE_MODULE"] del os.environ["CREATE_TABLE"] del os.environ["POSTGRES_DBNAME"] del os.environ["POSTGRES_HOST"] del os.environ["POSTGRES_PORT"] del os.environ["POSTGRES_USER"] del os.environ["POSTGRES_PASSWORD"] del os.environ["POSTGRES_SCHEMA"] db.close() super().tearDown()
def setUp(self) -> None: super().setUp() os.environ["PERSISTENCE_MODULE"] = "eventsourcing.postgres" os.environ["CREATE_TABLE"] = "y" os.environ["POSTGRES_DBNAME"] = "eventsourcing" os.environ["POSTGRES_HOST"] = "127.0.0.1" os.environ["POSTGRES_PORT"] = "5432" os.environ["POSTGRES_USER"] = "******" os.environ["POSTGRES_PASSWORD"] = "******" os.environ["POSTGRES_SCHEMA"] = "public" db = PostgresDatastore( os.getenv("POSTGRES_DBNAME"), os.getenv("POSTGRES_HOST"), os.getenv("POSTGRES_PORT"), os.getenv("POSTGRES_USER"), os.getenv("POSTGRES_PASSWORD"), ) drop_postgres_table(db, "public.bankaccounts_events") drop_postgres_table(db, "public.bankaccounts_snapshots") db.close()
def test_transaction(self): datastore = PostgresDatastore( dbname="eventsourcing", host="127.0.0.1", port="5432", user="******", password="******", ) # Get a transaction. transaction = datastore.transaction(commit=False) # Check connection is not idle. self.assertFalse(transaction.c.is_idle.is_set()) # Check transaction gives database cursor when used as context manager. with transaction as conn: with conn.cursor() as c: c.execute("SELECT 1") self.assertEqual(c.fetchall(), [[1]]) # Check connection is idle after context manager has exited. self.assertTrue(transaction.c.is_idle.wait(timeout=0.1))
def test_pre_ping(self): datastore = PostgresDatastore( dbname="eventsourcing", host="127.0.0.1", port="5432", user="******", password="******", pre_ping=True, ) # Create a connection. transaction = datastore.transaction(commit=False) pg_conn = transaction.c.c self.assertEqual(pg_conn, transaction.c.c) # Check the connection works. with transaction as conn: with conn.cursor() as c: c.execute("SELECT 1") self.assertEqual(c.fetchall(), [[1]]) # Close all connections via separate connection. pg_close_all_connections() # Check the connection doesn't think it's closed. self.assertFalse(transaction.c.is_closed) # Check we can get a new connection that works. transaction = datastore.transaction(commit=False) with transaction as conn: with conn.cursor() as c: c.execute("SELECT 1") self.assertEqual(c.fetchall(), [[1]]) # Check it's actually a different connection. self.assertNotEqual(pg_conn, transaction.c.c) # Check this doesn't work if we don't use pre_ping. datastore = PostgresDatastore( dbname="eventsourcing", host="127.0.0.1", port="5432", user="******", password="******", pre_ping=False, ) # Create a connection. transaction = datastore.transaction(commit=False) pg_conn = transaction.c.c self.assertEqual(pg_conn, transaction.c.c) # Check the connection works. with transaction as conn: with conn.cursor() as c: c.execute("SELECT 1") self.assertEqual(c.fetchall(), [[1]]) # Close all connections via separate connection. pg_close_all_connections() # Check the connection doesn't think it's closed. self.assertFalse(transaction.c.is_closed) # Get a stale connection and check it doesn't work. transaction = datastore.transaction(commit=False) # Check it's the same connection. self.assertEqual(pg_conn, transaction.c.c) with self.assertRaises(InterfaceError): with transaction as conn: with conn.cursor() as c: c.execute("SELECT 1")