def test_init_git(tmp_dir, scm, cloud): tmp_dir.scm_gen({"foo": "foo", "dir": {"bar": "bar"}}, commit="init") rev = scm.get_rev() scm.set_ref(EXEC_HEAD, rev) tmp_dir.gen("foo", "stashed") scm.gitpython.git.stash() rev = scm.resolve_rev("stash@{0}") scm.set_ref(EXEC_MERGE, rev) root_url = URLInfo(str(cloud)) / SSHExecutor.gen_dirname() executor = SSHExecutor( scm, ".", root_dir=root_url.path, host=root_url.host, port=root_url.port, username=TEST_SSH_USER, fs_factory=partial(_ssh_factory, cloud), ) assert root_url.path == executor._repo_abspath fs = cloud._ssh assert fs.exists(posixpath.join(executor._repo_abspath, "foo")) assert fs.exists(posixpath.join(executor._repo_abspath, "dir")) assert fs.exists(posixpath.join(executor._repo_abspath, "dir", "bar"))
def test_init_cache(tmp_dir, dvc, scm, cloud): foo = tmp_dir.dvc_gen("foo", "foo", commit="init")[0].outs[0] rev = scm.get_rev() scm.set_ref(EXEC_HEAD, rev) scm.set_ref(EXEC_MERGE, rev) root_url = cloud / SSHExecutor.gen_dirname() executor = SSHExecutor( scm, ".", root_dir=root_url.path, host=root_url.host, port=root_url.port, username=TEST_SSH_USER, fs_factory=partial(_ssh_factory, cloud), ) executor.init_cache(dvc, rev) fs = cloud._ssh foo_hash = foo.hash_info.value assert fs.exists( posixpath.join( executor._repo_abspath, ".dvc", "cache", foo_hash[:2], foo_hash[2:] ) )
def test_init_from_stash(tmp_dir, scm, dvc, machine_instance, mocker): mock = mocker.patch.object(SSHExecutor, "_from_stash_entry") mock_entry = mocker.Mock() mock_entry.name = "" SSHExecutor.from_stash_entry( dvc, "abc123", mock_entry, machine_name="foo", ) _args, kwargs = mock.call_args assert kwargs["host"] == machine_instance["instance_ip"]
def test_reproduce(tmp_dir, scm, dvc, cloud, exp_stage, mocker): from sshfs import SSHFileSystem as _sshfs rev = scm.get_rev() root_url = cloud / SSHExecutor.gen_dirname() mocker.patch.object(SSHFileSystem, "exists", return_value=True) mock_execute = mocker.patch.object(_sshfs, "execute") info = ExecutorInfo( str(root_url), rev, "machine-foo", str(root_url.path), ".dvc", ) infofile = str((root_url / "foo.run").path) SSHExecutor.reproduce( info, rev, infofile=infofile, fs_factory=partial(_ssh_factory, cloud), ) assert mock_execute.called_once() _name, args, _kwargs = mock_execute.mock_calls[0] assert f"dvc exp exec-run --infofile {infofile}" in args[0]
def test_from_machine(tmp_dir, scm, dvc, machine_instance, mocker): mocker.patch.object(SSHExecutor, "_init_git") executor = SSHExecutor.from_machine(dvc.machine, "foo", scm, "") assert executor.host == machine_instance["instance_ip"]