Introduce RemoteHost and refactor code to use it

Let's move code related to coping stuff to remote hosts and managing
remote processes under a class where relevant information is stored.
This simplifies parameters being passed all over and allows to reuse
more code.

Change-Id: Ifff5ded8fdb28e8ef267cebe6c5f30a910cae11a
diff --git a/src/osmo_gsm_tester/bts_oc2g.py b/src/osmo_gsm_tester/bts_oc2g.py
index ec4ed3d..7b46fc8 100644
--- a/src/osmo_gsm_tester/bts_oc2g.py
+++ b/src/osmo_gsm_tester/bts_oc2g.py
@@ -41,14 +41,6 @@
     def _direct_pcu_enabled(self):
         return util.str2bool(self.conf.get('direct_pcu'))
 
-    def launch_remote(self, name, popen_args, remote_cwd=None, keepalive=False):
-        run_dir = self.run_dir.new_dir(name)
-        proc = process.RemoteProcess(name, run_dir, self.remote_user, self.remote_addr(), remote_cwd,
-                                     popen_args)
-        self.suite_run.remember_to_stop(proc, keepalive)
-        proc.launch()
-        return proc
-
     def create_pcu(self):
         return pcu_oc2g.OsmoPcuOC2G(self.suite_run, self, self.conf)
 
@@ -116,15 +108,19 @@
         if not self.inst.isfile('bin', OsmoBtsOC2G.BTS_OC2G_BIN):
             raise log.Error('No osmo-bts-oc2g binary in', self.inst)
 
-        remote_run_dir = util.Dir(OsmoBtsOC2G.REMOTE_DIR)
-
-        self.remote_inst = process.copy_inst_ssh(self.run_dir, self.inst, remote_run_dir, self.remote_user,
-                                         self.remote_addr(), OsmoBtsOC2G.BTS_OC2G_BIN, self.config_file)
-
+        rem_host = remote.RemoteHost(self.run_dir, self.remote_user, self.remote_addr())
+        remote_prefix_dir = util.Dir(OsmoBtsOC2G.REMOTE_DIR)
+        self.remote_inst = util.Dir(remote_prefix_dir.child(os.path.basename(str(self.inst))))
+        remote_run_dir = util.Dir(remote_prefix_dir.child(OsmoBtsOC2G.BTS_OC2G_BIN))
         remote_config_file = remote_run_dir.child(OsmoBtsOC2G.BTS_OC2G_CFG)
-        remote_lib = self.remote_inst.child('lib')
-        remote_binary = self.remote_inst.child('bin', 'osmo-bts-oc2g')
 
+        rem_host.recreate_remote_dir(self.remote_inst)
+        rem_host.scp('scp-inst-to-remote', str(self.inst), remote_prefix_dir)
+        rem_host.create_remote_dir(remote_run_dir)
+        rem_host.scp('scp-cfg-to-remote', self.config_file, remote_config_file)
+
+        remote_lib = self.remote_inst.child('lib')
+        remote_binary = self.remote_inst.child('bin', OsmoBtsOC2G.BTS_OC2G_BIN)
         args = ('LD_LIBRARY_PATH=%s' % remote_lib,
          remote_binary, '-c', remote_config_file, '-r', '1',
          '-i', self.bsc.addr())
@@ -132,6 +128,7 @@
         if self._direct_pcu_enabled():
             args += ('-M',)
 
-        self.proc_bts = self.launch_remote('osmo-bts-oc2g', args, remote_cwd=remote_run_dir, keepalive=keepalive)
-
+        proc = rem_host.RemoteProcess(OsmoBtsOC2G.BTS_OC2G_BIN, args)
+        self.suite_run.remember_to_stop(proc, keepalive)
+        proc.launch()
 # vim: expandtab tabstop=4 shiftwidth=4