示例#1
0
文件: test_db.py 项目: ome/omego
    def test_pgdump(self):
        db = self.PartialMockDb(None, None)
        self.mox.StubOutWithMock(db, 'get_db_args_env')
        self.mox.StubOutWithMock(External, 'run')

        pgdumpargs = ['-d', 'name', '-h', 'host', '-U', 'user',
                      '-w', 'arg1', 'arg2']
        db.get_db_args_env().AndReturn(self.create_db_test_params())
        External.run('pg_dump', pgdumpargs, capturestd=True,
                     env={'PGPASSWORD': '******'}).AndReturn(('', ''))
        self.mox.ReplayAll()

        db.pgdump('arg1', 'arg2')
        self.mox.VerifyAll()
示例#2
0
    def test_pgdump(self):
        db = self.PartialMockDb(None, None)
        self.mox.StubOutWithMock(db, 'get_db_args_env')
        self.mox.StubOutWithMock(External, 'run')

        pgdumpargs = [
            '-d', 'name', '-h', 'host', '-U', 'user', '-w', 'arg1', 'arg2'
        ]
        db.get_db_args_env().AndReturn(self.create_db_test_params())
        External.run('pg_dump',
                     pgdumpargs,
                     capturestd=True,
                     env={
                         'PGPASSWORD': '******'
                     }).AndReturn(('', ''))
        self.mox.ReplayAll()

        db.pgdump('arg1', 'arg2')
        self.mox.VerifyAll()
示例#3
0
    def test_psql(self, dbname):
        args = self.Args({'dbhost': 'host', 'dbname': dbname,
                          'dbuser': '******', 'dbpass': '******'})

        self.mox.StubOutWithMock(os.environ, 'copy')
        self.mox.StubOutWithMock(External, 'run')

        if dbname:
            os.environ.copy().AndReturn({'PGPASSWORD': '******'})
            psqlargs = ['-d', dbname, '-h', 'host', '-U', 'user',
                        '-w', '-A', '-t', 'arg1', 'arg2']
            External.run('psql', psqlargs, capturestd=True,
                         env={'PGPASSWORD': '******'}).AndReturn(('', ''))
        self.mox.ReplayAll()

        db = self.PartialMockDb(args, None)
        if dbname:
            db.psql('arg1', 'arg2')
        else:
            with pytest.raises(Exception) as excinfo:
                db.psql('arg1', 'arg2')
            assert str(excinfo.value) == 'Database name required'

        self.mox.VerifyAll()
示例#4
0
 def setup_method(self, method):
     self.ext = External()
     self.mox = mox.Mox()
     self.envfilename = 'test.env'
