Exemple #1
0
def test_logs(tmp):
    log = getLogger(__name__)

    with Manager(tmp()) as manager:
        log.info("Strange encoding \xe8 \xe9")

        # Crafted problematic logRecord
        try:
            raise ValueError("[Mock] folder/\xeatre ou ne pas \xeatre.odt")
        except ValueError as e:
            log.exception("Oups!")
            log.exception(repr(e))
            log.exception(str(e))
            log.exception(e)

        # Test raw report (calling the Report class manually)
        report = Report(manager)
        report.generate()
        path = report.get_path()
        assert path.is_file()
        assert path.suffix == ".zip"

        # Test the report managed by the Manager
        path_managed = manager.generate_report()
        assert path_managed.is_file()
        assert path_managed.suffix == ".zip"
Exemple #2
0
def test_csv_generation(tmp):
    session = Session(
        uid=2,
        remote_path="/default-domain/UserWorkspaces/Administrator/test_csv",
        remote_ref="08716a45-7154-4c2a-939c-bb70a7a2805e",
        status=TransferStatus.DONE,
        uploaded_items=10,
        total_items=10,
        engine="f513f5b371cc11eb85d008002733076e",
        created_on="2021-02-18 15:15:38",
        completed_on="2021-02-18 15:15:39",
        description="icons-svg (+9)",
        planned_items=10,
    )
    with Manager(tmp()) as manager:
        session_csv = SessionCsv(manager, session)

        assert session_csv.output_file.name == "session_2021-02-18_15-15-39.csv"
        assert session_csv.output_tmp.name == "session_2021-02-18_15-15-39.tmp"

        session_csv.create_tmp()
        assert session_csv.output_tmp.is_file()
        assert not session_csv.output_file.is_file()

        session_csv.store_data([{
            "path":
            "/default-domain/UserWorkspaces/Administrator/test_csv/toto.txt",
            "properties": {
                "dc:title": "Toto file"
            },
            "type": "File",
        }])
        assert not session_csv.output_tmp.is_file()
        assert session_csv.output_file.is_file()
Exemple #3
0
def test_logs():
    log = get_logger(__name__)
    folder = tempfile.mkdtemp(u'-nxdrive-tests')
    Options.nxdrive_home = folder
    manager = Manager()

    try:
        log.debug("Strange encoding \xe9")
        log.debug(u"Unicode encoding \xe8")

        # Crafted problematic logRecord
        try:
            raise ValueError(u'[tests] folder/\xeatre ou ne pas \xeatre.odt')
        except ValueError as e:
            log.exception('Oups!')
            log.exception(repr(e))
            log.exception(unicode(e))  # Works but not recommended

            with pytest.raises(UnicodeEncodeError):
                log.exception(str(e))

                # Using the syntax below will raise the same UnicodeEncodeError
                # but the logging module takes care of it and just prints out
                # the exception without raising it.  So I let it there FI.
                # log.exception(e)

        report = Report(manager, os.path.join(folder, 'report'))
        report.generate()
    finally:
        manager.dispose_db()
        Manager._singleton = None
Exemple #4
0
def test_temporary_csv_cleanup(tmp, user_factory, nuxeo_url):
    session = Session(
        uid=2,
        remote_path="/default-domain/UserWorkspaces/Administrator/test_csv",
        remote_ref="08716a45-7154-4c2a-939c-bb70a7a2805e",
        status=TransferStatus.DONE,
        uploaded_items=10,
        total_items=10,
        engine="f513f5b371cc11eb85d008002733076e",
        created_on="2021-02-18 15:15:38",
        completed_on="2021-02-18 15:15:39",
        description="icons-svg (+9)",
        planned_items=10,
    )
    with Manager(tmp()) as manager:
        session_csv = SessionCsv(manager, session)

        session_csv.create_tmp()
        assert session_csv.output_tmp.is_file()
        assert not session_csv.output_file.is_file()
        conf_folder = manager.home / "nuxeo-conf"
        user = user_factory()
        manager.bind_server(
            conf_folder,
            nuxeo_url,
            user.uid,
            password=user.properties["password"],
            start_engine=False,
        )
        assert not session_csv.output_tmp.is_file()
