| Index: third_party/gsutil/gslib/tests/test_setcors.py
 | 
| diff --git a/third_party/gsutil/gslib/tests/test_setcors.py b/third_party/gsutil/gslib/tests/test_setcors.py
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..fb5a386229f809bfbb7e97e5268061e4a0a1bd30
 | 
| --- /dev/null
 | 
| +++ b/third_party/gsutil/gslib/tests/test_setcors.py
 | 
| @@ -0,0 +1,168 @@
 | 
| +# 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.
 | 
| +
 | 
| +import posixpath
 | 
| +from xml.dom.minidom import parseString
 | 
| +
 | 
| +import gslib.tests.testcase as testcase
 | 
| +from gslib.tests.util import ObjectToURI as suri
 | 
| +
 | 
| +
 | 
| +class TestSetCors(testcase.GsUtilIntegrationTestCase):
 | 
| +  """Integration tests for setcors command."""
 | 
| +
 | 
| +  empty_doc1 = parseString('<CorsConfig/>').toprettyxml(indent='    ')
 | 
| +
 | 
| +  empty_doc2 = parseString(
 | 
| +      '<CorsConfig></CorsConfig>').toprettyxml(indent='    ')
 | 
| +
 | 
| +  empty_doc3 = parseString(
 | 
| +      '<CorsConfig><Cors/></CorsConfig>').toprettyxml(indent='    ')
 | 
| +
 | 
| +  empty_doc4 = parseString(
 | 
| +      '<CorsConfig><Cors></Cors></CorsConfig>').toprettyxml(indent='    ')
 | 
| +
 | 
| +  cors_bad1 = ('<?xml version="1.0" ?><CorsConfig><Cors><Methods><Method>GET'
 | 
| +               '</ResponseHeader></Methods></Cors></CorsConfig>')
 | 
| +
 | 
| +  cors_bad2 = ('<?xml version="1.0" ?><CorsConfig><Cors><Methods><Cors>GET'
 | 
| +               '</Cors></Methods></Cors></CorsConfig>')
 | 
| +
 | 
| +  cors_bad3 = ('<?xml version="1.0" ?><CorsConfig><Methods><Method>GET'
 | 
| +               '</Method></Methods></Cors></CorsConfig>')
 | 
| +
 | 
| +  cors_bad4 = ('<?xml version="1.0" ?><CorsConfig><Cors><Method>GET'
 | 
| +               '</Method></Cors></CorsConfig>')
 | 
| +
 | 
| +  cors_doc = parseString(
 | 
| +      '<CorsConfig><Cors><Origins>'
 | 
| +      '<Origin>http://origin1.example.com</Origin>'
 | 
| +      '<Origin>http://origin2.example.com</Origin>'
 | 
| +      '</Origins><Methods><Method>GET</Method>'
 | 
| +      '<Method>PUT</Method><Method>POST</Method></Methods>'
 | 
| +      '<ResponseHeaders><ResponseHeader>foo</ResponseHeader>'
 | 
| +      '<ResponseHeader>bar</ResponseHeader></ResponseHeaders>'
 | 
| +      '<MaxAgeSec>3600</MaxAgeSec></Cors>'
 | 
| +      '<Cors><Origins><Origin>http://origin3.example.com</Origin></Origins>'
 | 
| +      '<Methods><Method>GET</Method><Method>DELETE</Method></Methods>'
 | 
| +      '<ResponseHeaders><ResponseHeader>foo2</ResponseHeader>'
 | 
| +      '<ResponseHeader>bar2</ResponseHeader></ResponseHeaders>'
 | 
| +      '</Cors></CorsConfig>').toprettyxml(indent='    ')
 | 
| +
 | 
| +  def test_default_cors(self):
 | 
| +    bucket_uri = self.CreateBucket()
 | 
| +    stdout = self.RunGsUtil(['getcors', suri(bucket_uri)], return_stdout=True)
 | 
| +    self.assertEqual(stdout, self.empty_doc1)
 | 
| +
 | 
| +  def test_set_empty_cors1(self):
 | 
| +    bucket_uri = self.CreateBucket()
 | 
| +    fpath = self.CreateTempFile(contents=self.empty_doc1)
 | 
| +    self.RunGsUtil(['setcors', fpath, suri(bucket_uri)])
 | 
| +    stdout = self.RunGsUtil(['getcors', suri(bucket_uri)], return_stdout=True)
 | 
| +    self.assertEqual(stdout, self.empty_doc1)
 | 
| +
 | 
| +  def test_set_empty_cors2(self):
 | 
| +    bucket_uri = self.CreateBucket()
 | 
| +    fpath = self.CreateTempFile(contents=self.empty_doc2)
 | 
| +    self.RunGsUtil(['setcors', fpath, suri(bucket_uri)])
 | 
| +    stdout = self.RunGsUtil(['getcors', suri(bucket_uri)], return_stdout=True)
 | 
| +    self.assertEqual(stdout, self.empty_doc1)
 | 
| +
 | 
| +  def test_set_empty_cors3(self):
 | 
| +    bucket_uri = self.CreateBucket()
 | 
| +    fpath = self.CreateTempFile(contents=self.empty_doc3)
 | 
| +    self.RunGsUtil(['setcors', fpath, suri(bucket_uri)])
 | 
| +    stdout = self.RunGsUtil(['getcors', suri(bucket_uri)], return_stdout=True)
 | 
| +    self.assertEqual(stdout, self.empty_doc3)
 | 
| +
 | 
| +  def test_set_empty_cors4(self):
 | 
| +    bucket_uri = self.CreateBucket()
 | 
| +    fpath = self.CreateTempFile(contents=self.empty_doc4)
 | 
