~elopio/ubuntuone-testing/testability-sso

« back to all changes in this revision

Viewing changes to ubuntuone/integration/syncdaemon/helpers.py

  • Committer: Tarmac
  • Author(s): Rick McBride
  • Date: 2012-03-13 19:10:51 UTC
  • mfrom: (79.1.1 removesdinteg)
  • Revision ID: tarmac-20120313191051-985ck2vgsddju91c
sd integration tests are moved to https://code.launchpad.net/~rmcbride/ubuntuone-testing-sd/trunk (project probably needs some tuning)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# -*- coding: utf-8 -*-
2
 
 
3
 
# Copyright 2010 Canonical Ltd.  All rights reserved.
4
 
#
5
 
# Authors:
6
 
#   Facundo Batista <facundo@canonical.com>
7
 
#   Natalia Bidart  <natalia.bidart@canonical.com>
8
 
 
9
 
"""Helpers for the integration tests."""
10
 
 
11
 
 
12
 
import os
13
 
import random
14
 
import time
15
 
 
16
 
import dbus
17
 
 
18
 
from twisted.internet import defer
19
 
 
20
 
 
21
 
LOREM_IPSUM = """Lorem ipsum dolor sit amet, consectetur adipiscing elit.
22
 
Nam dapibus commodo magna, et dignissim eros aliquam nec. Vivamus
23
 
bibendum, mi quis porta volutpat, velit turpis volutpat urna, at tempor
24
 
ante massa at turpis. Nulla at felis ac dui accumsan fermentum. Mauris
25
 
accumsan convallis vehicula. Sed urna justo, mattis feugiat cursus a,
26
 
semper non augue. Ut et congue velit. Fusce non nunc erat. Donec id
27
 
sagittis elit. Curabitur bibendum vulputate accumsan. Nunc pharetra
28
 
molestie orci, a mattis nulla sodales in.
29
 
"""
30
 
 
31
 
def debug(prefix, msg, *args, **kwargs):
32
 
    """Print debug messages."""
33
 
    t = time.time()
34
 
    tstamp = time.strftime("%H:%M:%S", time.localtime(t)) + str(t % 1)[1:5]
35
 
    if 'previous_newline' in kwargs and kwargs['previous_newline']:
36
 
        print
37
 
    print tstamp, prefix, msg, ' '.join(map(str, args))
38
 
 
39
 
 
40
 
def walk_and_list_dir(directory, with_dirname=False):
41
 
    """List every directory and file under dirname.
42
 
 
43
 
    This filters out all support directories.
44
 
    """
45
 
    result = []
46
 
    dir_len = len(directory) + 1
47
 
    for (dirname, dirpath, files) in os.walk(directory):
48
 
        # remove special files from ubuntu one and from tests infrastructure
49
 
        if '.config' in dirname or '.local' in dirname or '.mark' in dirname:
50
 
            continue
51
 
        if not with_dirname:
52
 
            dirname = dirname[dir_len:]
53
 
        result.append(dirname)
54
 
        result.extend([os.path.join(dirname, f) for f in files])
55
 
 
56
 
    # remove bogus empty nothing
57
 
    if '' in result:
58
 
        result.remove('')
59
 
 
60
 
    result.sort()
61
 
    return result
62
 
 
63
 
 
64
 
def create_file_and_add_content(filepath, content=None):
65
 
    """Create a file under filepath and add random content to it."""
66
 
    if content is None:
67
 
        limit = random.randint(0, len(LOREM_IPSUM))
68
 
        content = LOREM_IPSUM[:limit]
69
 
    with open(filepath, 'w') as fd:
70
 
        fd.write(content)
71
 
    return content
72
 
 
73
 
 
74
 
def _is_retry_exception(err):
75
 
    """Check if the exception is a retry one."""
76
 
    if isinstance(err, dbus.exceptions.DBusException):
77
 
        if err.get_dbus_name() == 'org.freedesktop.DBus.Error.NoReply':
78
 
            return True
79
 
    return False
80
 
 
81
 
 
82
 
def retryable(func):
83
 
    """Call the function until its deferred not timeouts (max n times)."""
84
 
 
85
 
    @defer.inlineCallbacks
86
 
    def f(*a, **k):
87
 
        """Built func."""
88
 
        opportunities = 10
89
 
        while opportunities:
90
 
            try:
91
 
                res = yield func(*a, **k)
92
 
            except Exception, err:
93
 
                opportunities -= 1
94
 
                if opportunities == 0 or not _is_retry_exception(err):
95
 
                    raise
96
 
            else:
97
 
                break
98
 
        defer.returnValue(res)
99
 
 
100
 
    return f