示例#5
0
class TestExternal(object):

    def setup_method(self, method):
        self.ext = External()
        self.mox = mox.Mox()
        self.envfilename = 'test.env'

    def teardown_method(self, method):
        self.mox.UnsetStubs()

    def create_dummy_server_dir(self, d):
        # d must be a pytest tmpdir object
        d.ensure('lib', 'python', 'omero', 'cli', dir=True)
        d.ensure('etc', 'grid', dir=True)
        d.ensure('bin', dir=True)

        f = d.join(self.envfilename)
        f.write('TEST_ENVVAR1=abcde\nTEST_ENVVAR2=1=2=3=4=5\n')

    @pytest.mark.parametrize('configured', [True, False])
    def test_set_server_dir_and_has_config(self, tmpdir, configured):
        self.create_dummy_server_dir(tmpdir)
        if configured:
            tmpdir.ensure('etc', 'grid', 'config.xml')

        with pytest.raises(Exception) as excinfo:
            self.ext.has_config()
        assert str(excinfo.value) == 'No server directory set'

        with tmpdir.as_cwd():
            self.ext.set_server_dir('.')

        assert self.ext.dir == str(tmpdir)
        assert self.ext.has_config() == configured

        # Creating a config file should not change the original state
        tmpdir.ensure('etc', 'grid', 'config.xml')
        assert self.ext.has_config() == configured

    # def test_get_config(self):
    # Not easily testable since it requires the omero module

    # def test_setup_omero_cli(self):
    # Not easily testable since it does a direct import

    def test_setup_previous_omero_env(self, tmpdir):
        self.create_dummy_server_dir(tmpdir)
        savevarsfile = str(tmpdir.join(self.envfilename))

        self.ext.setup_previous_omero_env(str(tmpdir), savevarsfile)
        env = self.ext.old_env
        assert env['PATH'].split(':', 1)[0] == os.path.join(str(tmpdir), 'bin')
        assert env['PYTHONPATH'].split(':', 1)[0] == os.path.join(
            str(tmpdir), 'lib', 'python')
        assert env['TEST_ENVVAR1'] == 'abcde'
        assert env['TEST_ENVVAR2'] == '1=2=3=4=5'

    def test_omero_cli(self):
        class MockCli:
            def invoke(*args, **kwargs):
                assert args[1:] == (['arg1', 'arg2'], )
                assert kwargs == {'strict': True}

        self.ext.cli = MockCli()
        self.ext.omero_cli(['arg1', 'arg2'])

    def test_omero_bin(self):
        env = {'TEST': 'test'}
        self.ext.old_env = env
        self.mox.StubOutWithMock(self.ext, 'run')
        self.ext.run('omero', ['arg1', 'arg2'], capturestd=True, env=env
                     ).AndReturn(0)
        self.mox.ReplayAll()

        self.ext.omero_bin(['arg1', 'arg2'])
        self.mox.VerifyAll()

    @pytest.mark.parametrize('retcode', [0, 1])
    @pytest.mark.parametrize('capturestd', [True, False])
    @pytest.mark.parametrize('windows', [True, False])
    def test_run(self, tmpdir, retcode, capturestd, windows):
        env = {'TEST': 'test'}
        self.mox.StubOutWithMock(subprocess, 'call')
        self.mox.StubOutWithMock(tempfile, 'TemporaryFile')
        self.mox.StubOutWithMock(omego.external, 'WINDOWS')

        omego.external.WINDOWS = windows

        if capturestd:
            outfile = open(str(tmpdir.join('std.out')), 'w+')
            outfile.write('out')
            errfile = open(str(tmpdir.join('std.err')), 'w+')
            errfile.write('err')

            tempfile.TemporaryFile().AndReturn(outfile)
            tempfile.TemporaryFile().AndReturn(errfile)
            subprocess.call(
                ['test', 'arg1', 'arg2'], env=env, shell=windows,
                stdout=outfile, stderr=errfile).AndReturn(retcode)
        else:
            subprocess.call(
                ['test', 'arg1', 'arg2'], env=env, shell=windows,
                stdout=None, stderr=None).AndReturn(retcode)
        self.mox.ReplayAll()

        if retcode == 0:
            stdout, stderr = self.ext.run(
                'test', ['arg1', 'arg2'], capturestd, env)
        else:
            with pytest.raises(RunException) as excinfo:
                self.ext.run('test', ['arg1', 'arg2'], capturestd, env)
            exc = excinfo.value
            assert exc.r == 1
            assert exc.message == 'Non-zero return code'
            stdout = exc.stdout
            stderr = exc.stderr

        if capturestd:
            assert stdout == 'out'
            assert stderr == 'err'
            outfile.close()
            errfile.close()
        else:
            assert stdout is None
            assert stderr is None

        self.mox.VerifyAll()

    def test_get_environment(self, tmpdir):
        self.create_dummy_server_dir(tmpdir)
        savevarsfile = str(tmpdir.join(self.envfilename))
        env = self.ext.get_environment(savevarsfile)
        assert env['TEST_ENVVAR1'] == 'abcde'
        assert env['TEST_ENVVAR2'] == '1=2=3=4=5'

    def test_save_env_vars(self, tmpdir):
        savevarsfile = str(tmpdir.join(self.envfilename))

        self.mox.StubOutWithMock(os.environ, 'get')
        os.environ.get('TEST_ENVVAR1', '').AndReturn('abcde')
        self.mox.ReplayAll()

        self.ext.save_env_vars(savevarsfile, ['TEST_ENVVAR1'])
        with open(savevarsfile) as f:
            s = f.read()
        assert s == 'TEST_ENVVAR1=abcde\n'
        self.mox.VerifyAll()
示例#6
0
 def setup_method(self, method):
     self.ext = External()
     self.mox = mox.Mox()
     self.envfilename = 'test.env'
