def test_get_file_succeeds(self):
        factory.make_file_storage(
            filename="foofilers", content=b"give me rope")
        response = self.make_API_GET_request("get", "foofilers")

        self.assertEqual(httplib.OK, response.status_code)
        self.assertEqual(b"give me rope", response.content)
 def test_list_files_does_not_include_file_content(self):
     factory.make_file_storage(
         filename="filename", content=b"test content",
         owner=self.logged_in_user)
     response = self.make_API_GET_request("list")
     parsed_results = json.loads(response.content)
     self.assertNotIn('content', parsed_results[0].keys())
Exemple #3
0
 def test_storage_can_be_retrieved(self):
     filename = factory.getRandomString()
     content = self.make_data()
     factory.make_file_storage(filename=filename, content=content)
     storage = FileStorage.objects.get(filename=filename)
     self.assertEqual((filename, content),
                      (storage.filename, storage.content))
Exemple #4
0
 def test_storage_can_be_retrieved(self):
     filename = factory.getRandomString()
     content = self.make_data()
     factory.make_file_storage(filename=filename, content=content)
     storage = FileStorage.objects.get(filename=filename)
     self.assertEqual(
         (filename, content),
         (storage.filename, storage.content))
Exemple #5
0
 def test_migrate_all_nodes_to_new_legacy_user_when_multiple_users(self):
     factory.make_file_storage(owner=None)
     user1 = factory.make_user()
     node1 = factory.make_node(owner=user1)
     user2 = factory.make_user()
     node2 = factory.make_node(owner=user2)
     migrate()
     self.assertNotIn(reload_object(node1).owner, {user1, user2, None})
     self.assertNotIn(reload_object(node2).owner, {user1, user2, None})
    def test_get_fetches_the_most_recent_file(self):
        filename = factory.make_name('file')
        factory.make_file_storage(filename=filename, owner=factory.make_user())
        storage = factory.make_file_storage(
            filename=filename, owner=factory.make_user())
        response = self.make_API_GET_request("get", filename)

        self.assertEqual(httplib.OK, response.status_code)
        self.assertEqual(storage.content, response.content)
Exemple #7
0
 def test_get_unowned_files(self):
     user = factory.make_user()
     files = [
         factory.make_file_storage(owner=None),
         factory.make_file_storage(owner=user),
         factory.make_file_storage(owner=None),
         ]
     self.assertSetEqual(
         {files[0], files[2]},
         set(get_unowned_files()))
 def test_delete_file_deletes_file(self):
     filename = factory.make_name('file')
     factory.make_file_storage(
         filename=filename, content=b"test content",
         owner=self.logged_in_user)
     response = self.client.delete(
         reverse('file_handler', args=[filename]))
     self.assertEqual(httplib.NO_CONTENT, response.status_code)
     files = FileStorage.objects.filter(filename=filename)
     self.assertEqual([], list(files))
 def test_files_resource_uri_supports_slashes_in_filenames(self):
     filename = "a/filename/with/slashes/in/it/"
     factory.make_file_storage(
         filename=filename, content=b"test content",
         owner=self.logged_in_user)
     response = self.make_API_GET_request("list")
     parsed_results = json.loads(response.content)
     resource_uri = parsed_results[0]['resource_uri']
     expected_uri = reverse('file_handler', args=[filename])
     self.assertEqual(expected_uri, resource_uri)
 def test_list_files_returns_ordered_list(self):
     filenames = ["myfiles/a", "myfiles/z", "myfiles/b"]
     for filename in filenames:
         factory.make_file_storage(
             filename=filename, content=b"test content",
             owner=self.logged_in_user)
     response = self.make_API_GET_request("list")
     self.assertEqual(httplib.OK, response.status_code)
     parsed_results = json.loads(response.content)
     filenames = [result['filename'] for result in parsed_results]
     self.assertEqual(sorted(filenames), filenames)
 def test_get_file_returns_file_object_with_resource_uri(self):
     filename = factory.make_name("file")
     content = sample_binary_data
     factory.make_file_storage(
         filename=filename, content=content, owner=self.logged_in_user)
     response = self.client.get(
         reverse('file_handler', args=[filename]))
     parsed_result = json.loads(response.content)
     self.assertEqual(
         reverse('file_handler', args=[filename]),
         parsed_result['resource_uri'])
