def test_client_has_empty_attributes(self): xml = """<?xml version="1.0" encoding="UTF-8"?> <config> <client ip='' /> </config> """ filename = _create_xml(xml) xml_root = config.parse_config(filename) with self.assertRaisesRegex(RuntimeError, 'Empty attribute .* for .*<client.*'): config.parse_clients(xml_root)
def test_valid_with_alerts(self): xml = """<?xml version="1.0" encoding="UTF-8"?> <config> <client ip='localhost' username='******' password='******' mail='*****@*****.**' platform='Linux'> <alert type="memory" limit="80%" /> <alert type="cpu" limit="50%" /> </client> <client ip='localhost' username='******' password='******' mail='*****@*****.**' platform='Windows'> <alert type="memory" limit="80%" /> <alert type="cpu" limit="50%" /> </client> </config> """ filename = _create_xml(xml) xml_root = config.parse_config(filename) clients = config.parse_clients(xml_root) self.assertEqual(2, len(clients)) self.assertEqual('Linux', clients[0]['platform']) self.assertEqual('Windows', clients[1]['platform']) self.assertEqual({'memory': 80, 'cpu': 50}, clients[0]['alerts'])
def test_no_clients_returns_empty_list(self): xml = """<?xml version="1.0" encoding="UTF-8"?> <config> </config> """ filename = _create_xml(xml) xml_root = config.parse_config(filename) clients = config.parse_clients(xml_root) self.assertEqual([], clients)
def test_invalid_alert_attributes(self): xml = """<?xml version="1.0" encoding="UTF-8"?> <config> <client ip='localhost' username='******' password='******' mail='*****@*****.**' platform='Linux'> <alert t="memory" limit="80%" /> </client> </config> """ filename = _create_xml(xml) xml_root = config.parse_config(filename) with self.assertRaisesRegex( RuntimeError, 'Invalid type or limit attributes for .*<alert.*'): config.parse_clients(xml_root)
def test_valid_without_alerts(self): xml = """<?xml version="1.0" encoding="UTF-8"?> <config> <client ip='localhost' username='******' password='******' mail='*****@*****.**' platform='Linux' /> </config> """ filename = _create_xml(xml) xml_root = config.parse_config(filename) clients = config.parse_clients(xml_root) self.assertEqual(1, len(clients)) self.assertEqual('localhost', clients[0]['ip']) # port defaults to 22 self.assertEqual(22, clients[0]['port']) self.assertEqual('atodorov', clients[0]['username']) self.assertEqual('example', clients[0]['password']) self.assertEqual('*****@*****.**', clients[0]['mail']) self.assertEqual({}, clients[0]['alerts'])
response = _out.read().strip().decode('utf8') ssh.close() return json.loads(response) if __name__ == "__main__": if len(sys.argv) != 2: print('USAGE: server.py path/to/config.xml') sys.exit(1) # parse the XML configuration config_xml = config.parse_config(sys.argv[1]) clients = config.parse_clients(config_xml) smtp_cfg = config.parse_smtp(config_xml) # connect to the DB db = orm.connect(config.parse_db(config_xml)) ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) for client in clients: system = db.query(orm.System).filter_by(name=client['ip']).first() if not system: system = orm.System(name=client['ip']) db.add(system) db.commit()