Exemple #5
0
    def _make_manager(home: str = "", with_engine: bool = True):
        manager = Manager(home or tmp())

        # Force deletion behavior to real deletion for all tests
        manager.dao.update_config("deletion_behavior", "delete_server")
        manager.dao.store_bool("show_deletion_prompt", False)

        request.addfinalizer(manager.close)
        log.info(f"[FIXTURE] Created {manager}")

        if with_engine:
            conf_folder = manager.home / "nuxeo-conf"
            user = user_factory()
            manager.bind_server(conf_folder,
                                nuxeo_url,
                                user.uid,
                                user.password,
                                start_engine=False)

            # Let the possibility to access user's attributes from the manager
            manager.user_details = user

            engine = None
            for engine_ in manager.engines.values():
                engine = engine_

            return manager, engine

        return manager
def test_cli_args(tmp):
    url = "http://*****:*****@localhost:8899"
    Options.set("proxy_server", url, setter="cli")
    with Manager(tmp()) as manager:
        proxy = manager.proxy
        assert isinstance(proxy, ManualProxy)
        assert proxy.url == url
        settings = proxy.settings()
        assert settings["http"] == settings["https"] == url
Exemple #7
0
 def _create_manager(self):
     options = Mock()
     options.debug = False
     options.force_locale = None
     options.log_level_file = None
     options.proxy_server = None
     options.update_site_url = None
     options.beta_update_site_url = None
     options.nxdrive_home = self.test_folder
     manager = Manager(options)
     return manager
 def setUp(self):
     self.folder = tempfile.mkdtemp(u'-nxdrive-tests')
     from mock import Mock
     options = Mock()
     options.debug = False
     options.force_locale = None
     options.proxy_server = None
     options.log_level_file = None
     options.update_site_url = None
     options.beta_update_site_url = None
     options.nxdrive_home = self.folder
     self.manager = Manager(options)
    def test_bind_local_folder_on_config_folder(self):
        Options.delay = TEST_DEFAULT_DELAY
        Options.nxdrive_home = self.nxdrive_conf_folder
        self.manager = Manager()
        self.addCleanup(self.manager.unbind_all)
        self.addCleanup(self.manager.dispose_all)

        with self.assertRaises(FolderAlreadyUsed):
            self.manager.bind_server(self.nxdrive_conf_folder,
                                     self.nuxeo_url,
                                     self.user,
                                     self.password,
                                     start_engine=False)
    def test_bind_local_folder_on_config_folder(self):
        options = Mock()
        options.debug = False
        options.delay = TEST_DEFAULT_DELAY
        options.force_locale = None
        options.proxy_server = None
        options.log_level_file = None
        options.update_site_url = None
        options.beta_update_site_url = None
        options.nxdrive_home = self.nxdrive_conf_folder
        self.manager = Manager(options)

        with self.assertRaises(FolderAlreadyUsed):
            self.manager.bind_server(self.nxdrive_conf_folder,
                                     self.nuxeo_url,
                                     self.user,
                                     self.password,
                                     start_engine=False)
Exemple #11
0
def test_cli_args():
    url = "http://*****:*****@localhost:8899"
    Options.set("proxy_server", url, setter="cli")
    manager = Manager()
    proxy = manager.proxy
    assert proxy
    assert isinstance(proxy, ManualProxy)
    assert proxy.authenticated
    assert proxy.scheme == "http"
    assert proxy.host == "localhost"
    assert proxy.port == 8899
    assert proxy.username == "username"
    assert proxy.password == "password"
    settings = proxy.settings()
    assert settings["http"] == settings["https"] == url
    manager.stop()
    manager.unbind_all()
    manager.dispose_all()
    Manager._singleton = None
