def test_get_bucket_with_versions(self): self._authorize_account() self._create_my_bucket() # Put many versions of a file into the test bucket. Unroll the loop here for convenience. bucket = self.b2_api.get_bucket_by_name('my-bucket') bucket.upload(UploadSourceBytes(b'test'), 'test') bucket.upload(UploadSourceBytes(b'test'), 'test') bucket.upload(UploadSourceBytes(b'test'), 'test') bucket.upload(UploadSourceBytes(b'test'), 'test') bucket.upload(UploadSourceBytes(b'test'), 'test') bucket.upload(UploadSourceBytes(b'test'), 'test') bucket.upload(UploadSourceBytes(b'test'), 'test') bucket.upload(UploadSourceBytes(b'test'), 'test') bucket.upload(UploadSourceBytes(b'test'), 'test') bucket.upload(UploadSourceBytes(b'test'), 'test') # Now check the output of get-bucket against the canon. expected_stdout = ''' { "accountId": "my-account", "bucketId": "bucket_0", "bucketInfo": {}, "bucketName": "my-bucket", "bucketType": "allPublic", "corsRules": [], "fileCount": 10, "lifecycleRules": [], "revision": 1, "totalSize": 40 } ''' self._run_command(['get-bucket', '--showSize', 'my-bucket'], expected_stdout, '', 0)
def test_ls(self): self._authorize_account() self._create_my_bucket() # Check with no files self._run_command(['ls', 'my-bucket'], '', '', 0) # Create some files, including files in a folder bucket = self.b2_api.get_bucket_by_name('my-bucket') bucket.upload(UploadSourceBytes(b''), 'a') bucket.upload(UploadSourceBytes(b' '), 'b/b1') bucket.upload(UploadSourceBytes(b' '), 'b/b2') bucket.upload(UploadSourceBytes(b' '), 'c') bucket.upload(UploadSourceBytes(b' '), 'c') # Condensed output expected_stdout = ''' a b/ c ''' self._run_command(['ls', 'my-bucket'], expected_stdout, '', 0) # Recursive output expected_stdout = ''' a b/b1 b/b2 c ''' self._run_command(['ls', '--recursive', 'my-bucket'], expected_stdout, '', 0) # Check long output. (The format expects full-length file ids, so it causes whitespace here) expected_stdout = ''' 9999 upload 1970-01-01 00:00:05 0 a - - - - 0 b/ 9995 upload 1970-01-01 00:00:05 6 c ''' self._run_command(['ls', '--long', 'my-bucket'], expected_stdout, '', 0) # Check long versions output (The format expects full-length file ids, so it causes whitespace here) expected_stdout = ''' 9999 upload 1970-01-01 00:00:05 0 a - - - - 0 b/ 9995 upload 1970-01-01 00:00:05 6 c 9996 upload 1970-01-01 00:00:05 5 c ''' self._run_command(['ls', '--long', '--versions', 'my-bucket'], expected_stdout, '', 0)
def test_list_parts_with_parts(self): self._authorize_account() self._create_my_bucket() bucket = self.b2_api.get_bucket_by_name('my-bucket') file = bucket.start_large_file('file', 'text/plain', {}) content = six.b('hello world') large_file_upload_state = mock.MagicMock() large_file_upload_state.has_error.return_value = False bucket._upload_part(file.file_id, 1, (0, 11), UploadSourceBytes(content), large_file_upload_state) bucket._upload_part(file.file_id, 3, (0, 11), UploadSourceBytes(content), large_file_upload_state) expected_stdout = ''' 1 11 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed 3 11 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed ''' self._run_command(['list_parts', file.file_id], expected_stdout, '', 0)
def testThree(self): file1 = self.bucket.start_large_file('file1.txt', 'text/plain', {}) content = six.b('hello world') content_sha1 = hex_sha1_of_bytes(content) large_file_upload_state = mock.MagicMock() large_file_upload_state.has_error.return_value = False self.bucket._upload_part( file1.file_id, 1, (0, 11), UploadSourceBytes(content), large_file_upload_state ) self.bucket._upload_part( file1.file_id, 2, (0, 11), UploadSourceBytes(content), large_file_upload_state ) self.bucket._upload_part( file1.file_id, 3, (0, 11), UploadSourceBytes(content), large_file_upload_state ) expected_parts = [ Part('9999', 1, 11, content_sha1), Part('9999', 2, 11, content_sha1), Part('9999', 3, 11, content_sha1), ] self.assertEqual(expected_parts, list(self.bucket.list_parts(file1.file_id, batch_size=1)))
def test_error_in_state(self): file1 = self.bucket.start_large_file('file1.txt', 'text/plain', {}) content = six.b('hello world') file_progress_listener = mock.MagicMock() large_file_upload_state = LargeFileUploadState(file_progress_listener) large_file_upload_state.set_error('test error') try: self.bucket._upload_part(file1.file_id, 1, (0, 11), UploadSourceBytes(content), large_file_upload_state) self.fail('should have thrown') except AlreadyFailed: pass
def test_get_bucket_with_hidden(self): self._authorize_account() self._create_my_bucket() # Put some files into the test bucket. Unroll the loop for convenience. bucket = self.b2_api.get_bucket_by_name('my-bucket') bucket.upload(UploadSourceBytes(b'test'), 'upload1') bucket.upload(UploadSourceBytes(b'test'), 'upload2') bucket.upload(UploadSourceBytes(b'test'), 'upload3') bucket.upload(UploadSourceBytes(b'test'), 'upload4') bucket.upload(UploadSourceBytes(b'test'), 'upload5') bucket.upload(UploadSourceBytes(b'test'), 'upload6') # Hide some new files. Don't check the results here; it will be clear enough that # something has failed if the output of 'get-bucket' does not match the canon. stdout, stderr = self._get_stdouterr() console_tool = ConsoleTool(self.b2_api, stdout, stderr) console_tool.run_command(['b2', 'hide_file', 'my-bucket', 'hidden1']) console_tool.run_command(['b2', 'hide_file', 'my-bucket', 'hidden2']) console_tool.run_command(['b2', 'hide_file', 'my-bucket', 'hidden3']) console_tool.run_command(['b2', 'hide_file', 'my-bucket', 'hidden4']) # Now check the output of get-bucket against the canon. expected_stdout = ''' { "accountId": "my-account", "bucketId": "bucket_0", "bucketInfo": {}, "bucketName": "my-bucket", "bucketType": "allPublic", "corsRules": [], "fileCount": 10, "lifecycleRules": [], "revision": 1, "totalSize": 24 } ''' self._run_command(['get-bucket', '--showSize', 'my-bucket'], expected_stdout, '', 0)
def test_get_bucket_with_folders(self): self._authorize_account() self._create_my_bucket() # Create a hierarchical structure within the test bucket. Unroll the loop here for # convenience. bucket = self.b2_api.get_bucket_by_name('my-bucket') bucket.upload(UploadSourceBytes(b'test'), 'test') bucket.upload(UploadSourceBytes(b'test'), '1/test') bucket.upload(UploadSourceBytes(b'test'), '1/2/test') bucket.upload(UploadSourceBytes(b'test'), '1/2/3/test') bucket.upload(UploadSourceBytes(b'test'), '1/2/3/4/test') bucket.upload(UploadSourceBytes(b'test'), '1/2/3/4/5/test') bucket.upload(UploadSourceBytes(b'test'), '1/2/3/4/5/6/test') bucket.upload(UploadSourceBytes(b'test'), '1/2/3/4/5/6/7/test') bucket.upload(UploadSourceBytes(b'test'), '1/2/3/4/5/6/7/8/test') bucket.upload(UploadSourceBytes(b'test'), '1/2/3/4/5/6/7/8/9/test') bucket.upload(UploadSourceBytes(b'check'), 'check') bucket.upload(UploadSourceBytes(b'check'), '1/check') bucket.upload(UploadSourceBytes(b'check'), '1/2/check') bucket.upload(UploadSourceBytes(b'check'), '1/2/3/check') bucket.upload(UploadSourceBytes(b'check'), '1/2/3/4/check') bucket.upload(UploadSourceBytes(b'check'), '1/2/3/4/5/check') bucket.upload(UploadSourceBytes(b'check'), '1/2/3/4/5/6/check') bucket.upload(UploadSourceBytes(b'check'), '1/2/3/4/5/6/7/check') bucket.upload(UploadSourceBytes(b'check'), '1/2/3/4/5/6/7/8/check') bucket.upload(UploadSourceBytes(b'check'), '1/2/3/4/5/6/7/8/9/check') # Now check the output of get-bucket against the canon. expected_stdout = ''' { "accountId": "my-account", "bucketId": "bucket_0", "bucketInfo": {}, "bucketName": "my-bucket", "bucketType": "allPublic", "corsRules": [], "fileCount": 20, "lifecycleRules": [], "revision": 1, "totalSize": 90 } ''' self._run_command(['get-bucket', '--showSize', 'my-bucket'], expected_stdout, '', 0)
def upload_file(bucket, file_name, content): source = UploadSourceBytes(content) bucket.upload(source, file_name)
def _upload_file(self, buf, file_name): source = UploadSourceBytes(buf.read()) self.c.upload(source, file_name)