| OLD | NEW |
| 1 # -*- coding: utf-8 -*- |
| 1 # Copyright 2013 Google Inc. All Rights Reserved. | 2 # Copyright 2013 Google Inc. All Rights Reserved. |
| 2 # | 3 # |
| 3 # Licensed under the Apache License, Version 2.0 (the "License"); | 4 # Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 # you may not use this file except in compliance with the License. | 5 # you may not use this file except in compliance with the License. |
| 5 # You may obtain a copy of the License at | 6 # You may obtain a copy of the License at |
| 6 # | 7 # |
| 7 # http://www.apache.org/licenses/LICENSE-2.0 | 8 # http://www.apache.org/licenses/LICENSE-2.0 |
| 8 # | 9 # |
| 9 # Unless required by applicable law or agreed to in writing, software | 10 # Unless required by applicable law or agreed to in writing, software |
| 10 # distributed under the License is distributed on an "AS IS" BASIS, | 11 # distributed under the License is distributed on an "AS IS" BASIS, |
| 11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 # See the License for the specific language governing permissions and | 13 # See the License for the specific language governing permissions and |
| 13 # limitations under the License. | 14 # limitations under the License. |
| 15 """Tests for cat command.""" |
| 14 | 16 |
| 15 import boto | 17 from __future__ import absolute_import |
| 18 |
| 16 import gslib.tests.testcase as testcase | 19 import gslib.tests.testcase as testcase |
| 17 from gslib.tests.util import ObjectToURI as suri | 20 from gslib.tests.util import ObjectToURI as suri |
| 18 | 21 |
| 19 | 22 |
| 20 class TestCat(testcase.GsUtilIntegrationTestCase): | 23 class TestCat(testcase.GsUtilIntegrationTestCase): |
| 21 """Integration tests for cat command.""" | 24 """Integration tests for cat command.""" |
| 22 | 25 |
| 23 def test_cat_range(self): | 26 def test_cat_range(self): |
| 27 """Tests cat command with various range arguments.""" |
| 24 key_uri = self.CreateObject(contents='0123456789') | 28 key_uri = self.CreateObject(contents='0123456789') |
| 25 # Test various invalid ranges. | 29 # Test various invalid ranges. |
| 26 stderr = self.RunGsUtil(['cat', '-r -', suri(key_uri)], | 30 stderr = self.RunGsUtil(['cat', '-r -', suri(key_uri)], |
| 27 return_stderr=True, expected_status=1) | 31 return_stderr=True, expected_status=1) |
| 28 self.assertIn('Invalid range', stderr) | 32 self.assertIn('Invalid range', stderr) |
| 29 stderr = self.RunGsUtil(['cat', '-r a-b', suri(key_uri)], | 33 stderr = self.RunGsUtil(['cat', '-r a-b', suri(key_uri)], |
| 30 return_stderr=True, expected_status=1) | 34 return_stderr=True, expected_status=1) |
| 31 self.assertIn('Invalid range', stderr) | 35 self.assertIn('Invalid range', stderr) |
| 32 stderr = self.RunGsUtil(['cat', '-r 1-2-3', suri(key_uri)], | 36 stderr = self.RunGsUtil(['cat', '-r 1-2-3', suri(key_uri)], |
| 33 return_stderr=True, expected_status=1) | 37 return_stderr=True, expected_status=1) |
| 34 self.assertIn('Invalid range', stderr) | 38 self.assertIn('Invalid range', stderr) |
| 35 stderr = self.RunGsUtil(['cat', '-r 1.7-3', suri(key_uri)], | 39 stderr = self.RunGsUtil(['cat', '-r 1.7-3', suri(key_uri)], |
| 36 return_stderr=True, expected_status=1) | 40 return_stderr=True, expected_status=1) |
| 37 self.assertIn('Invalid range', stderr) | 41 self.assertIn('Invalid range', stderr) |
| 38 | 42 |
| 39 # Test various valid ranges. | 43 # Test various valid ranges. |
| 40 stdout = self.RunGsUtil(['cat', '-r 1-3', suri(key_uri)], | 44 stdout = self.RunGsUtil(['cat', '-r 1-3', suri(key_uri)], |
| 41 return_stdout=True) | 45 return_stdout=True) |
| 42 self.assertEqual('123', stdout) | 46 self.assertEqual('123', stdout) |
| 43 stdout = self.RunGsUtil(['cat', '-r 8-', suri(key_uri)], | 47 stdout = self.RunGsUtil(['cat', '-r 8-', suri(key_uri)], |
| 44 return_stdout=True) | 48 return_stdout=True) |
| 45 self.assertEqual('89', stdout) | 49 self.assertEqual('89', stdout) |
| 46 stdout = self.RunGsUtil(['cat', '-r -3', suri(key_uri)], | 50 stdout = self.RunGsUtil(['cat', '-r -3', suri(key_uri)], |
| 47 return_stdout=True) | 51 return_stdout=True) |
| 48 self.assertEqual('789', stdout) | 52 self.assertEqual('789', stdout) |
| 49 | 53 |
| 50 def test_cat_version(self): | 54 def test_cat_version(self): |
| 55 """Tests cat command on versioned objects.""" |
| 51 bucket_uri = self.CreateVersionedBucket() | 56 bucket_uri = self.CreateVersionedBucket() |
| 52 # Create 2 versions of an object. | 57 # Create 2 versions of an object. |
| 53 uri1 = self.CreateObject(bucket_uri=bucket_uri, contents='data1') | 58 uri1 = self.CreateObject(bucket_uri=bucket_uri, contents='data1') |
| 54 uri2 = self.CreateObject(bucket_uri=bucket_uri, | 59 uri2 = self.CreateObject(bucket_uri=bucket_uri, |
| 55 object_name=uri1.object_name, contents='data2') | 60 object_name=uri1.object_name, contents='data2') |
| 56 stdout = self.RunGsUtil(['cat', suri(uri1)], return_stdout=True) | 61 stdout = self.RunGsUtil(['cat', suri(uri1)], return_stdout=True) |
| 57 # Last version written should be live. | 62 # Last version written should be live. |
| 58 self.assertEqual('data2', stdout) | 63 self.assertEqual('data2', stdout) |
| 59 # Using either version-specific URI should work. | 64 # Using either version-specific URI should work. |
| 60 stdout = self.RunGsUtil(['cat', uri1.version_specific_uri], | 65 stdout = self.RunGsUtil(['cat', uri1.version_specific_uri], |
| 61 return_stdout=True) | 66 return_stdout=True) |
| 62 self.assertEqual('data1', stdout) | 67 self.assertEqual('data1', stdout) |
| 63 stdout = self.RunGsUtil(['cat', uri2.version_specific_uri], | 68 stdout = self.RunGsUtil(['cat', uri2.version_specific_uri], |
| 64 return_stdout=True) | 69 return_stdout=True) |
| 65 self.assertEqual('data2', stdout) | 70 self.assertEqual('data2', stdout) |
| 66 # Attempting to cat invalid version should result in an error. | 71 # Attempting to cat invalid version should result in an error. |
| 67 stderr = self.RunGsUtil(['cat', uri2.version_specific_uri + '23'], | 72 stderr = self.RunGsUtil(['cat', uri2.version_specific_uri + '23'], |
| 68 return_stderr=True, expected_status=1) | 73 return_stderr=True, expected_status=1) |
| 69 self.assertIn('InvalidUriError', stderr) | 74 self.assertIn('No URLs matched', stderr) |
| 75 |
| 76 def test_cat_multi_arg(self): |
| 77 """Tests cat command with multiple arguments.""" |
| 78 bucket_uri = self.CreateBucket() |
| 79 data1 = '0123456789' |
| 80 data2 = 'abcdefghij' |
| 81 obj_uri1 = self.CreateObject(bucket_uri=bucket_uri, contents=data1) |
| 82 obj_uri2 = self.CreateObject(bucket_uri=bucket_uri, contents=data2) |
| 83 stdout, stderr = self.RunGsUtil( |
| 84 ['cat', suri(obj_uri1), suri(bucket_uri) + 'nonexistent'], |
| 85 return_stdout=True, return_stderr=True, expected_status=1) |
| 86 # First object should print, second should produce an exception. |
| 87 self.assertIn(data1, stdout) |
| 88 self.assertIn('NotFoundException', stderr) |
| 89 |
| 90 stdout, stderr = self.RunGsUtil( |
| 91 ['cat', suri(bucket_uri) + 'nonexistent', suri(obj_uri1)], |
| 92 return_stdout=True, return_stderr=True, expected_status=1) |
| 93 |
| 94 # If first object is invalid, exception should halt output immediately. |
| 95 self.assertNotIn(data1, stdout) |
| 96 self.assertIn('NotFoundException', stderr) |
| 97 |
| 98 # Two valid objects should both print successfully. |
| 99 stdout = self.RunGsUtil(['cat', suri(obj_uri1), suri(obj_uri2)], |
| 100 return_stdout=True) |
| 101 self.assertIn(data1 + data2, stdout) |
| OLD | NEW |