Exemple #12
0
 def test_overwrites_file(self):
     # If a file of the same name has already been stored, the
     # reference to the old data gets overwritten with one to the new
     # data.
     filename = factory.make_name('filename')
     old_storage = factory.make_file_storage(
         filename=filename, content=self.make_data('old data'))
     new_data = self.make_data('new-data')
     new_storage = factory.make_file_storage(
         filename=filename, content=new_data)
     self.assertEqual(old_storage.filename, new_storage.filename)
     self.assertEqual(
         new_data, FileStorage.objects.get(filename=filename).content)
 def test_list_files_lists_files_with_prefix(self):
     filenames_with_prefix = ["prefix-file1", "prefix-file2"]
     filenames = filenames_with_prefix + ["otherfile", "otherfile2"]
     for filename in filenames:
         factory.make_file_storage(
             filename=filename, content=b"test content",
             owner=self.logged_in_user)
     response = self.client.get(
         reverse('files_handler'), {"op": "list", "prefix": "prefix-"})
     self.assertEqual(httplib.OK, response.status_code)
     parsed_results = json.loads(response.content)
     filenames = [result['filename'] for result in parsed_results]
     self.assertItemsEqual(filenames_with_prefix, filenames)
Exemple #14
0
 def test_overwrites_file(self):
     # If a file of the same name has already been stored, the
     # reference to the old data gets overwritten with one to the new
     # data.
     filename = factory.make_name('filename')
     old_storage = factory.make_file_storage(
         filename=filename, content=self.make_data('old data'))
     new_data = self.make_data('new-data')
     new_storage = factory.make_file_storage(filename=filename,
                                             content=new_data)
     self.assertEqual(old_storage.filename, new_storage.filename)
     self.assertEqual(new_data,
                      FileStorage.objects.get(filename=filename).content)
 def test_get_file_returns_file_object_with_content_base64_encoded(self):
     filename = factory.make_name("file")
     content = sample_binary_data
     factory.make_file_storage(
         filename=filename, content=content, owner=self.logged_in_user)
     response = self.client.get(
         reverse('file_handler', args=[filename]))
     parsed_result = json.loads(response.content)
     self.assertEqual(
         (filename, content),
         (
             parsed_result['filename'],
             b64decode(parsed_result['content'])
         ))
Exemple #16
0
 def test_migrate_all_files_to_new_legacy_user_when_multiple_users(self):
     stored = factory.make_file_storage(owner=None)
     user1 = factory.make_user()
     user2 = factory.make_user()
     migrate()
     stored = reload_object(stored)
     self.assertNotIn(stored.owner, {user1, user2, None})
 def test_delete_filters_by_owner(self):
     storage = factory.make_file_storage(owner=factory.make_user())
     response = self.client.delete(
         reverse('file_handler', args=[storage.filename]))
     self.assertEqual(httplib.NOT_FOUND, response.status_code)
     files = FileStorage.objects.filter(filename=storage.filename)
     self.assertEqual([storage], list(files))
    def test_get_by_key_works_anonymously(self):
        storage = factory.make_file_storage()
        response = self.client.get(
            reverse('files_handler'), {'key': storage.key, 'op': 'get_by_key'})

        self.assertEqual(httplib.OK, response.status_code)
        self.assertEqual(storage.content, response.content)
 def test_get_file_returns_owned_file(self):
     # If both an owned file and a non-owned file are present (with the
     # same name), the owned file is returned.
     filename = factory.make_name("file")
     factory.make_file_storage(filename=filename, owner=None)
     content = sample_binary_data
     storage = factory.make_file_storage(
         filename=filename, content=content, owner=self.logged_in_user)
     response = self.client.get(
         reverse('file_handler', args=[filename]))
     parsed_result = json.loads(response.content)
     self.assertEqual(
         (filename, storage.anon_resource_uri, content),
         (
             parsed_result['filename'],
             parsed_result['anon_resource_uri'],
             b64decode(parsed_result['content'])
         ))
Exemple #20
0
def make_provider_state_file(node=None):
    """Create a 'provider-state' file with a reference (zookeeper-instances)
    to a node.
    """
    if node is None:
        node = factory.make_node()
    node_link = reverse('node_handler', args=[node.system_id])
    content = 'zookeeper-instances: [%s]\n' % node_link
    content_data = content.encode('ascii')
    return factory.make_file_storage(
        filename=PROVIDER_STATE_FILENAME, content=content_data, owner=None)
Exemple #21
0
def make_provider_state_file(node=None):
    """Create a 'provider-state' file with a reference (zookeeper-instances)
    to a node.
    """
    if node is None:
        node = factory.make_node()
    node_link = reverse('node_handler', args=[node.system_id])
    content = 'zookeeper-instances: [%s]\n' % node_link
    content_data = content.encode('ascii')
    return factory.make_file_storage(filename=PROVIDER_STATE_FILENAME,
                                     content=content_data,
                                     owner=None)
