1#!/usr/bin/env python 2 3import unittest 4from boto.s3.cors import CORSConfiguration 5 6CORS_BODY_1 = ( 7 '<CORSConfiguration>' 8 '<CORSRule>' 9 '<AllowedMethod>PUT</AllowedMethod>' 10 '<AllowedMethod>POST</AllowedMethod>' 11 '<AllowedMethod>DELETE</AllowedMethod>' 12 '<AllowedOrigin>http://www.example.com</AllowedOrigin>' 13 '<AllowedHeader>*</AllowedHeader>' 14 '<ExposeHeader>x-amz-server-side-encryption</ExposeHeader>' 15 '<MaxAgeSeconds>3000</MaxAgeSeconds>' 16 '<ID>foobar_rule</ID>' 17 '</CORSRule>' 18 '</CORSConfiguration>') 19 20CORS_BODY_2 = ( 21 '<CORSConfiguration>' 22 '<CORSRule>' 23 '<AllowedMethod>PUT</AllowedMethod>' 24 '<AllowedMethod>POST</AllowedMethod>' 25 '<AllowedMethod>DELETE</AllowedMethod>' 26 '<AllowedOrigin>http://www.example.com</AllowedOrigin>' 27 '<AllowedHeader>*</AllowedHeader>' 28 '<ExposeHeader>x-amz-server-side-encryption</ExposeHeader>' 29 '<MaxAgeSeconds>3000</MaxAgeSeconds>' 30 '</CORSRule>' 31 '<CORSRule>' 32 '<AllowedMethod>GET</AllowedMethod>' 33 '<AllowedOrigin>*</AllowedOrigin>' 34 '<AllowedHeader>*</AllowedHeader>' 35 '<MaxAgeSeconds>3000</MaxAgeSeconds>' 36 '</CORSRule>' 37 '</CORSConfiguration>') 38 39CORS_BODY_3 = ( 40 '<CORSConfiguration>' 41 '<CORSRule>' 42 '<AllowedMethod>GET</AllowedMethod>' 43 '<AllowedOrigin>*</AllowedOrigin>' 44 '</CORSRule>' 45 '</CORSConfiguration>') 46 47 48class TestCORSConfiguration(unittest.TestCase): 49 50 def test_one_rule_with_id(self): 51 cfg = CORSConfiguration() 52 cfg.add_rule(['PUT', 'POST', 'DELETE'], 53 'http://www.example.com', 54 allowed_header='*', 55 max_age_seconds=3000, 56 expose_header='x-amz-server-side-encryption', 57 id='foobar_rule') 58 self.assertEqual(cfg.to_xml(), CORS_BODY_1) 59 60 def test_two_rules(self): 61 cfg = CORSConfiguration() 62 cfg.add_rule(['PUT', 'POST', 'DELETE'], 63 'http://www.example.com', 64 allowed_header='*', 65 max_age_seconds=3000, 66 expose_header='x-amz-server-side-encryption') 67 cfg.add_rule('GET', '*', allowed_header='*', max_age_seconds=3000) 68 self.assertEqual(cfg.to_xml(), CORS_BODY_2) 69 70 def test_minimal(self): 71 cfg = CORSConfiguration() 72 cfg.add_rule('GET', '*') 73 self.assertEqual(cfg.to_xml(), CORS_BODY_3) 74 75 76if __name__ == "__main__": 77 unittest.main() 78