Revision dcfe7455 kamaki/clients/pithos/test.py

b/kamaki/clients/pithos/test.py
826 826
        r = self.client.upload_object(obj, tmpFile)
827 827
        self.assert_dicts_are_equal(r, exp_headers)
828 828
        self.assertEqual(GCI.mock_calls[-1], call())
829

  
829 830
        [call1, call2] = OP.mock_calls
831
        (args1, kwargs1) = call1[1:3]
832
        (args2, kwargs2) = call2[1:3]
833
        self.assertEqual(args1, (obj,))
834
        expected1 = dict(
835
            hashmap=True,
836
            success=(201, 409),
837
            format='json',
838
            json=dict(
839
                hashes=['s0m3h@5h'] * num_of_blocks,
840
                bytes=num_of_blocks * 4 * 1024 * 1024),
841
            content_encoding=None,
842
            content_type='application/octet-stream',
843
            content_disposition=None,
844
            public=None,
845
            permissions=None)
846
        for k, v in expected1.items():
847
            if k == 'json':
848
                self.assertEqual(len(v['hashes']), len(kwargs1[k]['hashes']))
849
                self.assertEqual(v['bytes'], kwargs1[k]['bytes'])
850
            else:
851
                self.assertEqual(v, kwargs1[k])
830 852

  
853
        (args2, kwargs2) = call2[1:3]
854
        self.assertEqual(args2, (obj,))
855
        expected2 = dict(
856
            json=dict(
857
                hashes=['s0m3h@5h'] * num_of_blocks,
858
                bytes=num_of_blocks * 4 * 1024 * 1024),
859
            content_type='application/octet-stream',
860
            hashmap=True,
861
            success=201,
862
            format='json')
863
        for k, v in expected2.items():
864
            if k == 'json':
865
                self.assertEqual(len(v['hashes']), len(kwargs2[k]['hashes']))
866
                self.assertEqual(v['bytes'], kwargs2[k]['bytes'])
867
            else:
868
                self.assertEqual(v, kwargs2[k])
869

  
870
        mock_offset = 2
871

  
872
        #  With progress bars
873
        try:
874
            from progress.bar import ShadyBar
875
            blck_bar = ShadyBar('Mock blck calc.')
876
            upld_bar = ShadyBar('Mock uplds')
877
        except ImportError:
878
            blck_bar = None
879
            upld_bar = None
880

  
881
        if blck_bar and upld_bar:
882

  
883
            def blck_gen(n):
884
                for i in blck_bar.iter(range(n)):
885
                    yield
886
                yield
887

  
888
            def upld_gen(n):
889
                for i in upld_bar.iter(range(n)):
890
                    yield
891
                yield
892

  
893
            tmpFile.seek(0)
894
            r = self.client.upload_object(
895
                obj, tmpFile,
896
                hash_cb=blck_gen, upload_cb=upld_gen)
897
            self.assert_dicts_are_equal(r, exp_headers)
898

  
899
            for i, c in enumerate(OP.mock_calls[-mock_offset:]):
900
                self.assertEqual(OP.mock_calls[i], c)
901

  
902
        #  With content-type
903
        tmpFile.seek(0)
904
        ctype = 'video/mpeg'
905
        sharing = dict(read=['u1', 'g1', 'u2'], write=['u1'])
906
        r = self.client.upload_object(obj, tmpFile,
907
            content_type=ctype, sharing=sharing)
908
        self.assert_dicts_are_equal(r, exp_headers)
909
        self.assertEqual(OP.mock_calls[-1][2]['content_type'], ctype)
910
        self.assert_dicts_are_equal(
911
            OP.mock_calls[-2][2]['permissions'],
912
            sharing)
913

  
914
        # With other args
915
        tmpFile.seek(0)
916
        kwargs = dict(
917
            etag='s0m3E74g',
918
            if_etag_match='if etag match',
919
            if_not_exist=True,
920
            content_type=ctype,
921
            content_disposition=ctype + 'd15p051710n',
922
            public=True,
923
            content_encoding='802.11',
924
            container_info_cache={})
925
        r = self.client.upload_object(obj, tmpFile, **kwargs)
926
        self.assert_dicts_are_equal(r, exp_headers)
927

  
928
        kwargs.pop('if_not_exist')
929
        ematch = kwargs.pop('if_etag_match')
930
        etag = kwargs.pop('etag')
931
        self.assert_dicts_are_equal(
932
            kwargs.pop('container_info_cache'),
933
            {self.client.container: container_info})
934
        for arg, val in kwargs.items():
935
            self.assertEqual(OP.mock_calls[-2][2][arg], val)
936
        self.assertEqual(OP.mock_calls[-1][2]['if_etag_match'], ematch)
937
        self.assertEqual(OP.mock_calls[-1][2]['if_etag_not_match'], '*')
938
        self.assertEqual(OP.mock_calls[-1][2]['etag'], etag)
939

  
940
    @patch('%s.get_container_info' % pithos_pkg, return_value=container_info)
941
    @patch('%s.container_post' % pithos_pkg, return_value=FR())
942
    @patch('%s.object_put' % pithos_pkg, return_value=FR())
943
    def test_upload_from_string(self, OP, CP, GCI):
944
        num_of_blocks = 2
945
        tmpFile = self._create_temp_file(num_of_blocks)
946
        tmpFile.seek(0)
947
        src_str = tmpFile.read()
948

  
949
        exp_headers = dict(id='container id', name='container name')
950
        FR.headers = dict(exp_headers)
951
        r = self.client.upload_from_string(obj, src_str)
952
        self.assert_dicts_are_equal(r, exp_headers)
953
        self.assertEqual(GCI.mock_calls[-1], call())
954

  
955
        [call1, call2] = OP.mock_calls
831 956
        (args1, kwargs1) = call1[1:3]
832 957
        (args2, kwargs2) = call2[1:3]
833 958
        self.assertEqual(args1, (obj,))

Also available in: Unified diff