~ken-vandine/ubuntu-system-settings/no_s_i_d

« back to all changes in this revision

Viewing changes to tests/autopilot/ubuntu_system_settings/utils/mock_update_click_server.py

merged trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
5
5
 
6
6
from datetime import datetime
7
7
from http.server import BaseHTTPRequestHandler, HTTPServer
 
8
from urllib.parse import urlparse
8
9
 
9
10
 
10
11
def log(msg):
20
21
    def do_HEAD(self):
21
22
        """Sends headers.."""
22
23
        self.send_response(200)
23
 
        self.send_header("X-Click-Token", "X-Click-Token")
 
24
        self.send_header("X-Click-Token", "Mock-X-Click-Token")
24
25
        self.end_headers()
25
26
 
26
27
    def do_POST(self):
29
30
 
30
31
    def do_GET(self):
31
32
        """Respond to a GET request."""
32
 
        if '*' in self.server.responses:
33
 
            response = self.server.responses['*']
34
 
        else:
35
 
            response = self.server.responses[self.path]
36
 
        self.send_response(200)
37
 
        self.send_header("Content-type", "application/json")
 
33
        r = None
 
34
        o = urlparse(self.path)
 
35
        for response in self.server.responses:
 
36
            if '*' in response['path']:
 
37
                r = response
 
38
            elif o.path in response['path']:
 
39
                r = response
 
40
 
 
41
        if not r:
 
42
            self.log_message('Could not handle request')
 
43
            print(o.path)
 
44
            return
 
45
 
 
46
        self.send_response(r['status_code'])
 
47
        self.send_header("Content-type", 'application/json')
38
48
        self.end_headers()
39
 
        try:
40
 
            self.wfile.write(json.dumps(response).encode('utf-8'))
41
 
        except BrokenPipeError:
42
 
            # System Settings shut down before we finished up. Log and ignore.
43
 
            self.log_message('Server was interrupted.')
 
49
 
 
50
        if 'content' in r:
 
51
            try:
 
52
                self.wfile.write(
 
53
                    json.dumps(r['content']).encode('utf-8')
 
54
                )
 
55
            except BrokenPipeError:
 
56
                # System Settings shut down before we finished
 
57
                # up. Log and ignore.
 
58
                self.log_message('Server was interrupted.')
44
59
 
45
60
 
46
61
class Manager(object):
53
68
        self._thread = None
54
69
        self._cmdline = cmdline
55
70
        if not responses:
56
 
            responses = {
57
 
                '*': [{
58
 
                    "name": "com.ubuntu.developer.testclick",
59
 
                    "version": "2.0",
60
 
                    "icon_url": (
61
 
                        "https://raw.githubusercontent.com/ninja-ide/"
62
 
                        "ninja-ide/master/ninja_ide/img/ninja_icon.png"
63
 
                    ),
64
 
                    "download_url": ("http://localhost:9009/download"),
65
 
                    "binary_filesize": 9000,
66
 
                    "download_sha512": "1232223sdfdsffs",
67
 
                    "changelog": "New version!"
68
 
                }]
69
 
            }
 
71
            responses = [
 
72
                {
 
73
                    'path': '/metadata',
 
74
                    'status_code': 200,
 
75
                    'content_type': 'application/json',
 
76
                    'content': [{
 
77
                        "name": "com.ubuntu.dropping-letters",
 
78
                        "version": "0.1.2.3",
 
79
                        "icon_url": (
 
80
                            "https://raw.githubusercontent.com/ninja-ide/"
 
81
                            "ninja-ide/master/ninja_ide/img/ninja_icon.png"
 
82
                        ),
 
83
                        "download_url": ("https://upload.wikimedia.org/wikiped"
 
84
                                         "ia/commons/3/30/04U_Dec_28_2012_0230"
 
85
                                         "Z.jpg"),
 
86
                        "binary_filesize": 23820.0 * 1000.0,
 
87
                        "download_sha512": "foo",
 
88
                        "changelog": "New Dropping Letters.",
 
89
                        "title": "Dropping Letters game"
 
90
                    }, {
 
91
                        "name": "com.ubuntu.stock-ticker-mobile",
 
92
                        "version": "0.3.7ubuntu2",
 
93
                        "icon_url": (
 
94
                            "https://upload.wikimedia.org/wikipedia/"
 
95
                            "commons/a/ab/Logo-ubuntu_cof-orange-hex.svg"
 
96
                        ),
 
97
                        "download_url": ("https://upload.wikimedia.org/wikiped"
 
98
                                         "ia/commons/d/d2/The_Harvesters%2C_p"
 
99
                                         "ainting_by_Brugel%2C_with_frame.jpg"
 
100
                                         ),
 
101
                        "binary_filesize": 5015.2 * 1000.0,
 
102
                        "download_sha512": "bar",
 
103
                        "changelog": "New ticker.",
 
104
                        "title": "A stock trading app with charts, news, and management"  # noqa
 
105
                    }]
 
106
                },
 
107
                {
 
108
                    'path': '/403',
 
109
                    'status_code': 403
 
110
                },
 
111
                {
 
112
                    'path': '/404',
 
113
                    'status_code': 404
 
114
                },
 
115
            ]
70
116
        self._httpd = HTTPServer((server_address, server_port), Handler)
71
117
        self._httpd.responses = responses
72
118
        log('Created mock update click server.')
133
179
                             'responses: %s\n' % detail)
134
180
            sys.exit(2)
135
181
 
136
 
        if not isinstance(responses, dict):
137
 
            sys.stderr.write('JSON responses must be a dictionary\n')
 
182
        if not isinstance(responses, list):
 
183
            sys.stderr.write('JSON responses must be a list\n')
138
184
            sys.exit(2)
139
185
 
140
186
    man = Manager(