def main(): """Process agent data. Args: None Returns: None """ # Initialize key variables use_mysql = True global POOL global URL pool_timeout = 30 pool_recycle = min(10, pool_timeout - 10) # Get configuration config = Config() # Define SQLAlchemy parameters from configuration pool_size = config.db_pool_size() max_overflow = config.db_max_overflow() # Create DB connection pool if use_mysql is True: URL = ('mysql+pymysql://{}:{}@{}/{}?charset=utf8mb4'.format( config.db_username(), config.db_password(), config.db_hostname(), config.db_name())) # Fix for multiprocessing on pools. # _add_engine_pidguard(QueuePool) # Add MySQL to the pool db_engine = create_engine(URL, echo=False, echo_pool=False, encoding='utf8', poolclass=QueuePool, max_overflow=max_overflow, pool_size=pool_size, pool_pre_ping=True, pool_recycle=pool_recycle, pool_timeout=pool_timeout) # Fix for multiprocessing on engines. # _add_engine_pidguard(db_engine) # Ensure connections are disposed before sharing engine. db_engine.dispose() # Create database session object POOL = scoped_session( sessionmaker(autoflush=True, autocommit=False, bind=db_engine)) else: POOL = None
def _mysql(): """Create database tables. Args: None Returns: None """ # Initialize key variables config = Config() pool_size = config.db_pool_size() max_overflow = config.db_max_overflow() # Add MySQL to the pool engine = create_engine(URL, echo=True, encoding='utf8', max_overflow=max_overflow, pool_size=pool_size, pool_recycle=3600) # Try to create the database print('??: Attempting to Connect to configured database.') try: sql_string = ('''\ ALTER DATABASE {} CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci\ '''.format(config.db_name())) engine.execute(sql_string) except: log_message = ('''\ ERROR: Cannot connect to database "{}" on server "{}". Verify database server \ is started. Verify database is created. Verify that the configured database \ authentication is correct.'''.format(config.db_name(), config.db_hostname())) log.log2die(20086, log_message) # Apply schemas print('OK: Database connected.') print('??: Attempting to create database tables.') BASE.metadata.create_all(engine) print('OK: Database tables created.')
class TestConfiguration(unittest.TestCase): """Checks all functions and methods.""" ######################################################################### # General object setup ######################################################################### config = ConfigPattoo() def test___init__(self): """Testing method init.""" # Test pass def test_db_pool_size(self): """Testing method db_pool_size.""" # Initialize key values expected = 10 # Test result = self.config.db_pool_size() self.assertEqual(result, expected) def test_db_max_overflow(self): """Testing method db_max_overflow.""" # Initialize key values expected = 20 # Test result = self.config.db_max_overflow() self.assertEqual(result, expected) def test_db_hostname(self): """Testing method db_hostname.""" # Initialize key values expected = 'localhost' # Test result = self.config.db_hostname() self.assertEqual(result, expected) def test_db_username(self): """Testing method db_username.""" # Initialize key values expected = 'travis' # Test result = self.config.db_username() self.assertEqual(result, expected) def test_db_password(self): """Testing method db_password.""" # Initialize key values if 'PATTOO_TRAVIS' in os.environ: expected = '' else: expected = 'K2nJ8kFdthEbuwXE' # Test result = self.config.db_password() self.assertEqual(result, expected) def test_db_name(self): """Testing method db_name.""" # Initialize key values expected = 'pattoo_unittest' # Test result = self.config.db_name() self.assertEqual(result, expected) def test_daemon_directory(self): """Test pattoo_shared.Config inherited method daemon_directory.""" # Nothing should happen. Directory exists in testing. _ = self.config.daemon_directory() def test_log_directory(self): """Test pattoo_shared.Config inherited method log_directory.""" # Nothing should happen. Directory exists in testing. _ = self.config.log_directory() def test_log_file(self): """Test pattoo_shared.Config inherited method log_file.""" # Initialize key values expected = '{1}{0}pattoo.log'.format(os.sep, self.config.log_directory()) # Test result = self.config.log_file() self.assertEqual(result, expected) def test_log_file_api(self): """Test pattoo_shared.Config inherited method log_file_api.""" # Initialize key values expected = '{1}{0}pattoo-api.log'.format(os.sep, self.config.log_directory()) # Test result = self.config.log_file_api() self.assertEqual(result, expected) def test_log_level(self): """Test pattoo_shared.Config inherited method log_level.""" # Initialize key values expected = 'debug' # Test result = self.config.log_level() self.assertEqual(result, expected) def test_log_file_daemon(self): """Test pattoo_shared.Config inherited method log_file_daemon.""" # Initialize key values expected = '{1}{0}pattoo-daemon.log'.format( os.sep, self.config.log_directory()) # Test result = self.config.log_file_daemon() self.assertEqual(result, expected) def test_cache_directory(self): """Test pattoo_shared.Config inherited method cache_directory.""" # Nothing should happen. Directory exists in testing. _ = self.config.cache_directory() def test_agent_cache_directory(self): """Test pattoo_shared.Config inherited method agent_cache_directory.""" # Initialize key values agent_id = 123 expected = '{1}{0}{2}'.format(os.sep, self.config.cache_directory(), agent_id) # Test result = self.config.agent_cache_directory(agent_id) self.assertEqual(result, expected)