~ubuntu-branches/ubuntu/utopic/maas/utopic-security

« back to all changes in this revision

Viewing changes to src/maasserver/api/tests/test_filestorage.py

  • Committer: Package Import Robot
  • Author(s): Andres Rodriguez, Jeroen Vermeulen, Andres Rodriguez, Jason Hobbs, Raphaël Badin, Louis Bouchard, Gavin Panella
  • Date: 2014-08-21 19:36:30 UTC
  • mfrom: (1.3.1)
  • Revision ID: package-import@ubuntu.com-20140821193630-kertpu5hd8yyss8h
Tags: 1.7.0~beta7+bzr3266-0ubuntu1
* New Upstream Snapshot, Beta 7 bzr3266

[ Jeroen Vermeulen ]
* debian/extras/99-maas-sudoers
  debian/maas-dhcp.postinst
  debian/rules
  - Add second DHCP server instance for IPv6.
* debian/maas-region-controller-min.install
  debian/maas-region-controller-min.lintian-overrides
  - Install deployment user-data: maas_configure_interfaces.py script.
* debian/maas-cluster-controller.links
  debian/maas-cluster-controller.install
  debian/maas-cluster-controller.postinst
  - Reflect Celery removal changes made in trunk r3067.
  - Don't install celeryconfig_cluster.py any longer. 
  - Don't install maas_local_celeryconfig_cluster.py any longer.
  - Don't symlink maas_local_celeryconfig_cluster.py from /etc to /usr.
  - Don't insert UUID into maas_local_celeryconfig_cluster.py.

[ Andres Rodriguez ]
* debian/maas-region-controller-min.postrm: Cleanup lefover files.
* debian/maas-dhcp.postrm: Clean leftover configs.
* Provide new maas-proxy package that replaces the usage of
  squid-deb-proxy:
  - debian/control: New maas-proxy package that replaces the usage
    of squid-deb-proxy; Drop depends on squid-deb-proxy.
  - Add upstrart job.
  - Ensure squid3 is stopped as maas-proxy uses a caching proxy.
* Remove Celery references to cluster controller:
  - Rename upstart job from maas-pserv to maas-cluster; rename
    maas-cluster-celery to maas-cluster-register. Ensure services
    are stopped on upgrade.
  - debian/maintscript: Cleanup config files.
  - Remove all references to the MAAS celery daemon and config
    files as we don't use it like that anymore
* Move some entries in debian/maintscript to
  debian/maas-cluster-controller.maintscript
* Remove usage of txlongpoll and rabbitmq-server. Handle upgrades
  to ensure these are removed correctly.

[ Jason Hobbs ]
* debian/maas-region-controller-min.install: Install
  maas-generate-winrm-cert script.

