From c776cc6ea6cfa34383af341a8f66a8ad56efb295 Mon Sep 17 00:00:00 2001 From: Jean-Marie Burel Date: Fri, 13 Oct 2017 21:43:55 +0100 Subject: [PATCH 1/2] Introduce new file in testlib and deprecate one --- .../tools/OmeroPy/src/omero/testlib/cli.py | 180 ++++++++++++++++++ .../OmeroPy/test/integration/clitest/cli.py | 13 ++ 2 files changed, 193 insertions(+) create mode 100644 components/tools/OmeroPy/src/omero/testlib/cli.py diff --git a/components/tools/OmeroPy/src/omero/testlib/cli.py b/components/tools/OmeroPy/src/omero/testlib/cli.py new file mode 100644 index 00000000000..0872ae457e8 --- /dev/null +++ b/components/tools/OmeroPy/src/omero/testlib/cli.py @@ -0,0 +1,180 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# +# Copyright (C) 2013 University of Dundee & Open Microscopy Environment. +# All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +import pytest + +import omero +from omero.cli import CLI +from omero.plugins.sessions import SessionsControl +from omero.rtypes import rstring + +from omero.testlib import ITest +from omero_ext.mox import Mox + + +class AbstractCLITest(ITest): + + @classmethod + def setup_class(cls): + super(AbstractCLITest, cls).setup_class() + cls.cli = CLI() + cls.cli.register("sessions", SessionsControl, "TEST") + + def setup_mock(self): + self.mox = Mox() + + def teardown_mock(self): + self.mox.UnsetStubs() + self.mox.VerifyAll() + + +class CLITest(AbstractCLITest): + + def setup_method(self, method): + self.args = self.login_args() + + def create_object(self, object_type, name=""): + # create object + if object_type == 'Dataset': + new_object = omero.model.DatasetI() + elif object_type == 'Project': + new_object = omero.model.ProjectI() + elif object_type == 'Plate': + new_object = omero.model.PlateI() + elif object_type == 'Screen': + new_object = omero.model.ScreenI() + elif object_type == 'Image': + new_object = self.new_image() + new_object.name = rstring(name) + new_object = self.update.saveAndReturnObject(new_object) + + # check object has been created + found_object = self.query.get(object_type, new_object.id.val) + assert found_object.id.val == new_object.id.val + + return new_object.id.val + + @pytest.fixture() + def simpleHierarchy(self): + proj = self.make_project() + dset = self.make_dataset() + img = self.update.saveAndReturnObject(self.new_image()) + self.link(proj, dset) + self.link(dset, img) + return proj, dset, img + + +class RootCLITest(AbstractCLITest): + + def setup_method(self, method): + self.args = self.root_login_args() + + +class ArgumentFixture(object): + + """ + Used to test the user/group argument + """ + + def __init__(self, prefix, attr): + self.prefix = prefix + self.attr = attr + + def get_arguments(self, obj): + args = [] + if self.prefix: + args += [self.prefix] + if self.attr: + args += ["%s" % getattr(obj, self.attr).val] + return args + + def __repr__(self): + if self.prefix: + return "%s" % self.prefix + else: + return "%s" % self.attr + + +UserIdNameFixtures = ( + ArgumentFixture('--id', 'id'), + ArgumentFixture('--name', 'omeName'), + ) + +UserFixtures = ( + ArgumentFixture(None, 'id'), + ArgumentFixture(None, 'omeName'), + ArgumentFixture('--user-id', 'id'), + ArgumentFixture('--user-name', 'omeName'), + ) + +GroupIdNameFixtures = ( + ArgumentFixture('--id', 'id'), + ArgumentFixture('--name', 'name'), + ) + +GroupFixtures = ( + ArgumentFixture(None, 'id'), + ArgumentFixture(None, 'name'), + ArgumentFixture('--group-id', 'id'), + ArgumentFixture('--group-name', 'name'), + ) + + +def get_user_ids(out, sort_key=None): + columns = {'login': 1, 'first-name': 2, 'last-name': 3, 'email': 4} + lines = out.split('\n') + ids = [] + last_value = None + for line in lines[2:]: + elements = line.split('|') + if len(elements) < 8: + continue + + ids.append(int(elements[0].strip())) + if sort_key: + if sort_key == 'id': + new_value = ids[-1] + else: + new_value = elements[columns[sort_key]].strip() + assert new_value >= last_value + last_value = new_value + return ids + + +def get_group_ids(out, sort_key=None): + lines = out.split('\n') + ids = [] + last_value = None + for line in lines[2:]: + elements = line.split('|') + if len(elements) < 4: + continue + + ids.append(int(elements[0].strip())) + if sort_key: + if sort_key == 'id': + new_value = ids[-1] + else: + new_value = elements[1].strip() + assert new_value >= last_value + last_value = new_value + return ids diff --git a/components/tools/OmeroPy/test/integration/clitest/cli.py b/components/tools/OmeroPy/test/integration/clitest/cli.py index 0872ae457e8..5805306a1e7 100644 --- a/components/tools/OmeroPy/test/integration/clitest/cli.py +++ b/components/tools/OmeroPy/test/integration/clitest/cli.py @@ -21,6 +21,7 @@ import pytest +import warnings import omero from omero.cli import CLI @@ -32,6 +33,9 @@ class AbstractCLITest(ITest): + warnings.warn("Deprecated in 5.4.1." + "Use omero.testlib.cli", + DeprecationWarning) @classmethod def setup_class(cls): @@ -48,6 +52,9 @@ def teardown_mock(self): class CLITest(AbstractCLITest): + warnings.warn("Deprecated in 5.4.1." + "Use omero.testlib.cli", + DeprecationWarning) def setup_method(self, method): self.args = self.login_args() @@ -84,6 +91,9 @@ def simpleHierarchy(self): class RootCLITest(AbstractCLITest): + warnings.warn("Deprecated in 5.4.1." + "Use omero.testlib.cli", + DeprecationWarning) def setup_method(self, method): self.args = self.root_login_args() @@ -94,6 +104,9 @@ class ArgumentFixture(object): """ Used to test the user/group argument """ + warnings.warn("Deprecated in 5.4.1." + "Use omero.testlib.cli", + DeprecationWarning) def __init__(self, prefix, attr): self.prefix = prefix From fe2f7f5f2c4d29f3724c3a15cb6d408687da4cb2 Mon Sep 17 00:00:00 2001 From: Jean-Marie Burel Date: Fri, 13 Oct 2017 21:49:54 +0100 Subject: [PATCH 2/2] Update tests --- .../OmeroPy/test/integration/clitest/test_admin.py | 2 +- .../OmeroPy/test/integration/clitest/test_chgrp.py | 2 +- .../OmeroPy/test/integration/clitest/test_chown.py | 2 +- .../OmeroPy/test/integration/clitest/test_cleanse.py | 2 +- .../OmeroPy/test/integration/clitest/test_delete.py | 2 +- .../OmeroPy/test/integration/clitest/test_download.py | 2 +- .../OmeroPy/test/integration/clitest/test_duplicate.py | 2 +- .../tools/OmeroPy/test/integration/clitest/test_fs.py | 2 +- .../OmeroPy/test/integration/clitest/test_group.py | 10 +++++----- .../OmeroPy/test/integration/clitest/test_import.py | 2 +- .../OmeroPy/test/integration/clitest/test_ldap.py | 2 +- .../OmeroPy/test/integration/clitest/test_metadata.py | 2 +- .../tools/OmeroPy/test/integration/clitest/test_obj.py | 2 +- .../OmeroPy/test/integration/clitest/test_script.py | 2 +- .../OmeroPy/test/integration/clitest/test_search.py | 2 +- .../OmeroPy/test/integration/clitest/test_sessions.py | 2 +- .../tools/OmeroPy/test/integration/clitest/test_tag.py | 2 +- .../OmeroPy/test/integration/clitest/test_upload.py | 2 +- .../OmeroPy/test/integration/clitest/test_user.py | 10 +++++----- 19 files changed, 27 insertions(+), 27 deletions(-) diff --git a/components/tools/OmeroPy/test/integration/clitest/test_admin.py b/components/tools/OmeroPy/test/integration/clitest/test_admin.py index 16a957734b3..a86d020eee2 100644 --- a/components/tools/OmeroPy/test/integration/clitest/test_admin.py +++ b/components/tools/OmeroPy/test/integration/clitest/test_admin.py @@ -22,7 +22,7 @@ import pytest -from test.integration.clitest.cli import CLITest +from omero.testlib.cli import CLITest import omero.plugins.admin from omero.cli import NonZeroReturnCode from path import path diff --git a/components/tools/OmeroPy/test/integration/clitest/test_chgrp.py b/components/tools/OmeroPy/test/integration/clitest/test_chgrp.py index 2380ca5ae0e..d7d08aed269 100644 --- a/components/tools/OmeroPy/test/integration/clitest/test_chgrp.py +++ b/components/tools/OmeroPy/test/integration/clitest/test_chgrp.py @@ -22,7 +22,7 @@ import omero from omero.cli import NonZeroReturnCode from omero.plugins.chgrp import ChgrpControl -from test.integration.clitest.cli import CLITest, RootCLITest +from omero.testlib.cli import CLITest, RootCLITest import pytest object_types = ["Image", "Dataset", "Project", "Plate", "Screen"] diff --git a/components/tools/OmeroPy/test/integration/clitest/test_chown.py b/components/tools/OmeroPy/test/integration/clitest/test_chown.py index d38d32966db..177b28d4f6a 100644 --- a/components/tools/OmeroPy/test/integration/clitest/test_chown.py +++ b/components/tools/OmeroPy/test/integration/clitest/test_chown.py @@ -23,7 +23,7 @@ import omero from omero.plugins.chown import ChownControl -from test.integration.clitest.cli import CLITest, RootCLITest +from omero.testlib.cli import CLITest, RootCLITest from test.integration.clitest.test_tag import AbstractTagTest import pytest diff --git a/components/tools/OmeroPy/test/integration/clitest/test_cleanse.py b/components/tools/OmeroPy/test/integration/clitest/test_cleanse.py index 25f6091049b..0e29fe75bb4 100644 --- a/components/tools/OmeroPy/test/integration/clitest/test_cleanse.py +++ b/components/tools/OmeroPy/test/integration/clitest/test_cleanse.py @@ -20,7 +20,7 @@ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -from test.integration.clitest.cli import CLITest +from omero.testlib.cli import CLITest from omero.cli import NonZeroReturnCode from omero.cmd import Delete2 diff --git a/components/tools/OmeroPy/test/integration/clitest/test_delete.py b/components/tools/OmeroPy/test/integration/clitest/test_delete.py index aa393fd21b6..0c8874d2f68 100644 --- a/components/tools/OmeroPy/test/integration/clitest/test_delete.py +++ b/components/tools/OmeroPy/test/integration/clitest/test_delete.py @@ -21,7 +21,7 @@ import omero from omero.plugins.delete import DeleteControl -from test.integration.clitest.cli import CLITest +from omero.testlib.cli import CLITest from test.integration.clitest.test_tag import AbstractTagTest import pytest diff --git a/components/tools/OmeroPy/test/integration/clitest/test_download.py b/components/tools/OmeroPy/test/integration/clitest/test_download.py index 622cbe59786..008a3d4d85c 100644 --- a/components/tools/OmeroPy/test/integration/clitest/test_download.py +++ b/components/tools/OmeroPy/test/integration/clitest/test_download.py @@ -25,7 +25,7 @@ from collections import namedtuple from omero.plugins.download import DownloadControl from omero.cli import NonZeroReturnCode -from test.integration.clitest.cli import CLITest +from omero.testlib.cli import CLITest from omero.rtypes import rstring from omero.model import NamedValue as NV from omero.util.temp_files import create_path diff --git a/components/tools/OmeroPy/test/integration/clitest/test_duplicate.py b/components/tools/OmeroPy/test/integration/clitest/test_duplicate.py index c60cf54e76a..1279f89020e 100644 --- a/components/tools/OmeroPy/test/integration/clitest/test_duplicate.py +++ b/components/tools/OmeroPy/test/integration/clitest/test_duplicate.py @@ -21,7 +21,7 @@ import omero from omero.plugins.duplicate import DuplicateControl -from test.integration.clitest.cli import CLITest +from omero.testlib.cli import CLITest import pytest object_types = ["Image", "Dataset", "Project", "Plate", "Screen"] diff --git a/components/tools/OmeroPy/test/integration/clitest/test_fs.py b/components/tools/OmeroPy/test/integration/clitest/test_fs.py index d29cfbc6483..7f9cddc82ba 100644 --- a/components/tools/OmeroPy/test/integration/clitest/test_fs.py +++ b/components/tools/OmeroPy/test/integration/clitest/test_fs.py @@ -19,7 +19,7 @@ # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -from test.integration.clitest.cli import CLITest, RootCLITest +from omero.testlib.cli import CLITest, RootCLITest from omero.cli import NonZeroReturnCode from omero.plugins.fs import FsControl diff --git a/components/tools/OmeroPy/test/integration/clitest/test_group.py b/components/tools/OmeroPy/test/integration/clitest/test_group.py index c1be76c3e15..7091556be0c 100644 --- a/components/tools/OmeroPy/test/integration/clitest/test_group.py +++ b/components/tools/OmeroPy/test/integration/clitest/test_group.py @@ -20,11 +20,11 @@ from omero.plugins.group import GroupControl, defaultperms from omero.cli import NonZeroReturnCode -from test.integration.clitest.cli import CLITest, RootCLITest -from test.integration.clitest.cli import get_user_ids, get_group_ids -from test.integration.clitest.cli import GroupIdNameFixtures -from test.integration.clitest.cli import GroupFixtures -from test.integration.clitest.cli import UserFixtures +from omero.testlib.cli import CLITest, RootCLITest +from omero.testlib.cli import get_user_ids, get_group_ids +from omero.testlib.cli import GroupIdNameFixtures +from omero.testlib.cli import GroupFixtures +from omero.testlib.cli import UserFixtures import pytest GroupNames = [str(x) for x in GroupFixtures] diff --git a/components/tools/OmeroPy/test/integration/clitest/test_import.py b/components/tools/OmeroPy/test/integration/clitest/test_import.py index 69ef9d12d41..e33ab491105 100644 --- a/components/tools/OmeroPy/test/integration/clitest/test_import.py +++ b/components/tools/OmeroPy/test/integration/clitest/test_import.py @@ -21,7 +21,7 @@ plugin = __import__('omero.plugins.import', globals(), locals(), ['ImportControl'], -1) ImportControl = plugin.ImportControl -from test.integration.clitest.cli import CLITest +from omero.testlib.cli import CLITest import pytest import stat import re diff --git a/components/tools/OmeroPy/test/integration/clitest/test_ldap.py b/components/tools/OmeroPy/test/integration/clitest/test_ldap.py index 607e15c26bf..65d54e4b55b 100644 --- a/components/tools/OmeroPy/test/integration/clitest/test_ldap.py +++ b/components/tools/OmeroPy/test/integration/clitest/test_ldap.py @@ -19,7 +19,7 @@ # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -from test.integration.clitest.cli import CLITest +from omero.testlib.cli import CLITest from omero.cli import NonZeroReturnCode from omero.plugins.ldap import LdapControl diff --git a/components/tools/OmeroPy/test/integration/clitest/test_metadata.py b/components/tools/OmeroPy/test/integration/clitest/test_metadata.py index e219ea5ea2c..fa499b73ede 100644 --- a/components/tools/OmeroPy/test/integration/clitest/test_metadata.py +++ b/components/tools/OmeroPy/test/integration/clitest/test_metadata.py @@ -27,7 +27,7 @@ from omero.gateway import BlitzGateway from omero.plugins.metadata import Metadata, MetadataControl from omero.rtypes import rdouble, unwrap -from test.integration.clitest.cli import CLITest +from omero.testlib.cli import CLITest class MetadataTestBase(CLITest): diff --git a/components/tools/OmeroPy/test/integration/clitest/test_obj.py b/components/tools/OmeroPy/test/integration/clitest/test_obj.py index af156d86e19..89de2ba196a 100644 --- a/components/tools/OmeroPy/test/integration/clitest/test_obj.py +++ b/components/tools/OmeroPy/test/integration/clitest/test_obj.py @@ -23,7 +23,7 @@ import pytest import omero -from test.integration.clitest.cli import CLITest +from omero.testlib.cli import CLITest from omero_model_NamespaceI import NamespaceI from omero.plugins.obj import ObjControl from omero.util.temp_files import create_path diff --git a/components/tools/OmeroPy/test/integration/clitest/test_script.py b/components/tools/OmeroPy/test/integration/clitest/test_script.py index ab8941f3ba1..50703d7a32d 100644 --- a/components/tools/OmeroPy/test/integration/clitest/test_script.py +++ b/components/tools/OmeroPy/test/integration/clitest/test_script.py @@ -9,7 +9,7 @@ """ -from test.integration.clitest.cli import CLITest +from omero.testlib.cli import CLITest from omero.plugins.script import ScriptControl from omero.util.temp_files import create_path diff --git a/components/tools/OmeroPy/test/integration/clitest/test_search.py b/components/tools/OmeroPy/test/integration/clitest/test_search.py index ac11b13966c..3462acfacd6 100644 --- a/components/tools/OmeroPy/test/integration/clitest/test_search.py +++ b/components/tools/OmeroPy/test/integration/clitest/test_search.py @@ -26,7 +26,7 @@ from datetime import datetime from datetime import timedelta -from test.integration.clitest.cli import CLITest +from omero.testlib.cli import CLITest from omero.cli import NonZeroReturnCode from omero.model import DatasetI from omero.plugins.search import SearchControl diff --git a/components/tools/OmeroPy/test/integration/clitest/test_sessions.py b/components/tools/OmeroPy/test/integration/clitest/test_sessions.py index ab2eac7e636..dcf5a80eaf7 100755 --- a/components/tools/OmeroPy/test/integration/clitest/test_sessions.py +++ b/components/tools/OmeroPy/test/integration/clitest/test_sessions.py @@ -19,7 +19,7 @@ # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -from test.integration.clitest.cli import CLITest +from omero.testlib.cli import CLITest from omero.cli import NonZeroReturnCode from omero.model import Experimenter import pytest diff --git a/components/tools/OmeroPy/test/integration/clitest/test_tag.py b/components/tools/OmeroPy/test/integration/clitest/test_tag.py index f133c11a21f..e6792b2ce60 100644 --- a/components/tools/OmeroPy/test/integration/clitest/test_tag.py +++ b/components/tools/OmeroPy/test/integration/clitest/test_tag.py @@ -25,7 +25,7 @@ from omero.plugins.tag import TagControl from omero.cli import NonZeroReturnCode from omero.testlib import PFS -from test.integration.clitest.cli import CLITest +from omero.testlib.cli import CLITest from omero.rtypes import rstring, rlong from omero.util.temp_files import create_path import __builtin__ diff --git a/components/tools/OmeroPy/test/integration/clitest/test_upload.py b/components/tools/OmeroPy/test/integration/clitest/test_upload.py index b61d0f7602a..b1d0c8b49ec 100644 --- a/components/tools/OmeroPy/test/integration/clitest/test_upload.py +++ b/components/tools/OmeroPy/test/integration/clitest/test_upload.py @@ -21,7 +21,7 @@ import pytest -from test.integration.clitest.cli import CLITest +from omero.testlib.cli import CLITest from omero.cli import NonZeroReturnCode from omero.plugins.obj import ObjControl from omero.plugins.upload import UploadControl diff --git a/components/tools/OmeroPy/test/integration/clitest/test_user.py b/components/tools/OmeroPy/test/integration/clitest/test_user.py index aab523c9421..f4b5e04d902 100644 --- a/components/tools/OmeroPy/test/integration/clitest/test_user.py +++ b/components/tools/OmeroPy/test/integration/clitest/test_user.py @@ -22,11 +22,11 @@ from omero.cli import NonZeroReturnCode from omero.rtypes import rstring from omero.plugins.user import UserControl -from test.integration.clitest.cli import CLITest, RootCLITest -from test.integration.clitest.cli import get_user_ids, get_group_ids -from test.integration.clitest.cli import UserIdNameFixtures -from test.integration.clitest.cli import GroupFixtures -from test.integration.clitest.cli import UserFixtures +from omero.testlib.cli import CLITest, RootCLITest +from omero.testlib.cli import get_user_ids, get_group_ids +from omero.testlib.cli import UserIdNameFixtures +from omero.testlib.cli import GroupFixtures +from omero.testlib.cli import UserFixtures from Glacier2 import PermissionDeniedException import getpass import pytest