def test_list_s3(self, mock_list): mock_list.return_value = [ S3Path('s3://a/b/c'), S3Path('s3://a/file1'), S3Path('s3://a/file2') ] self.parse_args('stor list s3://a') self.assertEquals(sys.stdout.getvalue(), 's3://a/b/c\ns3://a/file1\ns3://a/file2\n') mock_list.assert_called_once_with(S3Path('s3://a'))
def test_listdir_s3(self, mock_listdir): mock_listdir.return_value = [ S3Path('s3://bucket/file1'), S3Path('s3://bucket/file2'), S3Path('s3://bucket/dir/') ] self.parse_args('stor ls s3://bucket') self.assertEquals(sys.stdout.getvalue(), 's3://bucket/file1\n' 's3://bucket/file2\n' 's3://bucket/dir/\n') mock_listdir.assert_called_once_with(S3Path('s3://bucket'))
def test_properties(self): # Create sample path object. f = S3Path('s3://bucket/prefix/whatever.csv') self.assertEqual(f.parent, S3Path('s3://bucket/prefix')) # .name self.assertEqual(f.name, 'whatever.csv') self.assertEqual(f.parent.name, 'prefix') self.assertEqual(f.parent.parent.name, 'bucket') # .ext self.assertEqual(f.ext, '.csv') self.assertEqual(f.parent.ext, '')
def test_list_options(self, mock_list): mock_list.side_effect = [[ S3Path('s3://some-bucket/dir/a'), S3Path('s3://some-bucket/dir/b'), S3Path('s3://some-bucket/dir/c/d') ], [S3Path('s3://some-bucket/a'), S3Path('s3://some-bucket/b')]] self.parse_args('stor list s3://some-bucket -s dir') self.assertEquals( sys.stdout.getvalue(), 's3://some-bucket/dir/a\n' 's3://some-bucket/dir/b\n' 's3://some-bucket/dir/c/d\n') # clear stdout sys.stdout = six.StringIO() self.parse_args('stor list s3://some-bucket -l2') self.assertEquals(sys.stdout.getvalue(), 's3://some-bucket/a\n' 's3://some-bucket/b\n') mock_list.assert_has_calls([ mock.call(S3Path('s3://some-bucket'), starts_with='dir'), mock.call(S3Path('s3://some-bucket'), limit=2) ])
def test_string_compatibility(self): """ Test compatibility with ordinary strings. """ x = S3Path('s3://xyzzy') assert x == 's3://xyzzy' assert x == str('s3://xyzzy') assert 'xyz' in x assert 'analysis' not in x # sorting items = [S3Path('s3://fhj'), S3Path('s3://fgh'), 's3://E', S3Path('s3://d'), 's3://A', S3Path('s3://B'), 's3://c'] items.sort() self.assertEqual(items, ['s3://A', 's3://B', 's3://E', 's3://c', 's3://d', 's3://fgh', 's3://fhj']) # Test p1/p1. p1 = S3Path("s3://foo") p2 = "bar" self.assertEqual(p1 / p2, S3Path("s3://foo/bar"))
def test_walkfiles_s3(self, mock_walkfiles): mock_walkfiles.return_value = [ 's3://bucket/a/b.txt', 's3://bucket/c.txt', 's3://bucket/d.txt' ] self.parse_args('stor walkfiles -p=*.txt s3://bucket') self.assertEquals( sys.stdout.getvalue(), 's3://bucket/a/b.txt\n' 's3://bucket/c.txt\n' 's3://bucket/d.txt\n') mock_walkfiles.assert_called_once_with(S3Path('s3://bucket'), pattern='*.txt')
def test_list_options(self, mock_list): mock_list.side_effect = [[ S3Path('s3://some-bucket/dir/a'), S3Path('s3://some-bucket/dir/b'), S3Path('s3://some-bucket/dir/c/d') ], [ S3Path('s3://some-bucket/a'), S3Path('s3://some-bucket/b') ]] self.parse_args('stor list s3://some-bucket -s dir -l2 --canonicalize') self.assertEquals(sys.stdout.getvalue(), 's3://some-bucket/dir/a\n' 's3://some-bucket/dir/b\n' 's3://some-bucket/dir/c/d\n') mock_list.assert_has_calls([ mock.call(S3Path('s3://some-bucket'), starts_with='dir', limit=2, canonicalize=True) ])
def test_cat_s3(self, mock_read): mock_read.return_value = b'hello world\n' self.parse_args('stor cat s3://test/file') self.assertEquals(sys.stdout.getvalue(), 'hello world\n') mock_read.assert_called_once_with(S3Path('s3://test/file'))
def test_rmtree_s3(self, mock_rmtree): self.parse_args('stor rm -r s3://bucket/dir') mock_rmtree.assert_called_once_with(S3Path('s3://bucket/dir'))
def test_remove_s3(self, mock_remove): self.parse_args('stor rm s3://bucket/file1') mock_remove.assert_called_once_with(S3Path('s3://bucket/file1'))
def test_relpath_nested_parent(self, mock_pwd): mock_pwd.return_value = 's3://a/b/c' self.assertEquals(cli.get_path('s3:../../d'), S3Path('s3://a/d')) mock_pwd.return_value = 'swift://a/b/c/' self.assertEquals(cli.get_path('swift:../../d'), SwiftPath('swift://a/d'))
def test_relpath_parent_subdir_s3(self, mock_pwd): mock_pwd.return_value = 's3://test/dir' self.assertEquals(cli.get_path('s3:../b/c'), S3Path('s3://test/b/c')) mock_pwd.return_value = 's3://test/dir/' self.assertEquals(cli.get_path('s3:../b/c'), S3Path('s3://test/b/c'))
def test_relpath_current_subdir_no_dot_s3(self, mock_pwd): mock_pwd.return_value = 's3://test' self.assertEquals(cli.get_path('s3:b/c'), S3Path('s3://test/b/c')) mock_pwd.return_value = 's3://test/' self.assertEquals(cli.get_path('s3:b/c'), S3Path('s3://test/b/c'))
def test_relpath(self): with self.assertRaises(AttributeError): S3Path('s3://bucket').relpathto() with self.assertRaises(AttributeError): S3Path('s3://bucket').relpath()
def test_construction_from_none(self): with self.assertRaises(ValueError): S3Path(None)
def test_success(self): path = 's3://stor-test/foo/bar' self.assertTrue(utils.is_writeable(path)) self.mock_remove.assert_called_with( S3Path('{}/{}'.format(path, self.filename)))