Esempio n. 1
0
    def test_antistampede(self):
        SECONDS = 4
        # We MUST make an initial synchronous request in order to create the
        # AntiStampedeCache object, and populate its selecting_headers,
        # before the actual stampede.
        self.getPage("/long_process?seconds=%d" % SECONDS)
        self.assertBody('success!')
        self.getPage("/clear_cache?path=" +
                     quote('/long_process?seconds=%d' % SECONDS, safe=''))
        self.assertStatus(200)

        start = datetime.datetime.now()

        def run():
            self.getPage("/long_process?seconds=%d" % SECONDS)
            # The response should be the same every time
            self.assertBody('success!')

        ts = [threading.Thread(target=run) for i in xrange(100)]
        for t in ts:
            t.start()
        for t in ts:
            t.join()
        self.assertEqualDates(
            start,
            datetime.datetime.now(),
            # Allow a second (two, for slow hosts)
            # for our thread/TCP overhead etc.
            seconds=SECONDS + 2)
Esempio n. 2
0
    def test_antistampede(self):
        SECONDS = 4
        self.getPage('/long_process?seconds=%d' % SECONDS)
        self.assertBody('success!')
        self.getPage('/clear_cache?path=' +
                     quote('/long_process?seconds=%d' % SECONDS, safe=''))
        self.assertStatus(200)
        sys.stdout.write('prepped... ')
        sys.stdout.flush()
        start = datetime.datetime.now()

        def run():
            self.getPage('/long_process?seconds=%d' % SECONDS)
            self.assertBody('success!')

        ts = [threading.Thread(target=run) for i in xrange(100)]
        for t in ts:
            t.start()

        for t in ts:
            t.join()

        self.assertEqualDates(start,
                              datetime.datetime.now(),
                              seconds=SECONDS + 1.1)
Esempio n. 3
0
    def test_antistampede(self):
        SECONDS = 4
        # We MUST make an initial synchronous request in order to create the
        # AntiStampedeCache object, and populate its selecting_headers,
        # before the actual stampede.
        self.getPage("/long_process?seconds=%d" % SECONDS)
        self.assertBody('success!')
        self.getPage("/clear_cache?path=" +
                     quote('/long_process?seconds=%d' % SECONDS, safe=''))
        self.assertStatus(200)

        start = datetime.datetime.now()

        def run():
            self.getPage("/long_process?seconds=%d" % SECONDS)
            # The response should be the same every time
            self.assertBody('success!')
        ts = [threading.Thread(target=run) for i in xrange(100)]
        for t in ts:
            t.start()
        for t in ts:
            t.join()
        self.assertEqualDates(start, datetime.datetime.now(),
                              # Allow a second (two, for slow hosts)
                              # for our thread/TCP overhead etc.
                              seconds=SECONDS + 2)
Esempio n. 4
0
    def test_antistampede(self):
        SECONDS = 4
        slow_url = "/long_process?seconds={SECONDS}".format(**locals())
        # We MUST make an initial synchronous request in order to create the
        # AntiStampedeCache object, and populate its selecting_headers,
        # before the actual stampede.
        self.getPage(slow_url)
        self.assertBody('success!')
        self.getPage("/clear_cache?path=" + quote(slow_url, safe=''))
        self.assertStatus(200)

        start = datetime.datetime.now()

        def run():
            self.getPage(slow_url)
            # The response should be the same every time
            self.assertBody('success!')

        ts = [threading.Thread(target=run) for i in xrange(100)]
        for t in ts:
            t.start()
        for t in ts:
            t.join()
        finish = datetime.datetime.now()
        # Allow for overhead, two seconds for slow hosts
        allowance = SECONDS + 2
        self.assertEqualDates(start, finish, seconds=allowance)
Esempio n. 5
0
    def test_antistampede(self):
        SECONDS = 4
        slow_url = '/long_process?seconds={SECONDS}'.format(**locals())
        # We MUST make an initial synchronous request in order to create the
        # AntiStampedeCache object, and populate its selecting_headers,
        # before the actual stampede.
        self.getPage(slow_url)
        self.assertBody('success!')
        self.getPage('/clear_cache?path=' + quote(slow_url, safe=''))
        self.assertStatus(200)

        start = datetime.datetime.now()

        def run():
            self.getPage(slow_url)
            # The response should be the same every time
            self.assertBody('success!')
        ts = [threading.Thread(target=run) for i in xrange(100)]
        for t in ts:
            t.start()
        for t in ts:
            t.join()
        finish = datetime.datetime.now()
        # Allow for overhead, two seconds for slow hosts
        allowance = SECONDS + 2
        self.assertEqualDates(start, finish, seconds=allowance)
Esempio n. 6
0
def encode_filename(filename):
    """
    Given a filename to be used in a multipart/form-data,
    encode the name. Return the key and encoded filename.
    """
    if is_ascii(filename):
        return 'filename', '"{filename}"'.format(**locals())
    encoded = quote(filename, encoding='utf-8')
    return 'filename*', "'".join((
        'UTF-8',
        '',  # lang
        encoded,
    ))
Esempio n. 7
0
    def test_antistampede(self):
        SECONDS = 4
        self.getPage('/long_process?seconds=%d' % SECONDS)
        self.assertBody('success!')
        self.getPage('/clear_cache?path=' + quote('/long_process?seconds=%d' % SECONDS, safe=''))
        self.assertStatus(200)
        sys.stdout.write('prepped... ')
        sys.stdout.flush()
        start = datetime.datetime.now()

        def run():
            self.getPage('/long_process?seconds=%d' % SECONDS)
            self.assertBody('success!')

        ts = [ threading.Thread(target=run) for i in xrange(100) ]
        for t in ts:
            t.start()

        for t in ts:
            t.join()

        self.assertEqualDates(start, datetime.datetime.now(), seconds=SECONDS + 1.1)