Exemple #12
0
def test_notifications(tmp):
    from nxdrive.notification import Notification

    notif = Notification("warning", flags=Notification.FLAG_DISCARDABLE)
    notif2 = Notification("plop")

    with Manager(tmp()) as manager:
        dao = manager.dao
        dao.insert_notification(notif)
        dao.insert_notification(notif2)
        assert len(dao.get_notifications()) == 2

        dao.discard_notification(notif.uid)
        assert len(dao.get_notifications(discarded=False)) == 1
        assert len(dao.get_notifications()) == 2

        dao.remove_notification(notif.uid)
        assert len(dao.get_notifications()) == 1

        dao.discard_notification(notif2.uid)
        assert len(dao.get_notifications()) == 1
        assert len(dao.get_notifications(discarded=True)) == 1
Exemple #13
0
def test_autolock(tmp):
    with Manager(tmp()) as manager:
        dao = manager.dao
        dao.lock_path("/test_1", 1, "doc_id_1")
        dao.lock_path("/test_2", 2, "doc_id_2")
        dao.lock_path("/test_3", 3, "doc_id_3")

        # Verify that it does fail
        dao.lock_path("/test_3", 4, "doc_id_4")
        assert len(dao.get_locked_paths()) == 3
        dao.unlock_path("/test")
        assert len(dao.get_locked_paths()) == 3
        dao.unlock_path("/test_1")
        locks = dao.get_locks()
        assert len(locks) == 2
        assert locks[0].path == "/test_2"
        assert locks[0].process == 2
        assert locks[0].remote_id == "doc_id_2"
        assert locks[1].path == "/test_3"

        # Verify it has auto-update
        assert locks[1].process == 4
        assert locks[1].remote_id == "doc_id_4"
Exemple #14
0
def test_logs():
    log = getLogger(__name__)
    folder = tempfile.mkdtemp("-nxdrive-tests")
    Options.nxdrive_home = folder
    manager = Manager()

    try:
        log.debug("Strange encoding \xe8 \xe9")

        # Crafted problematic logRecord
        try:
            raise ValueError("[tests] folder/\xeatre ou ne pas \xeatre.odt")
        except ValueError as e:
            log.exception("Oups!")
            log.exception(repr(e))
            log.exception(str(e))
            log.exception(e)

        report = Report(manager, os.path.join(folder, "report"))
        report.generate()
    finally:
        manager.dispose_db()
        Manager._singleton = None
Exemple #15
0
 def get_manager(self, options):
     from nxdrive.manager import Manager
     return Manager(options)