示例#7
0
class TestExternal(object):
    def setup_method(self, method):
        self.ext = External()
        self.mox = mox.Mox()
        self.envfilename = 'test.env'

    def teardown_method(self, method):
        self.mox.UnsetStubs()

    def create_dummy_server_dir(self, d):
        # d must be a pytest tmpdir object
        d.ensure('lib', 'python', 'omero', 'cli', dir=True)
        d.ensure('etc', 'grid', dir=True)
        d.ensure('bin', dir=True)

        f = d.join(self.envfilename)
        f.write('TEST_ENVVAR1=abcde\nTEST_ENVVAR2=1=2=3=4=5\n')

    @pytest.mark.parametrize('configured', [True, False])
    def test_set_server_dir_and_has_config(self, tmpdir, configured):
        self.create_dummy_server_dir(tmpdir)
        if configured:
            tmpdir.ensure('etc', 'grid', 'config.xml')

        with pytest.raises(Exception) as excinfo:
            self.ext.has_config()
        assert str(excinfo.value) == 'No server directory set'

        with tmpdir.as_cwd():
            self.ext.set_server_dir('.')

        assert self.ext.dir == str(tmpdir)
        assert self.ext.has_config() == configured

        # Creating a config file should not change the original state
        tmpdir.ensure('etc', 'grid', 'config.xml')
        assert self.ext.has_config() == configured

    # def test_get_config(self):
    # Not easily testable since it requires the omero module

    # def test_setup_omero_cli(self):
    # Not easily testable since it does a direct import

    def test_setup_previous_omero_env(self, tmpdir):
        self.create_dummy_server_dir(tmpdir)
        savevarsfile = str(tmpdir.join(self.envfilename))

        self.ext.setup_previous_omero_env(str(tmpdir), savevarsfile)
        env = self.ext.old_env
        assert env['PATH'].split(':', 1)[0] == os.path.join(str(tmpdir), 'bin')
        assert env['PYTHONPATH'].split(':', 1)[0] == os.path.join(
            str(tmpdir), 'lib', 'python')
        assert env['TEST_ENVVAR1'] == 'abcde'
        assert env['TEST_ENVVAR2'] == '1=2=3=4=5'

    def test_omero_cli(self):
        class MockCli:
            def invoke(*args, **kwargs):
                assert args[1:] == (['arg1', 'arg2'], )
                assert kwargs == {'strict': True}

        self.ext.cli = MockCli()
        self.ext.omero_cli(['arg1', 'arg2'])

    def test_omero_bin(self):
        env = {'TEST': 'test'}
        self.ext.old_env = env
        self.mox.StubOutWithMock(self.ext, 'run')
        self.ext.run('omero', ['arg1', 'arg2'], capturestd=True,
                     env=env).AndReturn(0)
        self.mox.ReplayAll()

        self.ext.omero_bin(['arg1', 'arg2'])
        self.mox.VerifyAll()

    @pytest.mark.parametrize('retcode', [0, 1])
    @pytest.mark.parametrize('capturestd', [True, False])
    @pytest.mark.parametrize('windows', [True, False])
    def test_run(self, tmpdir, retcode, capturestd, windows):
        env = {'TEST': 'test'}
        self.mox.StubOutWithMock(subprocess, 'call')
        self.mox.StubOutWithMock(tempfile, 'TemporaryFile')
        self.mox.StubOutWithMock(omego.external, 'WINDOWS')

        omego.external.WINDOWS = windows

        if capturestd:
            outfile = open(str(tmpdir.join('std.out')), 'w+')
            outfile.write('out')
            errfile = open(str(tmpdir.join('std.err')), 'w+')
            errfile.write('err')

            tempfile.TemporaryFile().AndReturn(outfile)
            tempfile.TemporaryFile().AndReturn(errfile)
            subprocess.call(['test', 'arg1', 'arg2'],
                            env=env,
                            shell=windows,
                            stdout=outfile,
                            stderr=errfile).AndReturn(retcode)
        else:
            subprocess.call(['test', 'arg1', 'arg2'],
                            env=env,
                            shell=windows,
                            stdout=None,
                            stderr=None).AndReturn(retcode)
        self.mox.ReplayAll()

        if retcode == 0:
            stdout, stderr = self.ext.run('test', ['arg1', 'arg2'], capturestd,
                                          env)
        else:
            with pytest.raises(RunException) as excinfo:
                self.ext.run('test', ['arg1', 'arg2'], capturestd, env)
            exc = excinfo.value
            assert exc.r == 1
            assert exc.message == 'Non-zero return code'
            stdout = exc.stdout
            stderr = exc.stderr

        if capturestd:
            assert stdout == 'out'
            assert stderr == 'err'
            outfile.close()
            errfile.close()
        else:
            assert stdout is None
            assert stderr is None

        self.mox.VerifyAll()

    def test_get_environment(self, tmpdir):
        self.create_dummy_server_dir(tmpdir)
        savevarsfile = str(tmpdir.join(self.envfilename))
        env = self.ext.get_environment(savevarsfile)
        assert env['TEST_ENVVAR1'] == 'abcde'
        assert env['TEST_ENVVAR2'] == '1=2=3=4=5'

    def test_save_env_vars(self, tmpdir):
        savevarsfile = str(tmpdir.join(self.envfilename))

        self.mox.StubOutWithMock(os.environ, 'get')
        os.environ.get('TEST_ENVVAR1', '').AndReturn('abcde')
        self.mox.ReplayAll()

        self.ext.save_env_vars(savevarsfile, ['TEST_ENVVAR1'])
        with open(savevarsfile) as f:
            s = f.read()
        assert s == 'TEST_ENVVAR1=abcde\n'
        self.mox.VerifyAll()