[ Raphaël Badin ]
* debian/extras/maas-region-admin: Bypass django-admin as it prints
  spurious messages to stdout (LP: #1365130).

[Louis Bouchard]
* debian/maas-cluster-controller.postinst:
  - Exclude /var/log/maas/rsyslog when changing ownership
    (LP: #1346703)

[Gavin Panella]
* debian/maas-cluster-controller.maas-clusterd.upstart:
  - Don't start-up the cluster controller unless a shared-secret has
    been installed.
* debian/maas-cluster-controller.maas-cluster-register.upstart: Drop.

Show diffs side-by-side

added added

removed removed

Lines of Context:
82
82
class AnonymousFileStorageAPITest(FileStorageAPITestMixin, MAASServerTestCase):
83
83
 
84
84
    def test_get_works_anonymously(self):
85
 
        storage = factory.make_file_storage()
 
85
        storage = factory.make_FileStorage()
86
86
        response = self.make_API_GET_request("get", storage.filename)
87
87
 
88
88
        self.assertEqual(storage.content, response.content)
90
90
 
91
91
    def test_get_fetches_the_most_recent_file(self):
92
92
        filename = factory.make_name('file')
93
 
        factory.make_file_storage(filename=filename, owner=factory.make_user())
94
 
        storage = factory.make_file_storage(
95
 
            filename=filename, owner=factory.make_user())
 
93
        factory.make_FileStorage(filename=filename, owner=factory.make_User())
 
94
        storage = factory.make_FileStorage(
 
95
            filename=filename, owner=factory.make_User())
96
96
        response = self.make_API_GET_request("get", filename)
97
97
 
98
98
        self.assertEqual(httplib.OK, response.status_code)
99
99
        self.assertEqual(storage.content, response.content)
100
100
 
101
101
    def test_get_by_key_works_anonymously(self):
102
 
        storage = factory.make_file_storage()
 
102
        storage = factory.make_FileStorage()
103
103
        response = self.client.get(
104
104
            reverse('files_handler'), {'key': storage.key, 'op': 'get_by_key'})
105
105
 
107
107
        self.assertEqual(storage.content, response.content)
108
108
 
109
109
    def test_anon_resource_uri_allows_anonymous_access(self):
110
 
        storage = factory.make_file_storage()
 
110
        storage = factory.make_FileStorage()
111
111
        response = self.client.get(storage.anon_resource_uri)
112
112
        self.assertEqual(httplib.OK, response.status_code)
113
113
        self.assertEqual(storage.content, response.content)
114
114
 
115
115
    def test_anon_cannot_list_files(self):
116
 
        factory.make_file_storage()
 
116
        factory.make_FileStorage()
117
117
        response = self.make_API_GET_request("list")
118
118
        # The 'list' operation is not available to anon users.
119
119
        self.assertEqual(httplib.BAD_REQUEST, response.status_code)
120
120
 
121
121
    def test_anon_cannot_get_file(self):
122
 
        storage = factory.make_file_storage()
 
122
        storage = factory.make_FileStorage()
123
123
        response = self.client.get(
124
124
            reverse('file_handler', args=[storage.filename]))
125
125
        self.assertEqual(httplib.UNAUTHORIZED, response.status_code)
126
126
 
127
127
    def test_anon_cannot_delete_file(self):
128
 
        storage = factory.make_file_storage()
 
128
        storage = factory.make_FileStorage()
129
129
        response = self.client.delete(
130
130
            reverse('file_handler', args=[storage.filename]))
131
131
        self.assertEqual(httplib.UNAUTHORIZED, response.status_code)
215
215
        self.assertEqual(b"file two", response.content)
216
216
 
217
217
    def test_get_file_succeeds(self):
218
 
        factory.make_file_storage(
 
218
        factory.make_FileStorage(
219
219
            filename="foofilers", content=b"give me rope")
220
220
        response = self.make_API_GET_request("get", "foofilers")
221
221
 
239
239
    def test_list_files_returns_ordered_list(self):
240
240
        filenames = ["myfiles/a", "myfiles/z", "myfiles/b"]
241
241
        for filename in filenames:
242
 
            factory.make_file_storage(
 
242
            factory.make_FileStorage(
243
243
                filename=filename, content=b"test content",
244
244
                owner=self.logged_in_user)
245
245
        response = self.make_API_GET_request("list")
249
249
        self.assertEqual(sorted(filenames), filenames)
250
250
 
251
251
    def test_list_files_filters_by_owner(self):
252
 
        factory.make_file_storage(owner=factory.make_user())
 
252
        factory.make_FileStorage(owner=factory.make_User())
253
253
        response = self.make_API_GET_request("list")
254
254
        self.assertEqual(httplib.OK, response.status_code)
255
255
        parsed_results = json.loads(response.content)
259
259
        filenames_with_prefix = ["prefix-file1", "prefix-file2"]
260
260
        filenames = filenames_with_prefix + ["otherfile", "otherfile2"]
261
261
        for filename in filenames:
262
 
            factory.make_file_storage(
 
262
            factory.make_FileStorage(
263
263
                filename=filename, content=b"test content",
264
264
                owner=self.logged_in_user)
265
265
        response = self.client.get(
270
270
        self.assertItemsEqual(filenames_with_prefix, filenames)
271
271
 
272
272
    def test_list_files_does_not_include_file_content(self):
273
 
        factory.make_file_storage(
 
273
        factory.make_FileStorage(
274
274
            filename="filename", content=b"test content",
275
275
            owner=self.logged_in_user)
276
276
        response = self.make_API_GET_request("list")
279
279
 
280
280
    def test_files_resource_uri_supports_slashes_in_filenames(self):
281
281
        filename = "a/filename/with/slashes/in/it/"
282
 
        factory.make_file_storage(
 
282
        factory.make_FileStorage(
283
283
            filename=filename, content=b"test content",
284
284
            owner=self.logged_in_user)
285
285
        response = self.make_API_GET_request("list")
305
305
    def test_get_file_returns_file_object_with_content_base64_encoded(self):
306
306
        filename = factory.make_name("file")
307
307
        content = sample_binary_data
308
 
        factory.make_file_storage(
 
308
        factory.make_FileStorage(
309
309
            filename=filename, content=content, owner=self.logged_in_user)
310
310
        response = self.client.get(
311
311
            reverse('file_handler', args=[filename]))
320
320
    def test_get_file_returns_file_object_with_resource_uri(self):
321
321
        filename = factory.make_name("file")
322
322
        content = sample_binary_data
323
 
        factory.make_file_storage(
 
323
        factory.make_FileStorage(
324
324
            filename=filename, content=content, owner=self.logged_in_user)
325
325
        response = self.client.get(
326
326
            reverse('file_handler', args=[filename]))
333
333
        # If both an owned file and a non-owned file are present (with the
334
334
        # same name), the owned file is returned.
335
335
        filename = factory.make_name("file")
336
 
        factory.make_file_storage(filename=filename, owner=None)
 
336
        factory.make_FileStorage(filename=filename, owner=None)
337
337
        content = sample_binary_data
338
 
        storage = factory.make_file_storage(
 
338
        storage = factory.make_FileStorage(
339
339
            filename=filename, content=content, owner=self.logged_in_user)
340
340
        response = self.client.get(
341
341
            reverse('file_handler', args=[filename]))
368
368
            response)
369
369
 
370
370
    def test_delete_filters_by_owner(self):
371
 
        storage = factory.make_file_storage(owner=factory.make_user())
 
371
        storage = factory.make_FileStorage(owner=factory.make_User())
372
372
        response = self.client.delete(
373
373
            reverse('file_handler', args=[storage.filename]))
374
374
        self.assertEqual(httplib.NOT_FOUND, response.status_code)
377
377
 
378
378
    def test_delete_file_deletes_file(self):
379
379
        filename = factory.make_name('file')
380
 
        factory.make_file_storage(
 
380
        factory.make_FileStorage(
381
381
            filename=filename, content=b"test content",
382
382
            owner=self.logged_in_user)
383
383
        response = self.client.delete(