Exemple #16
0
    def _append_user_attrs(self, number: int, register_roots: bool) -> None:
        """Create all stuff needed for one user. Ugly but useful."""

        # Create all what we need
        local_test_folder = self.tmpdir / str(number)
        local_nxdrive_folder = local_test_folder / "drive"
        local_nxdrive_folder.mkdir(parents=True)
        nxdrive_conf_folder = local_test_folder / "conf"
        nxdrive_conf_folder.mkdir()
        manager = Manager(nxdrive_conf_folder)
        user = getattr(self, f"user_{number}")
        password = getattr(self, f"password_{number}")
        engine = self.bind_engine(
            number,
            start_engine=False,
            manager=manager,
            user=user,
            password=password,
            folder=local_nxdrive_folder,
        )
        queue_manager = engine.queue_manager
        sync_root_folder = local_nxdrive_folder / self.workspace_title
        local_root_client = self.get_local_client(engine.local.base_folder)
        local = self.get_local_client(sync_root_folder)
        remote_document_client = DocRemote(
            self.nuxeo_url,
            getattr(self, f"user_{number}"),
            f"nxdrive-test-device-{number}",
            self.version,
            password=getattr(self, f"password_{number}"),
            base_folder=self.workspace,
            upload_tmp_dir=self.upload_tmp_dir,
            dao=engine.dao,
        )
        remote = RemoteBase(
            self.nuxeo_url,
            getattr(self, f"user_{number}"),
            f"nxdrive-test-device-{number}",
            self.version,
            password=getattr(self, f"password_{number}"),
            base_folder=self.workspace,
            upload_tmp_dir=self.upload_tmp_dir,
            dao=engine.dao,
        )
        if register_roots:
            remote.register_as_root(self.workspace)

        # Force deletion behavior to real deletion for all tests
        manager.set_config("deletion_behavior", "delete_server")
        manager.dao.store_bool("show_deletion_prompt", False)

        # And now persist in attributes
        setattr(self, f"manager_{number}", manager)
        setattr(self, f"local_test_folder_{number}", local_test_folder)
        setattr(self, f"local_nxdrive_folder_{number}", local_nxdrive_folder)
        setattr(self, f"nxdrive_conf_folder_{number}", nxdrive_conf_folder)
        setattr(self, f"queue_manager_{number}", queue_manager)
        setattr(self, f"sync_root_folder_{number}", sync_root_folder)
        setattr(self, f"local_root_client_{number}", local_root_client)
        setattr(self, f"local_{number}", local)
        setattr(self, f"remote_document_client_{number}",
                remote_document_client)
        setattr(self, f"remote_{number}", remote)
 def _create_manager(self):
     Options.nxdrive_home = self.test_folder
     manager = Manager()
     return manager
    def setUpApp(self, server_profile=None):
        # Check the Nuxeo server test environment
        self.nuxeo_url = os.environ.get('NXDRIVE_TEST_NUXEO_URL')
        self.admin_user = os.environ.get('NXDRIVE_TEST_USER')
        self.password = os.environ.get('NXDRIVE_TEST_PASSWORD')
        self.build_workspace = os.environ.get('WORKSPACE')
        self.result = None
        self.tearedDown = False

        # Take default parameter if none has been set
        if self.nuxeo_url is None:
            self.nuxeo_url = "http://localhost:8080/nuxeo"
        if self.admin_user is None:
            self.admin_user = "******"
        if self.password is None:
            self.password = "******"
        self.tmpdir = None
        if self.build_workspace is not None:
            self.tmpdir = os.path.join(self.build_workspace, "tmp")
            if not os.path.isdir(self.tmpdir):
                os.makedirs(self.tmpdir)
        self.upload_tmp_dir = tempfile.mkdtemp(u'-nxdrive-uploads',
                                               dir=self.tmpdir)

        if None in (self.nuxeo_url, self.admin_user, self.password):
            raise unittest.SkipTest(
                "No integration server configuration found in environment.")

        # Check the local filesystem test environment
        self.local_test_folder_1 = tempfile.mkdtemp(u'drive-1',
                                                    dir=self.tmpdir)
        self.local_test_folder_2 = tempfile.mkdtemp(u'drive-2',
                                                    dir=self.tmpdir)

        self.local_nxdrive_folder_1 = os.path.join(self.local_test_folder_1,
                                                   u'Nuxeo Drive')
        os.mkdir(self.local_nxdrive_folder_1)
        self.local_nxdrive_folder_2 = os.path.join(self.local_test_folder_2,
                                                   u'Nuxeo Drive')
        os.mkdir(self.local_nxdrive_folder_2)

        self.nxdrive_conf_folder_1 = os.path.join(self.local_test_folder_1,
                                                  u'nuxeo-drive-conf')
        os.mkdir(self.nxdrive_conf_folder_1)
        self.nxdrive_conf_folder_2 = os.path.join(self.local_test_folder_2,
                                                  u'nuxeo-drive-conf')
        os.mkdir(self.nxdrive_conf_folder_2)

        from mock import Mock
        options = Mock()
        options.debug = False
        options.delay = TEST_DEFAULT_DELAY
        options.force_locale = None
        options.proxy_server = None
        options.log_level_file = None
        options.update_site_url = None
        options.beta_update_site_url = None
        options.autolock_interval = 30
        options.nxdrive_home = self.nxdrive_conf_folder_1
        self.manager_1 = Manager(options)
        self.connected = False
        import nxdrive
        nxdrive_path = os.path.dirname(nxdrive.__file__)
        i18n_path = os.path.join(nxdrive_path, 'tests', 'resources', "i18n.js")
        Translator(self.manager_1, i18n_path)
        options.nxdrive_home = self.nxdrive_conf_folder_2
        Manager._singleton = None
        self.manager_2 = Manager(options)
        self.version = __version__
        url = self.nuxeo_url
        log.debug("Will use %s as url", url)
        if '#' in url:
            # Remove the engine type for the rest of the test
            self.nuxeo_url = url.split('#')[0]
        self.setUpServer(server_profile)

        self.engine_1 = self.manager_1.bind_server(self.local_nxdrive_folder_1,
                                                   url,
                                                   self.user_1,
                                                   self.password_1,
                                                   start_engine=False)
        self.engine_2 = self.manager_2.bind_server(self.local_nxdrive_folder_2,
                                                   url,
                                                   self.user_2,
                                                   self.password_2,
                                                   start_engine=False)
        self.engine_1.syncCompleted.connect(self.app.sync_completed)
        self.engine_1.get_remote_watcher().remoteScanFinished.connect(
            self.app.remote_scan_completed)
        self.engine_1.get_remote_watcher().changesFound.connect(
            self.app.remote_changes_found)
        self.engine_1.get_remote_watcher().noChangesFound.connect(
            self.app.no_remote_changes_found)
        self.engine_2.syncCompleted.connect(self.app.sync_completed)
        self.engine_2.get_remote_watcher().remoteScanFinished.connect(
            self.app.remote_scan_completed)
        self.engine_2.get_remote_watcher().changesFound.connect(
            self.app.remote_changes_found)
        self.engine_2.get_remote_watcher().noChangesFound.connect(
            self.app.no_remote_changes_found)
        self.queue_manager_1 = self.engine_1.get_queue_manager()
        self.queue_manager_2 = self.engine_2.get_queue_manager()

        self.sync_root_folder_1 = os.path.join(self.local_nxdrive_folder_1,
                                               self.workspace_title_1)
        self.sync_root_folder_2 = os.path.join(self.local_nxdrive_folder_2,
                                               self.workspace_title_2)

        self.local_root_client_1 = self.engine_1.get_local_client()
        self.local_root_client_2 = self.engine_2.get_local_client()

        self.local_client_1 = self.get_local_client(
            os.path.join(self.local_nxdrive_folder_1, self.workspace_title))
        self.local_client_2 = self.get_local_client(
            os.path.join(self.local_nxdrive_folder_2, self.workspace_title))

        # Document client to be used to create remote test documents
        # and folders
        remote_document_client_1 = RemoteDocumentClient(
            self.nuxeo_url,
            self.user_1,
            u'nxdrive-test-device-1',
            self.version,
            password=self.password_1,
            base_folder=self.workspace_1,
            upload_tmp_dir=self.upload_tmp_dir)

        remote_document_client_2 = RemoteDocumentClient(
            self.nuxeo_url,
            self.user_2,
            u'nxdrive-test-device-2',
            self.version,
            password=self.password_2,
            base_folder=self.workspace_2,
            upload_tmp_dir=self.upload_tmp_dir)
        # File system client to be used to create remote test documents
        # and folders
        remote_file_system_client_1 = RemoteFileSystemClient(
            self.nuxeo_url,
            self.user_1,
            u'nxdrive-test-device-1',
            self.version,
            password=self.password_1,
            upload_tmp_dir=self.upload_tmp_dir)

        remote_file_system_client_2 = RemoteFileSystemClient(
            self.nuxeo_url,
            self.user_2,
            u'nxdrive-test-device-2',
            self.version,
            password=self.password_2,
            upload_tmp_dir=self.upload_tmp_dir)

        self.remote_restapi_client_1 = RestAPIClient(self.nuxeo_url,
                                                     self.user_1,
                                                     u'nxdrive-test-device-1',
                                                     self.version,
                                                     password=self.password_1)
        self.remote_restapi_client_2 = RestAPIClient(self.nuxeo_url,
                                                     self.user_2,
                                                     u'nxdrive-test-device-2',
                                                     self.version,
                                                     password=self.password_2)
        self.remote_restapi_client_admin = RestAPIClient(
            self.nuxeo_url,
            self.admin_user,
            u'nxdrive-test-device-2',
            self.version,
            password=self.password)

        # Register root
        remote_document_client_1.register_as_root(self.workspace_1)
        remote_document_client_2.register_as_root(self.workspace_2)

        self.remote_document_client_1 = remote_document_client_1
        self.remote_document_client_2 = remote_document_client_2
        self.remote_file_system_client_1 = remote_file_system_client_1
        self.remote_file_system_client_2 = remote_file_system_client_2

        self._wait_sync = {
            self.engine_1.get_uid(): True,
            self.engine_2.get_uid(): True
        }
        self._wait_remote_scan = {
            self.engine_1.get_uid(): True,
            self.engine_2.get_uid(): True
        }
        self._remote_changes_count = {
            self.engine_1.get_uid(): 0,
            self.engine_2.get_uid(): 0
        }
        self._no_remote_changes = {
            self.engine_1.get_uid(): False,
            self.engine_2.get_uid(): False
        }
