| Index: client/tests/kvm/scripts/virtio_console_guest.py | 
| diff --git a/client/tests/kvm/scripts/virtio_console_guest.py b/client/tests/kvm/scripts/virtio_console_guest.py | 
| index c407231aab3523ebf00bfa51beed08e9a99c89ba..6626593ca3fbef82b0fcbce9ff52b4b79db2ba61 100755 | 
| --- a/client/tests/kvm/scripts/virtio_console_guest.py | 
| +++ b/client/tests/kvm/scripts/virtio_console_guest.py | 
| @@ -14,6 +14,7 @@ import fcntl, traceback, signal | 
|  | 
| DEBUGPATH = "/sys/kernel/debug" | 
| SYSFSPATH = "/sys/class/virtio-ports/" | 
| +DEVPATH = "/dev/virtio-ports/" | 
|  | 
| exiting = False | 
|  | 
| @@ -53,15 +54,16 @@ class VirtioGuest: | 
| return out | 
|  | 
|  | 
| -    def _get_port_status(self): | 
| +    def _get_port_status(self, in_files=None): | 
| """ | 
| Get info about ports from kernel debugfs. | 
|  | 
| +        @param in_files: Array of input files. | 
| @return: Ports dictionary of port properties | 
| """ | 
| ports = {} | 
| not_present_msg = "FAIL: There's no virtio-ports dir in debugfs" | 
| -        if (not os.path.ismount(DEBUGPATH)): | 
| +        if not os.path.ismount(DEBUGPATH): | 
| os.system('mount -t debugfs none %s' % (DEBUGPATH)) | 
| try: | 
| if not os.path.isdir('%s/virtio-ports' % (DEBUGPATH)): | 
| @@ -70,6 +72,22 @@ class VirtioGuest: | 
| print not_present_msg | 
| else: | 
| viop_names = os.listdir('%s/virtio-ports' % (DEBUGPATH)) | 
| +            if in_files is not None: | 
| +                dev_names = os.listdir('/dev') | 
| +                rep = re.compile(r"vport[0-9]p[0-9]+") | 
| +                dev_names = filter(lambda x: rep.match(x) is not None, dev_names) | 
| +                if len(dev_names) != len(in_files): | 
| +                    print ("FAIL: Not all ports were successfully initialized " | 
| +                           "in /dev, only %d from %d." % (len(dev_names), | 
| +                                                          len(in_files))) | 
| +                    return | 
| + | 
| +                if len(viop_names) != len(in_files): | 
| +                    print ("FAIL: Not all ports were successfuly initialized " | 
| +                           "in debugfs, only %d from %d." % (len(viop_names), | 
| +                                                             len(in_files))) | 
| +                    return | 
| + | 
| for name in viop_names: | 
| open_db_file = "%s/virtio-ports/%s" % (DEBUGPATH, name) | 
| f = open(open_db_file, 'r') | 
| @@ -82,30 +100,36 @@ class VirtioGuest: | 
| m = re.match("(\S+): (\S+)", line) | 
| port[m.group(1)] = m.group(2) | 
|  | 
| -                    if (port['is_console'] == "yes"): | 
| +                    if port['is_console'] == "yes": | 
| port["path"] = "/dev/hvc%s" % (port["console_vtermno"]) | 
| # Console works like a serialport | 
| else: | 
| port["path"] = "/dev/%s" % name | 
|  | 
| -                    if (not os.path.exists(port['path'])): | 
| +                    if not os.path.exists(port['path']): | 
| print "FAIL: %s not exist" % port['path'] | 
|  | 
| sysfspath = SYSFSPATH + name | 
| -                    if (not os.path.isdir(sysfspath)): | 
| +                    if not os.path.isdir(sysfspath): | 
| print "FAIL: %s not exist" % (sysfspath) | 
|  | 
| info_name = sysfspath + "/name" | 
| port_name = self._readfile(info_name).strip() | 
| -                    if (port_name != port["name"]): | 
| -                        print ("FAIL: Port info not match \n%s - %s\n%s - %s" % | 
| +                    if port_name != port["name"]: | 
| +                        print ("FAIL: Port info does not match " | 
| +                               "\n%s - %s\n%s - %s" % | 
| (info_name , port_name, | 
| "%s/virtio-ports/%s" % (DEBUGPATH, name), | 
| port["name"])) | 
| +                    dev_ppath = DEVPATH + port_name | 
| +                    if not os.path.exists(dev_ppath): | 
| +                        print "FAIL: Symlink %s does not exist." % dev_ppath | 
| +                    if not os.path.realpath(dev_ppath) != "/dev/name": | 
| +                        print "FAIL: Symlink %s is not correct." % dev_ppath | 
| except AttributeError: | 
| -                    print ("In file " + open_db_file + | 
| -                           " are bad data\n"+ "".join(file).strip()) | 
| -                    print ("FAIL: Fail file data.") | 
| +                    print ("Bad data on file %s:\n%s. " % | 
| +                           (open_db_file, "".join(file).strip())) | 
| +                    print "FAIL: Bad data on file %s." % open_db_file | 
| return | 
|  | 
| ports[port['name']] = port | 
| @@ -114,18 +138,31 @@ class VirtioGuest: | 
| return ports | 
|  | 
|  | 
| +    def check_zero_sym(self): | 
| +        """ | 
| +        Check if port /dev/vport0p0 was created. | 
| +        """ | 
| +        symlink = "/dev/vport0p0" | 
| +        if os.path.exists(symlink): | 
| +            print "PASS: Symlink %s exists." % symlink | 
| +        else: | 
| +            print "FAIL: Symlink %s does not exist." % symlink | 
| + | 
| + | 
| def init(self, in_files): | 
| """ | 
| Init and check port properties. | 
| """ | 
| -        self.ports = self._get_port_status() | 
| +        self.ports = self._get_port_status(in_files) | 
|  | 
| -        if self.ports == None: | 
| +        if self.ports is None: | 
| return | 
| for item in in_files: | 
| if (item[1] != self.ports[item[0]]["is_console"]): | 
| print self.ports | 
| print "FAIL: Host console is not like console on guest side\n" | 
| +                return | 
| + | 
| print "PASS: Init and check virtioconsole files in system." | 
|  | 
|  | 
| @@ -426,7 +463,7 @@ class VirtioGuest: | 
| return ret | 
|  | 
|  | 
| -    def async(self, port, mode=True, exp_val = 0): | 
| +    def async(self, port, mode=True, exp_val=0): | 
| """ | 
| Set port function mode async/sync. | 
|  | 
| @@ -471,11 +508,11 @@ class VirtioGuest: | 
| """ | 
| descriptor = None | 
| path = self.ports[file]["path"] | 
| -        if path != None: | 
| +        if path is not None: | 
| if path in self.files.keys(): | 
| descriptor = self.files[path] | 
| del self.files[path] | 
| -            if descriptor != None: | 
| +            if descriptor is not None: | 
| try: | 
| os.close(descriptor) | 
| except Exception, inst: | 
| @@ -566,7 +603,7 @@ class VirtioGuest: | 
| print "PASS: Sender start" | 
|  | 
|  | 
| -    def send(self, port, length=1, mode=True): | 
| +    def send(self, port, length=1, mode=True, is_static=False): | 
| """ | 
| Send a data of some length | 
|  | 
| @@ -577,14 +614,18 @@ class VirtioGuest: | 
| in_f = self._open([port]) | 
|  | 
| data = "" | 
| -        while len(data) < length: | 
| -            data += "%c" % random.randrange(255) | 
| -        try: | 
| -            writes = os.write(in_f[0], data) | 
| -        except Exception, inst: | 
| -            print inst | 
| -        if not writes: | 
| -            writes = 0 | 
| +        writes = 0 | 
| + | 
| +        if not is_static: | 
| +            while len(data) < length: | 
| +                data += "%c" % random.randrange(255) | 
| +            try: | 
| +                writes = os.write(in_f[0], data) | 
| +            except Exception, inst: | 
| +                print inst | 
| +        else: | 
| +            while len(data) < 4096: | 
| +                data += "%c" % random.randrange(255) | 
| if mode: | 
| while (writes < length): | 
| try: | 
| @@ -632,7 +673,7 @@ class VirtioGuest: | 
| buf = "" | 
| if ret[0]: | 
| buf = os.read(in_f[0], buffer) | 
| -        print ("PASS: Rest in socket: ") + str(buf[10]) | 
| +        print ("PASS: Rest in socket: ") + str(buf[:10]) | 
|  | 
|  | 
| def is_alive(): | 
| @@ -681,6 +722,7 @@ def worker(virt): | 
| traceback.format_exception(exc_type, | 
| exc_value, | 
| exc_traceback)) | 
| +            print "FAIL: Guest command exception." | 
|  | 
|  | 
| def sigusr_handler(sig, frame): | 
| @@ -704,9 +746,9 @@ def main(): | 
| catch = virt.catching_signal() | 
| if catch: | 
| signal.signal(signal.SIGIO, virt) | 
| -        elif catch == False: | 
| +        elif catch is False: | 
| signal.signal(signal.SIGIO, signal.SIG_DFL) | 
| -        if (catch != None): | 
| +        if catch is not None: | 
| virt.use_config.set() | 
| print "PASS: guest_exit" | 
|  | 
|  |