Exemple #1
0
 def test_changes_dir_and_cleans_up(self):
     orig_cwd = os.getcwd()
     with TempWDFixture() as temp_wd:
         new_cwd = os.getcwd()
         self.assertTrue(os.path.isdir(temp_wd.path))
         self.assertNotEqual(orig_cwd, new_cwd)
         self.assertEqual(new_cwd, temp_wd.path)
     final_cwd = os.getcwd()
     self.assertEqual(orig_cwd, final_cwd)
     self.assertFalse(os.path.isdir(new_cwd))
Exemple #2
0
 def test_request_from_http(self):
     # We can't just call self.make_file because HTTPServerFixture will only
     # serve content from the current WD. And we don't want to create random
     # content in the original WD.
     self.useFixture(TempWDFixture())
     name = factory.getRandomString()
     content = factory.getRandomString().encode('ascii')
     factory.make_file(location='.', name=name, contents=content)
     with HTTPServerFixture() as httpd:
         url = urljoin(httpd.url, name)
         response = MAASDispatcher().dispatch_query(url, {})
         self.assertEqual(200, response.code)
         self.assertEqual(content, response.read())
Exemple #3
0
    def test_retries_three_times_raises_503_service_unavailable(self):
        self.useFixture(TempWDFixture())
        name = factory.make_string()
        content = factory.make_string().encode('ascii')
        factory.make_file(location='.', name=name, contents=content)
        with HTTPServerFixture() as httpd:
            url = urljoin(httpd.url, name)

            def _wrap_urlopen(*args, **kwargs):
                raise urllib.error.HTTPError(url, 503, "service unavailable",
                                             {}, None)

            self.patch(urllib.request, "urlopen").side_effect = _wrap_urlopen
            err = self.assertRaises(urllib.error.HTTPError,
                                    MAASDispatcher().dispatch_query, url, {})
            self.assertEqual(503, err.code)
Exemple #4
0
 def test_doesnt_override_accept_encoding_headers(self):
     # If someone passes their own Accept-Encoding header, then dispatch
     # just passes it through.
     self.useFixture(TempWDFixture())
     name = factory.getRandomString()
     content = factory.getRandomString(300).encode('ascii')
     factory.make_file(location='.', name=name, contents=content)
     with HTTPServerFixture() as httpd:
         url = urljoin(httpd.url, name)
         headers = {'Accept-encoding': 'gzip'}
         res = MAASDispatcher().dispatch_query(url, headers)
         self.assertEqual(200, res.code)
         self.assertEqual('gzip', res.info().get('Content-Encoding'))
         raw_content = res.read()
     read_content = gzip.GzipFile(mode='rb',
                                  fileobj=BytesIO(raw_content)).read()
     self.assertEqual(content, read_content)
    def test_supports_any_method(self):
        # urllib2, which MAASDispatcher uses, only supports POST and
        # GET. There is some extra code that makes sure the passed
        # method is honoured which is tested here.
        self.useFixture(TempWDFixture())
        name = factory.make_string()
        content = factory.make_string(300).encode('ascii')
        factory.make_file(location='.', name=name, contents=content)

        method = "PUT"
        # The test httpd doesn't like PUT, so we'll look for it bitching
        # about that for the purposes of this test.
        with HTTPServerFixture() as httpd:
            url = urljoin(httpd.url, name)
            e = self.assertRaises(
                urllib2.HTTPError, MAASDispatcher().dispatch_query, url, {},
                method=method)
            self.assertIn("Unsupported method ('PUT')", e.reason)
    def test_supports_content_encoding_gzip(self):
        # The client will set the Accept-Encoding: gzip header, and it will
        # also decompress the response if it comes back with Content-Encoding:
        # gzip.
        self.useFixture(TempWDFixture())
        name = factory.make_string()
        content = factory.make_string(300).encode('ascii')
        factory.make_file(location='.', name=name, contents=content)
        called = []
        orig_urllib = urllib2.urlopen

        def logging_urlopen(*args, **kwargs):
            called.append((args, kwargs))
            return orig_urllib(*args, **kwargs)
        self.patch(urllib2, 'urlopen', logging_urlopen)
        with HTTPServerFixture() as httpd:
            url = urljoin(httpd.url, name)
            res = MAASDispatcher().dispatch_query(url, {})
            self.assertEqual(200, res.code)
            self.assertEqual(content, res.read())
        request = called[0][0][0]
        self.assertEqual([((request,), {})], called)
        self.assertEqual('gzip', request.headers.get('Accept-encoding'))
Exemple #7
0
    def test_retries_three_times_on_503_service_unavailable(self):
        self.useFixture(TempWDFixture())
        name = factory.make_string()
        content = factory.make_string().encode("ascii")
        factory.make_file(location=".", name=name, contents=content)
        with HTTPServerFixture() as httpd:
            url = urljoin(httpd.url, name)

            counter = {"count": 0}

            def _wrap_open(*args, **kwargs):
                if counter["count"] < 2:
                    counter["count"] += 1
                    raise urllib.error.HTTPError(url, 503,
                                                 "service unavailable", {},
                                                 None)
                else:
                    return self.orig_open_func(*args, **kwargs)

            self.open_func = _wrap_open
            response = MAASDispatcher().dispatch_query(url, {})
            self.assertEqual(200, response.code)
            self.assertEqual(content, response.read())
Exemple #8
0
    def test_retries_three_times_on_503_service_unavailable(self):
        self.useFixture(TempWDFixture())
        name = factory.make_string()
        content = factory.make_string().encode('ascii')
        factory.make_file(location='.', name=name, contents=content)
        with HTTPServerFixture() as httpd:
            url = urljoin(httpd.url, name)
            original_urlopen = urllib.request.urlopen

            counter = {'count': 0}

            def _wrap_urlopen(*args, **kwargs):
                if counter['count'] < 2:
                    counter['count'] += 1
                    raise urllib.error.HTTPError(url, 503,
                                                 "service unavailable", {},
                                                 None)
                else:
                    return original_urlopen(*args, **kwargs)

            self.patch(urllib.request, "urlopen").side_effect = _wrap_urlopen
            response = MAASDispatcher().dispatch_query(url, {})
            self.assertEqual(200, response.code)
            self.assertEqual(content, response.read())