Index: third_party/gsutil/gslib/tests/test_cat.py |
diff --git a/third_party/gsutil/gslib/tests/test_cat.py b/third_party/gsutil/gslib/tests/test_cat.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..43b0ca521a427e659d24c27a29b3ae83056aaa68 |
--- /dev/null |
+++ b/third_party/gsutil/gslib/tests/test_cat.py |
@@ -0,0 +1,110 @@ |
+# -*- coding: utf-8 -*- |
+# Copyright 2013 Google Inc. All Rights Reserved. |
+# |
+# Licensed under the Apache License, Version 2.0 (the "License"); |
+# you may not use this file except in compliance with the License. |
+# You may obtain a copy of the License at |
+# |
+# http://www.apache.org/licenses/LICENSE-2.0 |
+# |
+# Unless required by applicable law or agreed to in writing, software |
+# distributed under the License is distributed on an "AS IS" BASIS, |
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+# See the License for the specific language governing permissions and |
+# limitations under the License. |
+"""Tests for cat command.""" |
+ |
+from __future__ import absolute_import |
+ |
+import gslib.tests.testcase as testcase |
+from gslib.tests.util import ObjectToURI as suri |
+from gslib.tests.util import RUN_S3_TESTS |
+ |
+ |
+class TestCat(testcase.GsUtilIntegrationTestCase): |
+ """Integration tests for cat command.""" |
+ |
+ def test_cat_range(self): |
+ """Tests cat command with various range arguments.""" |
+ key_uri = self.CreateObject(contents='0123456789') |
+ # Test various invalid ranges. |
+ stderr = self.RunGsUtil(['cat', '-r -', suri(key_uri)], |
+ return_stderr=True, expected_status=1) |
+ self.assertIn('Invalid range', stderr) |
+ stderr = self.RunGsUtil(['cat', '-r a-b', suri(key_uri)], |
+ return_stderr=True, expected_status=1) |
+ self.assertIn('Invalid range', stderr) |
+ stderr = self.RunGsUtil(['cat', '-r 1-2-3', suri(key_uri)], |
+ return_stderr=True, expected_status=1) |
+ self.assertIn('Invalid range', stderr) |
+ stderr = self.RunGsUtil(['cat', '-r 1.7-3', suri(key_uri)], |
+ return_stderr=True, expected_status=1) |
+ self.assertIn('Invalid range', stderr) |
+ |
+ # Test various valid ranges. |
+ stdout = self.RunGsUtil(['cat', '-r 1-3', suri(key_uri)], |
+ return_stdout=True) |
+ self.assertEqual('123', stdout) |
+ stdout = self.RunGsUtil(['cat', '-r 8-', suri(key_uri)], |
+ return_stdout=True) |
+ self.assertEqual('89', stdout) |
+ stdout = self.RunGsUtil(['cat', '-r -3', suri(key_uri)], |
+ return_stdout=True) |
+ self.assertEqual('789', stdout) |
+ |
+ def test_cat_version(self): |
+ """Tests cat command on versioned objects.""" |
+ bucket_uri = self.CreateVersionedBucket() |
+ # Create 2 versions of an object. |
+ uri1 = self.CreateObject(bucket_uri=bucket_uri, contents='data1') |
+ uri2 = self.CreateObject(bucket_uri=bucket_uri, |
+ object_name=uri1.object_name, contents='data2') |
+ stdout = self.RunGsUtil(['cat', suri(uri1)], return_stdout=True) |
+ # Last version written should be live. |
+ self.assertEqual('data2', stdout) |
+ # Using either version-specific URI should work. |
+ stdout = self.RunGsUtil(['cat', uri1.version_specific_uri], |
+ return_stdout=True) |
+ self.assertEqual('data1', stdout) |
+ stdout = self.RunGsUtil(['cat', uri2.version_specific_uri], |
+ return_stdout=True) |
+ self.assertEqual('data2', stdout) |
+ if RUN_S3_TESTS: |
+ # S3 GETs of invalid versions return 400s. |
+ # Also, appending between 1 and 3 characters to the version_id can |
+ # result in a success (200) response from the server. |
+ stderr = self.RunGsUtil(['cat', uri2.version_specific_uri + '23456'], |
+ return_stderr=True, expected_status=1) |
+ self.assertIn('BadRequestException: 400', stderr) |
+ else: |
+ # Attempting to cat invalid version should result in an error. |
+ stderr = self.RunGsUtil(['cat', uri2.version_specific_uri + '23'], |
+ return_stderr=True, expected_status=1) |
+ self.assertIn('No URLs matched', stderr) |
+ |
+ def test_cat_multi_arg(self): |
+ """Tests cat command with multiple arguments.""" |
+ bucket_uri = self.CreateBucket() |
+ data1 = '0123456789' |
+ data2 = 'abcdefghij' |
+ obj_uri1 = self.CreateObject(bucket_uri=bucket_uri, contents=data1) |
+ obj_uri2 = self.CreateObject(bucket_uri=bucket_uri, contents=data2) |
+ stdout, stderr = self.RunGsUtil( |
+ ['cat', suri(obj_uri1), suri(bucket_uri) + 'nonexistent'], |
+ return_stdout=True, return_stderr=True, expected_status=1) |
+ # First object should print, second should produce an exception. |
+ self.assertIn(data1, stdout) |
+ self.assertIn('NotFoundException', stderr) |
+ |
+ stdout, stderr = self.RunGsUtil( |
+ ['cat', suri(bucket_uri) + 'nonexistent', suri(obj_uri1)], |
+ return_stdout=True, return_stderr=True, expected_status=1) |
+ |
+ # If first object is invalid, exception should halt output immediately. |
+ self.assertNotIn(data1, stdout) |
+ self.assertIn('NotFoundException', stderr) |
+ |
+ # Two valid objects should both print successfully. |
+ stdout = self.RunGsUtil(['cat', suri(obj_uri1), suri(obj_uri2)], |
+ return_stdout=True) |
+ self.assertIn(data1 + data2, stdout) |