def test_500_code_run_script_during_add_tasks(self): """ - add tasks Expected: selenium log was saved and endpoint was deleted """ from vmpool.artifact_collector import ArtifactCollector with patch("core.network.Network", Mock()), patch("core.connection.Virsh", Mock()), patch('core.db.Database', DatabaseMock()): from core.sessions import Session session = Session(dc={'platform': 'test_origin_1'}) session.id = 1 endpoint = Mock(ip='127.0.0.1', name='test_endpoint', delete=Mock()) session.endpoint = endpoint self.app.database.get_session = Mock(return_value=session) vmpool = Mock(get_by_name=Mock(return_value=endpoint)) vmpool.app = self.app self.app.pool = vmpool art_collector = ArtifactCollector(vmpool) in_queue = art_collector.add_tasks( session.id, {'selenium_server': '/var/log/selenium_server.log'}) self.assertTrue(in_queue) self.assertTrue(wait_for(lambda: not session.selenium_log)) self.assertTrue(wait_for(lambda: len(art_collector.get_queue()) == 0)) self.assertTrue(wait_for(lambda: session.endpoint.delete.called)) art_collector.stop()
def test_req_closed_when_platform_queued(self): """ - wait until platform is queued - check queue state - drop request while platform is queued Expected: platform no more in queue """ with patch('flask.current_app.pool.has', Mock(return_value=False)), patch( 'flask.current_app.pool.can_produce', Mock(return_value=True)): q = self.vmmaster.app.sessions.active_sessions def wait_for_platform_in_queue(): wait_for(lambda: q, timeout=2) self.assertEqual(len(q), 1) self.assertEqual( self.vmmaster.app.sessions.active()[0].dc, json.dumps(self.desired_caps["desiredCapabilities"])) request_with_drop(self.address, self.desired_caps, wait_for_platform_in_queue) wait_for(lambda: not q, timeout=2) self.assertEqual(len(q), 0)
def wait_for_platform_in_queue(): wait_for(lambda: q, timeout=2) self.assertEqual(len(q), 1) self.assertEqual( self.vmmaster.app.sessions.active()[0].dc, json.dumps(self.desired_caps["desiredCapabilities"]))
def test_req_closed_when_vm_is_spawning(self): """ - waiting for clone spawning to begin - drop request while vm is spawning Expected: queue is empty, vm spawned and then deleted """ vm_mock = Mock() vm_mock.delete = Mock() def just_sleep(*args, **kwargs): time.sleep(2) return vm_mock with patch('flask.current_app.pool.has', Mock(return_value=False)), patch( 'flask.current_app.pool.can_produce', Mock(return_value=True)), patch( 'vmpool.platforms.KVMOrigin.make_clone', Mock(side_effect=just_sleep)) as make_clone: q = self.vmmaster.app.sessions.active_sessions def wait_for_vm_start_tp_spawn(): wait_for(lambda: make_clone.called, timeout=2) self.assertTrue(make_clone.called) self.assertEqual(len(q), 1) request_with_drop(self.address, self.desired_caps, wait_for_vm_start_tp_spawn) wait_for(lambda: not q, timeout=2) self.assertEqual(len(q), 0) wait_for(lambda: vm_mock.delete.called) vm_mock.delete.assert_any_call()
def test_exception_during_creation_vm(self): """ - call OpenstackClone.create() - get_vm() return None Expected: vm has been deleted """ self.app.pool.add(self.platform) wait_for(lambda: self.app.pool.count() == 0) self.assertEqual(self.app.pool.count(), 0)
def test_exception_in_wait_for_activated_service_and_rebuild_failed(self): """ - call OpenstackClone.create() - get_vm() is None - call delete() Expected: vm has been deleted """ self.app.pool.add(self.platform) wait_for(lambda: self.app.pool.count() == 0) self.assertEqual(self.app.pool.count(), 0)
def test_ping_success(self): """ - call OpenstackClone.create() - ping success Expected: vm has been created """ self.app.pool.add(self.platform) wait_for(lambda: self.app.pool.using[0].ready is True) self.assertEqual(self.app.pool.count(), 1) self.assertTrue(self.app.pool.using[0].ready)
def test_rebuild_preload_vm_with_wait_activate_service(self): """ - call OpenstackClone.create() - call OpenstackClone.rebuild() Expected: vm has been rebuilded and added in pool """ self.app.pool.preload(self.platform, prefix='preloaded') wait_for(lambda: self.app.pool.pool[0].ready is True) self.app.pool.pool[0].rebuild() wait_for(lambda: self.app.pool.pool[0].ready is True) self.assertEqual(self.app.pool.count(), 1) self.assertTrue(self.app.pool.pool[0].ready)
def test_exception_in_wait_for_activated_service_and_ping_success(self): """ - call OpenstackClone.create() - get_vm() return Mock and is_active is True - ping success Expected: vm has been created """ self.app.pool.add(self.platform) wait_for(lambda: self.app.pool.using[0].ready is True) self.assertEqual(self.app.pool.count(), 1) self.assertTrue(self.app.pool.using[0].ready)
def test_create_vm_with_get_ip(self): """ - call OpenstackClone.create() - check_vm_exist is True - ping successful - is_created is True - get_ip return mocked ip address and mac Expected: vm has been created """ self.app.pool.add(self.platform) wait_for(lambda: self.app.pool.using[0].ready is True) self.assertEqual(self.app.pool.using[0].ip, '127.0.0.1') self.assertEqual(self.app.pool.count(), 1)
def test_run_recorder(self): """ - call session.run() - call session.delete() Expected: vnc_recorder was started and stopped """ endpoint = Mock(ip='127.0.0.1', name='test_endpoint') dc = {'takeScreencast': True, 'platform': 'test_origin_1'} with patch('core.db.models.Session', Mock()), patch("core.network.Network", Mock()), patch( "core.connection.Virsh", Mock()), patch('core.db.Database', DatabaseMock()): from core.sessions import Session self.session = Session(dc=dc) self.session.name = "session1" with patch('core.video.VNCVideoHelper._flvrec', Mock()), patch('core.video.VNCVideoHelper._flv2webm', Mock()): self.session.run(endpoint=endpoint) self.assertTrue( isinstance(self.session.vnc_helper.recorder, Process)) self.session.close() self.assertTrue( wait_for(lambda: not self.session.vnc_helper.recorder. is_alive()))
def test_rebuild_vm_if_vm_does_not_exist(self): """ - call OpenstackClone.create() - call OpenstackClone.rebuild() Expected: vm has been deleted """ with patch('core.utils.openstack_utils.nova_client') as nova: nova.return_value = Mock(servers=Mock(find=Mock(return_value=Mock( delete=Mock(), rebuild=Mock(side_effect=Exception('Rebuild error')))))) self.app.pool.add(self.platform) wait_for(lambda: self.app.pool.using[0].ready is True) self.app.pool.using[0].rebuild() self.assertEqual(self.app.pool.count(), 0)
def test_rebuild_preload_vm_with_wait_activate_service(self): """ - call OpenstackClone.create() - call OpenstackClone.rebuild() Expected: vm has been rebuilded and added in pool """ with patch('core.utils.openstack_utils.nova_client') as nova: nova.return_value = Mock(servers=Mock(find=Mock( return_value=Mock(delete=Mock(), rebuild=Mock())))) self.app.pool.preload(self.platform, prefix='preloaded') wait_for(lambda: self.app.pool.pool[0].ready is True) self.app.pool.pool[0].rebuild() wait_for(lambda: self.app.pool.pool[0].ready is True) self.assertEqual(self.app.pool.count(), 1) self.assertTrue(self.app.pool.pool[0].ready)
def test_exception_in_wait_for_activated_service_and_rebuild_failed(self): """ - call OpenstackClone.create() - exception in _wait_for_activated_service - vm_has_created is False - call rebuild() and raise Exception in rebuild() Expected: vm has been deleted """ with patch('core.utils.openstack_utils.nova_client') as nova: nova.return_value = Mock(servers=Mock( find=Mock(side_effect=Exception( 'Exception in _wait_for_activated_service')))) self.app.pool.add(self.platform) wait_for(lambda: self.app.pool.count() == 0) self.assertEqual(self.app.pool.count(), 0)
def test_exception_in_wait_for_activated_service_and_ping_success(self): """ - call OpenstackClone.create() - exception in _wait_for_activated_service - vm_has_created is True - ping success Expected: vm has been created """ with patch('core.utils.openstack_utils.nova_client') as nova: nova.return_value = Mock( servers=Mock( find=Mock(side_effect=Exception( 'Exception in _wait_for_activated_service')))) self.app.pool.add(self.platform) wait_for(lambda: self.app.pool.using[0].ready is True) self.assertEqual(self.app.pool.count(), 1) self.assertTrue(self.app.pool.using[0].ready)
def test_exception_in_get_ip(self, ): """ - call OpenstackClone.create() - check_vm_exist is True - exception in Openstack.get_ip() - exception in OpenstackClone.rebuild() Expected: vm has been deleted """ with patch('core.utils.openstack_utils.nova_client') as nova,\ patch('vmpool.clone.OpenstackClone.ping_vm') as ping_mock: nova.return_value = Mock(servers=Mock(find=Mock(return_value=Mock( addresses=Mock(get=Mock( side_effect=Exception('Error get addresses'))), rebuild=Mock(side_effect=Exception('Rebuild exception')))))) ping_mock.side_effect = False self.app.pool.add(self.platform) wait_for(lambda: self.app.pool.count() > 0) self.assertEqual(self.app.pool.count(), 1)
def test_add_tasks(self): """ - add tasks Expected: selenium log was saved and endpoint was deleted """ from vmpool.artifact_collector import ArtifactCollector with patch("core.network.Network", Mock()), patch("core.connection.Virsh", Mock()), patch('core.db.Database', DatabaseMock()): from core.sessions import Session session = Session(dc={'platform': 'test_origin_1'}) session.id = 1 log_path = os.sep.join([ config.SCREENSHOTS_DIR, str(session.id), 'selenium_server.log' ]) endpoint = Mock(ip='127.0.0.1', name='test_endpoint', delete=Mock(), selenium_port=4455, agent_port=9000, vnc_port=5900) session.endpoint = endpoint self.app.database.get_session = Mock(return_value=session) vmpool = Mock(get_by_name=Mock(return_value=endpoint)) vmpool.app = self.app self.app.pool = vmpool art_collector = ArtifactCollector(vmpool) in_queue = art_collector.add_tasks( session, {'selenium_server': '/var/log/selenium_server.log'}) self.assertTrue(in_queue) self.assertTrue(wait_for(lambda: session.selenium_log == log_path)) with open(session.selenium_log, 'r') as f: text = f.read() self.assertEqual(text, 'test text') self.assertTrue(wait_for(lambda: len(art_collector.get_queue()) == 0)) self.assertTrue(wait_for(lambda: session.endpoint.delete.called)) art_collector.stop()
def test_create_vm_with_get_ip(self): """ - call OpenstackClone.create() - check_vm_exist is True - ping successful - vm_has_created is True - get_ip return mocked ip address and mac Expected: vm has been created """ with patch('core.utils.openstack_utils.nova_client') as nova: nova.return_value = Mock(servers=Mock(find=Mock( return_value=Mock(addresses=Mock(get=Mock( return_value=[{'addr': '127.0.0.1', 'OS-EXT-IPS-MAC:mac_addr': 'test_mac'}]))))) ) self.app.pool.add(self.platform) wait_for(lambda: self.app.pool.using[0].ready is True) self.assertEqual(self.app.pool.using[0].ip, '127.0.0.1') self.assertEqual(self.app.pool.using[0].mac, 'test_mac') self.assertEqual(self.app.pool.count(), 1)
def test_stop_artifact_collector(self): """ - stop artifact collector Expected: all tasks were deleted """ from vmpool.artifact_collector import ArtifactCollector from multiprocessing.pool import AsyncResult art_collector = ArtifactCollector(Mock()) task = AsyncResult(cache={1: ""}, callback=None) task._job = 1 task._ready = True art_collector.in_queue = {1: [task]} art_collector.stop() self.assertTrue(wait_for(lambda: len(art_collector.get_queue()) == 0))
def wait_for_vm_start_tp_spawn(): wait_for(lambda: make_clone.called, timeout=2) self.assertTrue(make_clone.called) self.assertEqual(len(q), 1)