Beispiel #1
0
class VM():
    host = None
    path = None
    username = None
    password = None
    IP = None

    def __init__(self, host, bundle_dir, vmcfg, assignment):
        self.host = host
        self.bundle_dir = bundle_dir
        self.vmcfg = vmcfg
        self.assignment = assignment

        self.asscfg = vmcfg.assignments()
        self.machine = self.asscfg.get(assignment, 'Machine')
        self.machinecfg = VmwareMachineConfig(vmcfg, self.machine)
        self.vmwarecfg = VmwareConfig(vmcfg.testers(),
                                      self.machinecfg.get_tester_id())
        self.error_fname = os.path.join(bundle_dir, 'vmchecker-stderr.vmr')
        self.shell = self.machinecfg.guest_shell_path()

        self.username = self.machinecfg.guest_user()
        self.password = self.machinecfg.guest_pass()

    def executeCommand(self, cmd):
        # host.executeCommand(...)
        pass

    def executeNativeCommand(self, cmd):
        # there is no default need for native commands
        return self.executeCommand(cmd)

    def hasStarted(self):
        return False

    def start(self):
        pass

    def stop(self):
        pass

    def revert(self, number=None):
        pass

    def copyTo(self, targetDir, sourceDir, files):
        pass

    def copyFrom(self, targetDir, sourceDir, files):
        pass

    def run(self, shell, executable_file, timeout):
        pass

    def runTest(self, bundle_dir, machinecfg, test):
        """ originally named  def copy_files_and_run_script(vm, bundle_dir, machinecfg, test) """
        try:
            files_to_copy = test['input'] + test['script']
            guest_dest_dir = machinecfg.guest_base_path()
            self.copyTo(bundle_dir, guest_dest_dir, files_to_copy)
            for script in test['script']:
                shell = machinecfg.guest_shell_path()
                dest_in_guest_shell = machinecfg.guest_home_in_shell()
                script_in_guest_shell = dest_in_guest_shell + script
                timedout = self.run(shell, script_in_guest_shell,
                                    test['timeout'])
                self.copyFrom(guest_dest_dir, bundle_dir, test['output'])
                if timedout:
                    return False
        except:
            _logger.exception('error in copy_files_and_run_script')
        finally:
            return True

    def try_power_on_vm_and_login(self):
        if self.asscfg.revert_to_snapshot(self.assignment):
            self.revert()

        self.start()
        return True

    def test_submission(self, buildcfg=None):
        success = self.try_power_on_vm_and_login()
        if not success:
            _logger.error('Could not power on or login on the VM')
            self.stop()
            sys.exit(1)

        # start host commands
        host_command = self.vmcfg.get(self.machine, 'HostCommand', default='')
        host_command_data = self.host.start_host_commands(
            self.bundle_dir, host_command)

        timeout = self.asscfg.get(self.assignment, 'Timeout')
        try:
            if buildcfg == None:
                buildcfg = {
                    'input': ['archive.zip', 'tests.zip'],
                    'script': ['build.sh'],
                    'output': ['build-stdout.vmr', 'build-stderr.vmr'],
                    'timeout': int(timeout),
                }
                if not self.runTest(self.bundle_dir, self.machinecfg,
                                    buildcfg):
                    _logger.info('Build failed')
                    return

                testcfg = {
                    'input': [],
                    'script': ['run.sh'],
                    'output': ['run-stdout.vmr', 'run-stderr.vmr'],
                    'timeout': int(timeout)
                }
                self.runTest(self.bundle_dir, self.machinecfg, testcfg)
            else:
                self.runTest(self.bundle_dir, self.machinecfg, buildcfg)
        except Exception:
            _logger.exception('F**K! Exception!RUUUUUUUN!!!')
        finally:
            self.host.stop_host_commands(host_command_data)
            self.stop()
Beispiel #2
0
class VM():
    host 	= None
    path 	= None
    username	= None
    password	= None
    IP	= None
    def __init__(self, host, bundle_dir, vmcfg, assignment):
        self.host = host
        self.bundle_dir = bundle_dir
        self.vmcfg = vmcfg
        self.assignment = assignment

        self.asscfg  = vmcfg.assignments()
        self.machine = self.asscfg.get(assignment, 'Machine')
        self.machinecfg = VmwareMachineConfig(vmcfg, self.machine)
        self.vmwarecfg = VmwareConfig(vmcfg.testers(), self.machinecfg.get_tester_id())
        self.error_fname = os.path.join(bundle_dir, 'vmchecker-stderr.vmr')
        self.shell = self.machinecfg.guest_shell_path()

        self.username = self.machinecfg.guest_user()
        self.password = self.machinecfg.guest_pass()

    def executeCommand(self, cmd):
        # host.executeCommand(...)
        pass

    def executeNativeCommand(self, cmd):
        # there is no default need for native commands
        return self.executeCommand(cmd)

    def hasStarted(self):
        return False

    def start(self):
        pass
        
    def stop(self):
        pass
        
    def revert(self, number = None):
        pass
        
    def copyTo(self, targetDir, sourceDir, files):
        pass

    def copyFrom(self, targetDir, sourceDir, files):
        pass
        
    def run(self, shell, executable_file, timeout):
        pass
        
    def runTest(self, bundle_dir, machinecfg, test):
        """ originally named  def copy_files_and_run_script(vm, bundle_dir, machinecfg, test) """
        try:
            files_to_copy = test['input'] + test['script']
            guest_dest_dir = machinecfg.guest_base_path()
            self.copyTo(bundle_dir,guest_dest_dir,files_to_copy)
            for script in test['script']:
                shell = machinecfg.guest_shell_path()
                dest_in_guest_shell = machinecfg.guest_home_in_shell()
                script_in_guest_shell = dest_in_guest_shell  + script
                timedout = self.run(shell,script_in_guest_shell,test['timeout'])
                self.copyFrom(guest_dest_dir,bundle_dir,test['output'])
                if timedout:
                    return False
        except:
            _logger.exception('error in copy_files_and_run_script')
        finally:
            return True
        
    def try_power_on_vm_and_login(self):
        if self.asscfg.revert_to_snapshot(self.assignment):
            self.revert()

        self.start()
        return True
        
    def test_submission(self, buildcfg = None):
        success = self.try_power_on_vm_and_login()
        if not success:
            _logger.error('Could not power on or login on the VM')
            self.stop()
            sys.exit(1)

        # start host commands
        host_command = self.vmcfg.get(self.machine, 'HostCommand', default='')
        host_command_data = self.host.start_host_commands(self.bundle_dir, host_command)
        
        timeout = self.asscfg.get(self.assignment, 'Timeout')
        try:
            if buildcfg==None:
                buildcfg = {
                    'input'  : ['archive.zip', 'tests.zip'],
                    'script' : ['build.sh'],
                    'output' : ['build-stdout.vmr', 'build-stderr.vmr'],
                    'timeout': int(timeout),
                    }
                if not self.runTest(self.bundle_dir, self.machinecfg, buildcfg):
                    _logger.info('Build failed')
                    return
            
                testcfg = {
                    'input'  : [],
                    'script' : ['run.sh'],
                    'output' : ['run-stdout.vmr', 'run-stderr.vmr'],
                    'timeout': int(timeout)
                    }
                self.runTest(self.bundle_dir, self.machinecfg, testcfg) 
            else:
                self.runTest(self.bundle_dir, self.machinecfg, buildcfg)
        except Exception:
            _logger.exception('F**K! Exception!RUUUUUUUN!!!')
        finally:
            self.host.stop_host_commands(host_command_data)
            self.stop()