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()
Exemplo n.º 2
0
    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)
Exemplo n.º 3
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"]))
Exemplo n.º 4
0
    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()
Exemplo n.º 5
0
    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)
Exemplo n.º 6
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)
Exemplo n.º 7
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)
Exemplo n.º 8
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
        """
        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)
Exemplo n.º 9
0
    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)
Exemplo n.º 10
0
    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)
Exemplo n.º 11
0
    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()))
Exemplo n.º 12
0
    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)
Exemplo n.º 13
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)
Exemplo n.º 14
0
    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)
Exemplo n.º 15
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)
Exemplo n.º 16
0
    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)
Exemplo n.º 17
0
    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()
Exemplo n.º 18
0
    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)
Exemplo n.º 19
0
    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))
Exemplo n.º 20
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)