def readXML()

in src/manager.py [0:0]


    def readXML(self, serverfile, testfiles, ssl, all, moresubs={}):

        self.message("trace", "Reading Server Info from \"{s}\"".format(s=serverfile))

        # Open and parse the server config file
        try:
            tree = ElementTree(file=serverfile)
        except ExpatError, e:
            raise RuntimeError("Unable to parse file '%s' because: %s" % (serverfile, e,))

        # Verify that top-level element is correct
        serverinfo_node = tree.getroot()
        if serverinfo_node.tag != src.xmlDefs.ELEMENT_SERVERINFO:
            raise EX_INVALID_CONFIG_FILE
        if not len(serverinfo_node):
            raise EX_INVALID_CONFIG_FILE
        self.server_info.parseXML(serverinfo_node)

        # Setup ssl stuff
        self.server_info.ssl = ssl
        self.server_info.port = self.server_info.sslport if ssl else self.server_info.nonsslport
        self.server_info.port2 = self.server_info.sslport2 if ssl else self.server_info.nonsslport2
        self.server_info.certdir = os.path.join(self.base_dir, self.server_info.certdir) if self.server_info.certdir else ""

        moresubs["$host:"] = "%s://%s" % (
            "https" if ssl else "http", self.server_info.host,
        )
        if (ssl and self.server_info.port != 443) or (not ssl and self.server_info.port != 80):
            moresubs["$host:"] += ":%d" % (self.server_info.port,)
        moresubs["$hostssl:"] = "https://%s" % (self.server_info.host,)
        if self.server_info.sslport != 443:
            moresubs["$hostssl:"] += ":%d" % (self.server_info.sslport,)

        moresubs["$host2:"] = "%s://%s" % (
            "https" if ssl else "http",
            self.server_info.host2,
        )
        if (ssl and self.server_info.port2 != 443) or (not ssl and self.server_info.port2 != 80):
            moresubs["$host2:"] += ":%d" % (self.server_info.port2,)
        moresubs["$hostssl2:"] = "https://%s" % (self.server_info.host2,)
        if self.server_info.sslport2 != 443:
            moresubs["$hostssl2:"] += ":%d" % (self.server_info.sslport2,)

        self.server_info.addsubs(moresubs)

        from src.caldavtest import caldavtest

        def _loadFile(fname, ignore_root=True):
            # Open and parse the config file
            try:
                tree = ElementTree(file=fname)
            except ExpatError, e:
                raise RuntimeError("Unable to parse file '%s' because: %s" % (fname, e,))
            caldavtest_node = tree.getroot()
            if caldavtest_node.tag != src.xmlDefs.ELEMENT_CALDAVTEST:
                if ignore_root:
                    self.message("trace", "Ignoring file \"{f}\" because it is not a test file".format(f=fname))
                    return None
                else:
                    raise EX_INVALID_CONFIG_FILE
            if not len(caldavtest_node):
                raise EX_INVALID_CONFIG_FILE

            self.message("Reading Test Details from \"{f}\"".format(f=fname))
            if self.base_dir:
                fname = fname[len(self.base_dir) + 1:]
            test = caldavtest(self, fname)
            test.parseXML(caldavtest_node)
            return test

        for ctr, testfile in enumerate(testfiles):
            self.message("load", testfile, ctr + 1, len(testfiles))

            # Open and parse the config file
            test = _loadFile(testfile)
            if test is None:
                continue

            # ignore if all mode and ignore-all is set
            if not all or not test.ignore_all:
                self.tests.append(test)

        if self.pretest is not None:
            self.pretest = _loadFile(self.pretest, False)
        if self.posttest is not None:
            self.posttest = _loadFile(self.posttest, False)

        self.message("load", None, ctr + 1, len(testfiles))