Exemple #22
0
 def test_migrate_ancillary_data_to_legacy_user_when_multiple_users(self):
     factory.make_file_storage(owner=None)
     # Create two users, both with API credentials, an SSH key and a node.
     user1 = factory.make_user()
     consumer1, token1 = user1.get_profile().create_authorisation_token()
     key1 = factory.make_sshkey(user1, get_ssh_key_string(1))
     node1 = factory.make_node(owner=user1)
     user2 = factory.make_user()
     consumer2, token2 = user2.get_profile().create_authorisation_token()
     key2 = factory.make_sshkey(user2, get_ssh_key_string(2))
     node2 = factory.make_node(owner=user2)
     migrate()
     # The SSH keys have been copied to the legacy user.
     legacy_user = get_legacy_user()
     legacy_users_ssh_keys = get_ssh_keys(legacy_user)
     self.assertSetEqual({key1.key, key2.key}, set(legacy_users_ssh_keys))
     # The API credentials have been moved to the legacy user.
     legacy_users_nodes = Node.objects.filter(owner=legacy_user)
     self.assertSetEqual({node1, node2}, set(legacy_users_nodes))
     self.assertEqual(
         (legacy_user, legacy_user, legacy_user, legacy_user),
         (reload_object(consumer1).user, reload_object(token1).user,
          reload_object(consumer2).user, reload_object(token2).user))
Exemple #23
0
 def test_give_unowned_file(self):
     user = factory.make_user()
     file = factory.make_file_storage(owner=None)
     give_file_to_user(file, user)
     self.assertEqual(user, file.owner)
Exemple #24
0
 def test_give_owned_file(self):
     user1 = factory.make_user()
     user2 = factory.make_user()
     file = factory.make_file_storage(owner=user1)
     give_file_to_user(file, user2)
     self.assertEqual(user2, file.owner)
Exemple #25
0
 def test_file_saved(self):
     user = factory.make_user()
     file = factory.make_file_storage(owner=None)
     save = self.patch(file, "save")
     give_file_to_user(file, user)
     save.assert_called_once()
Exemple #26
0
 def test_migrate_runs_when_no_unowned_files_exist(self):
     factory.make_file_storage(owner=factory.make_user())
     migrate()
Exemple #27
0
 def test_stores_binary_data(self):
     storage = factory.make_file_storage(content=sample_binary_data)
     self.assertEqual(sample_binary_data, storage.content)
Exemple #28
0
 def test_returns_None_if_invalid_yaml(self):
     invalid_content = '%'.encode('ascii')
     factory.make_file_storage(
         filename=PROVIDER_STATE_FILENAME, content=invalid_content)
     self.assertIsNone(get_bootstrap_node_owner())
    def test_get_works_anonymously(self):
        storage = factory.make_file_storage()
        response = self.make_API_GET_request("get", storage.filename)

        self.assertEqual(storage.content, response.content)
        self.assertEqual(httplib.OK, response.status_code)
Exemple #30
0
 def test_key_gets_generated(self):
     # The generated system_id looks good.
     storage = factory.make_file_storage()
     self.assertEqual(len(storage.key), 36)
 def test_anon_cannot_delete_file(self):
     storage = factory.make_file_storage()
     response = self.client.delete(
         reverse('file_handler', args=[storage.filename]))
     self.assertEqual(httplib.UNAUTHORIZED, response.status_code)
 def test_anon_cannot_list_files(self):
     factory.make_file_storage()
     response = self.make_API_GET_request("list")
     # The 'list' operation is not available to anon users.
     self.assertEqual(httplib.BAD_REQUEST, response.status_code)
 def test_anon_resource_uri_allows_anonymous_access(self):
     storage = factory.make_file_storage()
     response = self.client.get(storage.anon_resource_uri)
     self.assertEqual(httplib.OK, response.status_code)
     self.assertEqual(storage.content, response.content)
Exemple #34
0
 def test_stores_binary_data(self):
     storage = factory.make_file_storage(content=sample_binary_data)
     self.assertEqual(sample_binary_data, storage.content)
Exemple #35
0
 def test_key_includes_random_part(self):
     storage1 = factory.make_file_storage()
     storage2 = factory.make_file_storage()
     self.assertNotEqual(storage1.key, storage2.key)
 def test_list_files_filters_by_owner(self):
     factory.make_file_storage(owner=factory.make_user())
     response = self.make_API_GET_request("list")
     self.assertEqual(httplib.OK, response.status_code)
     parsed_results = json.loads(response.content)
     self.assertEqual([], parsed_results)
Exemple #37
0
 def test_key_gets_generated(self):
     # The generated system_id looks good.
     storage = factory.make_file_storage()
     self.assertEqual(len(storage.key), 36)
Exemple #38
0
 def test_migrate_all_files_to_single_user_when_only_one_user(self):
     user = factory.make_user()
     stored = factory.make_file_storage(owner=None)
     migrate()
     self.assertEqual(user, reload_object(stored).owner)
Exemple #39
0
 def test_key_includes_random_part(self):
     storage1 = factory.make_file_storage()
     storage2 = factory.make_file_storage()
     self.assertNotEqual(storage1.key, storage2.key)
Exemple #40
0
 def test_returns_None_if_invalid_yaml(self):
     invalid_content = '%'.encode('ascii')
     factory.make_file_storage(filename=PROVIDER_STATE_FILENAME,
                               content=invalid_content)
     self.assertIsNone(get_bootstrap_node_owner())