Exemple #19
0
 def get_manager(self):
     from nxdrive.manager import Manager
     return Manager()
Exemple #20
0
 def get_manager(self, options):
     from nxdrive.manager import Manager
     setattr(options, 'version', __version__)
     return Manager(options)
    def setUpApp(self, server_profile=None, register_roots=True):
        if Manager._singleton:
            Manager._singleton = None

        # Save the current path for test files
        self.location = dirname(__file__)

        # Install callback early to be called the last
        self.addCleanup(self._check_cleanup)

        # Check the Nuxeo server test environment
        self.nuxeo_url = os.environ.get('NXDRIVE_TEST_NUXEO_URL',
                                        'http://localhost:8080/nuxeo')
        self.admin_user = os.environ.get('NXDRIVE_TEST_USER', 'Administrator')
        self.password = os.environ.get('NXDRIVE_TEST_PASSWORD',
                                       'Administrator')
        self.report_path = os.environ.get('REPORT_PATH')
        self.tearedDown = False

        self.tmpdir = os.path.join(os.environ.get('WORKSPACE', ''), 'tmp')
        self.addCleanup(clean_dir, self.tmpdir)
        if not os.path.isdir(self.tmpdir):
            os.makedirs(self.tmpdir)

        self.upload_tmp_dir = tempfile.mkdtemp(u'-nxdrive-uploads',
                                               dir=self.tmpdir)

        # Check the local filesystem test environment
        self.local_test_folder_1 = tempfile.mkdtemp(u'drive-1',
                                                    dir=self.tmpdir)
        self.local_test_folder_2 = tempfile.mkdtemp(u'drive-2',
                                                    dir=self.tmpdir)

        # Correct the casing of the temp folders for windows
        if sys.platform == 'win32':
            import win32api
            self.local_test_folder_1 = win32api.GetLongPathNameW(
                self.local_test_folder_1)
            self.local_test_folder_2 = win32api.GetLongPathNameW(
                self.local_test_folder_2)

        self.local_nxdrive_folder_1 = os.path.join(self.local_test_folder_1,
                                                   u'Nuxeo Drive')
        os.mkdir(self.local_nxdrive_folder_1)
        self.local_nxdrive_folder_2 = os.path.join(self.local_test_folder_2,
                                                   u'Nuxeo Drive')
        os.mkdir(self.local_nxdrive_folder_2)

        self.nxdrive_conf_folder_1 = os.path.join(self.local_test_folder_1,
                                                  u'nuxeo-drive-conf')
        os.mkdir(self.nxdrive_conf_folder_1)
        self.nxdrive_conf_folder_2 = os.path.join(self.local_test_folder_2,
                                                  u'nuxeo-drive-conf')
        os.mkdir(self.nxdrive_conf_folder_2)

        Options.delay = TEST_DEFAULT_DELAY
        # Options.autolock_interval = 30
        Options.nxdrive_home = self.nxdrive_conf_folder_1
        self.manager_1 = Manager()
        self.connected = False
        i18n_path = self.location + '/resources/i18n.js'
        Translator(self.manager_1, i18n_path)
        Options.nxdrive_home = self.nxdrive_conf_folder_2
        Manager._singleton = None
        self.manager_2 = Manager()

        self.version = __version__
        url = self.nuxeo_url
        log.debug("Will use %s as url", url)
        if '#' in url:
            # Remove the engine type for the rest of the test
            self.nuxeo_url = url.split('#')[0]
        self.setUpServer(server_profile)
        self.addCleanup(self.tearDownServer, server_profile)
        self.addCleanup(self._stop_managers)

        self._wait_sync = {}
        self._wait_remote_scan = {}
        self._remote_changes_count = {}
        self._no_remote_changes = {}

        # Set engine_1 and engine_2 attributes
        self.bind_engine(1, start_engine=False)
        self.queue_manager_1 = self.engine_1.get_queue_manager()
        self.bind_engine(2, start_engine=False)
        self.queue_manager_2 = self.engine_2.get_queue_manager()

        self.sync_root_folder_1 = os.path.join(self.local_nxdrive_folder_1,
                                               self.workspace_title_1)
        self.sync_root_folder_2 = os.path.join(self.local_nxdrive_folder_2,
                                               self.workspace_title_2)

        self.local_root_client_1 = self.engine_1.get_local_client()
        self.local_root_client_2 = self.engine_2.get_local_client()

        self.local_client_1 = self.get_local_client(self.sync_root_folder_1)
        self.local_client_2 = self.get_local_client(self.sync_root_folder_2)

        # Document client to be used to create remote test documents
        # and folders
        self.remote_document_client_1 = RemoteDocumentClientForTests(
            self.nuxeo_url,
            self.user_1,
            u'nxdrive-test-device-1',
            self.version,
            password=self.password_1,
            base_folder=self.workspace_1,
            upload_tmp_dir=self.upload_tmp_dir)

        self.remote_document_client_2 = RemoteDocumentClientForTests(
            self.nuxeo_url,
            self.user_2,
            u'nxdrive-test-device-2',
            self.version,
            password=self.password_2,
            base_folder=self.workspace_2,
            upload_tmp_dir=self.upload_tmp_dir)

        # File system client to be used to create remote test documents
        # and folders
        self.remote_file_system_client_1 = RemoteFileSystemClient(
            self.nuxeo_url,
            self.user_1,
            u'nxdrive-test-device-1',
            self.version,
            password=self.password_1,
            upload_tmp_dir=self.upload_tmp_dir)

        self.remote_file_system_client_2 = RemoteFileSystemClient(
            self.nuxeo_url,
            self.user_2,
            u'nxdrive-test-device-2',
            self.version,
            password=self.password_2,
            upload_tmp_dir=self.upload_tmp_dir)

        self.remote_restapi_client_admin = RestAPIClient(
            self.nuxeo_url,
            self.admin_user,
            u'nxdrive-test-device-2',
            self.version,
            password=self.password)

        # Register sync roots
        if register_roots:
            self.remote_document_client_1.register_as_root(self.workspace_1)
            self.addCleanup(self._unregister, self.workspace_1)
            self.remote_document_client_2.register_as_root(self.workspace_2)
            self.addCleanup(self._unregister, self.workspace_2)