| +    self.RunGsUtil(['setcors', fpath, suri(bucket_uri)])
 | 
| +    stdout = self.RunGsUtil(['getcors', suri(bucket_uri)], return_stdout=True)
 | 
| +    self.assertEqual(stdout, self.empty_doc3)
 | 
| +
 | 
| +  def test_non_null_cors(self):
 | 
| +    bucket_uri = self.CreateBucket()
 | 
| +    fpath = self.CreateTempFile(contents=self.cors_doc)
 | 
| +    self.RunGsUtil(['setcors', fpath, suri(bucket_uri)])
 | 
| +    stdout = self.RunGsUtil(['getcors', suri(bucket_uri)], return_stdout=True)
 | 
| +    self.assertEqual(stdout, self.cors_doc)
 | 
| +
 | 
| +  def test_bad_cors1(self):
 | 
| +    bucket_uri = self.CreateBucket()
 | 
| +    fpath = self.CreateTempFile(contents=self.cors_bad1)
 | 
| +    self.RunGsUtil(['setcors', fpath, suri(bucket_uri)], expected_status=1)
 | 
| +
 | 
| +  def test_bad_cors2(self):
 | 
| +    bucket_uri = self.CreateBucket()
 | 
| +    fpath = self.CreateTempFile(contents=self.cors_bad2)
 | 
| +    self.RunGsUtil(['setcors', fpath, suri(bucket_uri)], expected_status=1)
 | 
| +
 | 
| +  def test_bad_cors3(self):
 | 
| +    bucket_uri = self.CreateBucket()
 | 
| +    fpath = self.CreateTempFile(contents=self.cors_bad3)
 | 
| +    self.RunGsUtil(['setcors', fpath, suri(bucket_uri)], expected_status=1)
 | 
| +
 | 
| +  def test_bad_cors4(self):
 | 
| +    bucket_uri = self.CreateBucket()
 | 
| +    fpath = self.CreateTempFile(contents=self.cors_bad4)
 | 
| +    self.RunGsUtil(['setcors', fpath, suri(bucket_uri)], expected_status=1)
 | 
| +
 | 
| +  def set_cors_and_reset(self):
 | 
| +    bucket_uri = self.CreateBucket()
 | 
| +    tmpdir = self.CreateTempDir()
 | 
| +    fpath = self.CreateTempFile(tmpdir=tmpdir, contents=self.cors_doc)
 | 
| +    self.RunGsUtil(['setcors', fpath, suri(bucket_uri)])
 | 
| +    stdout = self.RunGsUtil(['getcors', suri(bucket_uri)], return_stdout=True)
 | 
| +    self.assertEqual(stdout, self.cors_doc)
 | 
| +
 | 
| +    fpath = self.CreateTempFile(tmpdir=tmpdir, contents=self.empty_doc1)
 | 
| +    self.RunGsUtil(['setcors', fpath, suri(bucket_uri)])
 | 
| +    stdout = self.RunGsUtil(['getcors', suri(bucket_uri)], return_stdout=True)
 | 
| +    self.assertEqual(stdout, self.empty_doc1)
 | 
| +
 | 
| +  def set_multi_non_null_cors(self):
 | 
| +    bucket1_uri = self.CreateBucket()
 | 
| +    bucket2_uri = self.CreateBucket()
 | 
| +    fpath = self.CreateTempFile(contents=self.cors_doc)
 | 
| +    self.RunGsUtil(['setcors', fpath, suri(bucket1_uri), suri(bucket2_uri)])
 | 
| +    stdout = self.RunGsUtil(['getcors', suri(bucket1_uri)], return_stdout=True)
 | 
| +    self.assertEqual(stdout, self.cors_doc)
 | 
| +    stdout = self.RunGsUtil(['getcors', suri(bucket2_uri)], return_stdout=True)
 | 
| +    self.assertEqual(stdout, self.cors_doc)
 | 
| +
 | 
| +  def test_set_wildcard_non_null_cors(self):
 | 
| +    bucket1_uri = self.CreateBucket()
 | 
| +    bucket2_uri = self.CreateBucket()
 | 
| +    # This just double checks that the common prefix of the two buckets is what
 | 
| +    # we think it should be (based on implementation detail of CreateBucket).
 | 
| +    # We want to be careful when setting a wildcard on buckets to make sure we
 | 
| +    # don't step outside the test buckets to effect other buckets.
 | 
| +    common_prefix = posixpath.commonprefix([suri(bucket1_uri),
 | 
| +                                            suri(bucket2_uri)])
 | 
| +    self.assertEqual(common_prefix,
 | 
| +                     'gs://gsutil-test-test_set_wildcard_non_null_cors-bucket-')
 | 
| +    wildcard = '%s*' % common_prefix
 | 
| +
 | 
| +    fpath = self.CreateTempFile(contents=self.cors_doc)
 | 
| +    stdout = self.RunGsUtil(['setcors', fpath, wildcard], return_stdout=True)
 | 
| +    self.assertIn('Setting CORS on %s/...' % suri(bucket1_uri), stdout)
 | 
| +    self.assertIn('Setting CORS on %s/...' % suri(bucket2_uri), stdout)
 | 
| +    self.assertEqual(stdout.count('Setting CORS'), 2)
 | 
| +
 | 
| +    stdout = self.RunGsUtil(['getcors', suri(bucket1_uri)], return_stdout=True)
 | 
| +    self.assertEqual(stdout, self.cors_doc)
 | 
| +    stdout = self.RunGsUtil(['getcors', suri(bucket2_uri)], return_stdout=True)
 | 
| +    self.assertEqual(stdout, self.cors_doc)
 | 
| 
 |