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()
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()
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()
def setup_method(self, method): self.ext = External() self.mox = mox.Mox() self.envfilename = 'test.env'
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()
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()