import os import configobj from dvc.main import main from dvc.command.remote import CmdRemoteAdd from dvc.config import Config from tests.basic_env import TestDvc class TestRemote(TestDvc): def test(self): remotes = ['a', 'b', 'c'] self.assertEqual(main(['remote', 'list']), 0) self.assertNotEqual(main(['remote', 'remove', remotes[0]]), 0) for r in remotes: self.assertEqual(main(['remote', 'add', '--default', r, 's3://bucket/name']), 0) self.assertEqual(main(['remote', 'list']), 0) self.assertEqual(main(['remote', 'remove', remotes[0]]), 0) self.assertEqual(main(['remote', 'modify', remotes[0], 'option', 'value']), 0) self.assertEqual(main(['remote', 'list']), 0) def test_failed_write(self): class A(object): system = False glob = False local = False name = 'myremote' url = 's3://remote' unset = False args = A() cmd = CmdRemoteAdd(args) cmd.configobj.write = None ret = cmd.run() self.assertNotEqual(ret, 0) def test_relative_path(self): dname = os.path.join('..', 'path', 'to', 'dir') ret = main(['remote', 'add', 'mylocal', dname]) self.assertEqual(ret, 0) # NOTE: we are in the project's root and config is in .dvc/, so # dir path written to config should be just one level above. rel = os.path.join('..', dname) config = configobj.ConfigObj(self.dvc.config.config_file) self.assertEqual(config['remote "mylocal"']['url'], rel) class TestRemoteRemoveDefault(TestDvc): def test(self): remote = 'mys3' self.assertEqual(main(['remote', 'add', '--default', remote, 's3://bucket/name']), 0) self.assertEqual(main(['remote', 'modify', remote, 'profile', 'default']), 0) self.assertEqual(main(['config', '--local', 'core.remote', remote]), 0) config = configobj.ConfigObj(os.path.join(self.dvc.dvc_dir, Config.CONFIG)) local_config = configobj.ConfigObj(os.path.join(self.dvc.dvc_dir, Config.CONFIG_LOCAL)) self.assertEqual(config[Config.SECTION_CORE] [Config.SECTION_CORE_REMOTE], remote) self.assertEqual(local_config[Config.SECTION_CORE] [Config.SECTION_CORE_REMOTE], remote) self.assertEqual(main(['remote', 'remove', remote]), 0) config = configobj.ConfigObj(os.path.join(self.dvc.dvc_dir, Config.CONFIG)) local_config = configobj.ConfigObj(os.path.join(self.dvc.dvc_dir, Config.CONFIG_LOCAL)) section = Config.SECTION_REMOTE_FMT.format(remote) self.assertTrue(section not in config.keys()) core = config.get(Config.SECTION_CORE, None) if core is not None: self.assertTrue(Config.SECTION_CORE_REMOTE not in core.keys()) core = local_config.get(Config.SECTION_CORE, None) if core is not None: self.assertTrue(Config.SECTION_CORE_REMOTE not in core.keys()) class TestRemoteRemove(TestDvc): def test(self): ret = main(['config', 'core.jobs', '1']) self.assertEqual(ret, 0) remote = 'mys3' ret = main(['remote', 'add', remote, 's3://bucket/name']) self.assertEqual(ret, 0) ret = main(['remote', 'remove', remote]) self.assertEqual(ret, 0) class TestRemoteDefault(TestDvc): def test(self): remote = 'mys3' ret = main(['remote', 'add', 'mys3', 's3://bucket/path']) self.assertEqual(ret, 0) ret = main(['remote', 'default', 'mys3']) self.assertEqual(ret, 0) config_file = os.path.join(self.dvc.dvc_dir, Config.CONFIG) config = configobj.ConfigObj(config_file) default = config[Config.SECTION_CORE][Config.SECTION_CORE_REMOTE] self.assertEqual(default, remote) ret = main(['remote', 'default', '--unset']) self.assertEqual(ret, 0) config = configobj.ConfigObj(config_file) core = config.get(Config.SECTION_CORE) if core is not None: default = core.get(Config.SECTION_CORE_REMOTE) else: default = None self.assertEqual(default, None)