Esempio n. 1
0
    def run_queries(self, tc, verify_results = False):
        rest = tc._rconn()

        if not len(self.queries) > 0 :
            self.log.info("No queries to run for this view")
            return

        view_name = self.name

        for query in self.queries:
            params = query.params

            params["debug"] = "true"
            expected_num_docs = query.expected_num_docs
            num_keys = -1

            if expected_num_docs is not None and verify_results:
                attempt = 0
                delay = 15
                results = None

                # first verify all doc_names get reported in the view
                # for windows, we need more than 20+ times
                while attempt < 40 and num_keys != expected_num_docs:
                    self.log.info("Quering view {0} with params: {1}".format(view_name, params));
                    results = ViewBaseTests._get_view_results(tc, rest,
                        "default", view_name, limit=None, extra_params=params)

                    # check if this is a reduced query using _count
                    if self.reduce_fn is '_count':
                        num_keys = self._verify_count_reduce_helper(query, results)
                        self.log.info("{0}: attempt {1} reduced {2} group(s) to value {3} expected: {4}" \
                            .format(view_name, attempt, query.expected_num_groups,
                                    num_keys, expected_num_docs));
                    else:
                        num_keys = len(ViewBaseTests._get_keys(self, results))
                        self.log.info("{0}: attempt {1} retrieved value {2} expected: {3}" \
                            .format(view_name, attempt, num_keys, expected_num_docs));

                    attempt += 1

                    time.sleep(delay)
                if(num_keys != expected_num_docs):
                    msg = "Query failed: {0} Documents Retrieved,  expected {1}"
                    val = msg.format(num_keys, expected_num_docs)
                    try:
                        tc.assertEquals(num_keys, expected_num_docs, val)
                    except Exception as ex:
                        self.log.error(val)
                        self.log.error("Last query result:\n\n%s\n\n" % (json.dumps(results, sort_keys=True, indent=4)))
                        self.results.addFailure(tc, sys.exc_info())
            else:
                # query without verification
                self.log.info("Quering view {0} with params: {1}".format(view_name, params));
                results = ViewBaseTests._get_view_results(tc, rest, "default", view_name,
                                                          limit=None, extra_params=params)