Exemple #22
0
    def setUpApp(self, server_profile=None, register_roots=True):
        if Manager._singleton:
            Manager._singleton = None

        # Install callback early to be called the last
        self.addCleanup(self._check_cleanup)

        self.report_path = os.environ.get("REPORT_PATH")

        self.tmpdir = os.path.join(os.environ.get("WORKSPACE", ""), "tmp")
        self.addCleanup(clean_dir, self.tmpdir)
        if not os.path.isdir(self.tmpdir):
            os.makedirs(self.tmpdir)

        self.upload_tmp_dir = tempfile.mkdtemp("-nxdrive-uploads",
                                               dir=self.tmpdir)

        # Check the local filesystem test environment
        self.local_test_folder_1 = tempfile.mkdtemp("drive-1", dir=self.tmpdir)
        self.local_test_folder_2 = tempfile.mkdtemp("drive-2", dir=self.tmpdir)

        # Correct the casing of the temp folders for windows
        if WINDOWS:
            import win32api

            self.local_test_folder_1 = win32api.GetLongPathNameW(
                self.local_test_folder_1)
            self.local_test_folder_2 = win32api.GetLongPathNameW(
                self.local_test_folder_2)

        self.local_nxdrive_folder_1 = os.path.join(self.local_test_folder_1,
                                                   "Nuxeo Drive")
        os.mkdir(self.local_nxdrive_folder_1)
        self.local_nxdrive_folder_2 = os.path.join(self.local_test_folder_2,
                                                   "Nuxeo Drive")
        os.mkdir(self.local_nxdrive_folder_2)

        self.nxdrive_conf_folder_1 = os.path.join(self.local_test_folder_1,
                                                  "nuxeo-drive-conf")
        os.mkdir(self.nxdrive_conf_folder_1)
        self.nxdrive_conf_folder_2 = os.path.join(self.local_test_folder_2,
                                                  "nuxeo-drive-conf")
        os.mkdir(self.nxdrive_conf_folder_2)

        Options.delay = TEST_DEFAULT_DELAY
        Options.nxdrive_home = self.nxdrive_conf_folder_1
        self.manager_1 = Manager()
        self.connected = False
        i18n_path = self.location + "/resources/i18n"
        Translator(self.manager_1, i18n_path)
        Options.nxdrive_home = self.nxdrive_conf_folder_2
        Manager._singleton = None
        self.manager_2 = Manager()

        self.setUpServer(server_profile)
        self.addCleanup(self.tearDownServer, server_profile)
        self.addCleanup(self._stop_managers)
        self.addCleanup(self.generate_report)

        self._wait_sync = {}
        self._wait_remote_scan = {}
        self._remote_changes_count = {}
        self._no_remote_changes = {}

        # Set engine_1 and engine_2 attributes
        self.bind_engine(1, start_engine=False)
        self.queue_manager_1 = self.engine_1.get_queue_manager()
        self.bind_engine(2, start_engine=False)

        self.sync_root_folder_1 = os.path.join(self.local_nxdrive_folder_1,
                                               self.workspace_title_1)
        self.sync_root_folder_2 = os.path.join(self.local_nxdrive_folder_2,
                                               self.workspace_title_2)

        self.local_root_client_1 = self.engine_1.local

        self.local_1 = self.get_local_client(self.sync_root_folder_1)
        self.local_2 = self.get_local_client(self.sync_root_folder_2)

        # Document client to be used to create remote test documents
        # and folders
        self.remote_document_client_1 = DocRemote(
            pytest.nuxeo_url,
            self.user_1,
            "nxdrive-test-device-1",
            pytest.version,
            password=self.password_1,
            base_folder=self.workspace_1,
            upload_tmp_dir=self.upload_tmp_dir,
        )

        self.remote_document_client_2 = DocRemote(
            pytest.nuxeo_url,
            self.user_2,
            "nxdrive-test-device-2",
            pytest.version,
            password=self.password_2,
            base_folder=self.workspace_2,
            upload_tmp_dir=self.upload_tmp_dir,
        )

        # File system client to be used to create remote test documents
        # and folders
        self.remote_1 = RemoteBase(
            pytest.nuxeo_url,
            self.user_1,
            "nxdrive-test-device-1",
            pytest.version,
            password=self.password_1,
            base_folder=self.workspace_1,
            upload_tmp_dir=self.upload_tmp_dir,
        )

        self.remote_2 = RemoteBase(
            pytest.nuxeo_url,
            self.user_2,
            "nxdrive-test-device-2",
            pytest.version,
            password=self.password_2,
            base_folder=self.workspace_2,
            upload_tmp_dir=self.upload_tmp_dir,
        )

        # Register sync roots
        if register_roots:
            self.remote_1.register_as_root(self.workspace_1)
            self.addCleanup(self._unregister, self.workspace_1)
            self.remote_2.register_as_root(self.workspace_2)
            self.addCleanup(self._unregister, self.workspace_2)