1# -*- coding: utf-8 -*- 2# MinIO Python Library for Amazon S3 Compatible Cloud Storage, 3# (C) 2015, 2016 MinIO, Inc. 4# 5# Licensed under the Apache License, Version 2.0 (the "License"); 6# you may not use this file except in compliance with the License. 7# You may obtain a copy of the License at 8# 9# http://www.apache.org/licenses/LICENSE-2.0 10# 11# Unless required by applicable law or agreed to in writing, software 12# distributed under the License is distributed on an "AS IS" BASIS, 13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14# See the License for the specific language governing permissions and 15# limitations under the License. 16 17import mock 18 19from nose.tools import eq_ 20from unittest import TestCase 21 22from minio import Minio 23from minio.api import _DEFAULT_USER_AGENT 24 25from .minio_mocks import MockResponse, MockConnection 26 27class ListIncompleteUploadsTest(TestCase): 28 @mock.patch('urllib3.PoolManager') 29 def test_empty_list_uploads_test(self, mock_connection): 30 mock_data = '''<?xml version="1.0"?> 31 <ListMultipartUploadsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 32 <Bucket>golang</Bucket> 33 <KeyMarker/> 34 <UploadIdMarker/> 35 <NextKeyMarker/> 36 <NextUploadIdMarker/> 37 <EncodingType/> 38 <MaxUploads>1000</MaxUploads> 39 <IsTruncated>false</IsTruncated> 40 <Prefix/> 41 <Delimiter/> 42 </ListMultipartUploadsResult> 43 ''' 44 mock_server = MockConnection() 45 mock_connection.return_value = mock_server 46 mock_server.mock_add_request( 47 MockResponse('GET', 48 'https://localhost:9000/bucket/?max-uploads=1000&prefix=&uploads=', 49 {'User-Agent': _DEFAULT_USER_AGENT}, 200, content=mock_data)) 50 client = Minio('localhost:9000') 51 upload_iter = client._list_incomplete_uploads('bucket', '', True, False) 52 uploads = [] 53 for upload in upload_iter: 54 uploads.append(upload) 55 eq_(0, len(uploads)) 56 57 @mock.patch('urllib3.PoolManager') 58 def test_list_uploads_works(self, mock_connection): 59 mock_data = '''<?xml version="1.0"?> 60 <ListMultipartUploadsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 61 <Bucket>golang</Bucket> 62 <KeyMarker/> 63 <UploadIdMarker/> 64 <NextKeyMarker>keymarker</NextKeyMarker> 65 <NextUploadIdMarker>uploadidmarker</NextUploadIdMarker> 66 <EncodingType/> 67 <MaxUploads>1000</MaxUploads> 68 <IsTruncated>false</IsTruncated> 69 <Upload> 70 <Key>go1.4.2</Key> 71 <UploadId>uploadid</UploadId> 72 <Initiator> 73 <ID/> 74 <DisplayName/> 75 </Initiator> 76 <Owner> 77 <ID/> 78 <DisplayName/> 79 </Owner> 80 <StorageClass/> 81 <Initiated>2015-05-30T14:43:35.349Z</Initiated> 82 </Upload> 83 <Upload> 84 <Key>go1.5.0</Key> 85 <UploadId>uploadid2</UploadId> 86 <Initiator> 87 <ID/> 88 <DisplayName/> 89 </Initiator> 90 <Owner> 91 <ID/> 92 <DisplayName/> 93 </Owner> 94 <StorageClass/> 95 <Initiated>2015-05-30T15:00:07.759Z</Initiated> 96 </Upload> 97 <Prefix/> 98 <Delimiter/> 99 </ListMultipartUploadsResult> 100 ''' 101 mock_server = MockConnection() 102 mock_connection.return_value = mock_server 103 mock_server.mock_add_request( 104 MockResponse('GET', 105 'https://localhost:9000/bucket/?delimiter=%2F&max-uploads=1000&prefix=&uploads=', 106 {'User-Agent': _DEFAULT_USER_AGENT}, 107 200, content=mock_data)) 108 109 client = Minio('localhost:9000') 110 upload_iter = client._list_incomplete_uploads('bucket', '', False, False) 111 uploads = [] 112 for upload in upload_iter: 113 uploads.append(upload) 114 eq_(2, len(uploads)) 115 116 @mock.patch('urllib3.PoolManager') 117 def test_list_multipart_uploads_works(self, mock_connection): 118 mock_data1 = '''<?xml version="1.0"?> 119 <ListMultipartUploadsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 120 <Bucket>golang</Bucket> 121 <KeyMarker/> 122 <UploadIdMarker/> 123 <NextKeyMarker>keymarker</NextKeyMarker> 124 <NextUploadIdMarker>uploadidmarker</NextUploadIdMarker> 125 <EncodingType/> 126 <MaxUploads>1000</MaxUploads> 127 <IsTruncated>true</IsTruncated> 128 <Upload> 129 <Key>go1.4.2</Key> 130 <UploadId>uploadid</UploadId> 131 <Initiator> 132 <ID/> 133 <DisplayName/> 134 </Initiator> 135 <Owner> 136 <ID/> 137 <DisplayName/> 138 </Owner> 139 <StorageClass/> 140 <Initiated>2015-05-30T14:43:35.349Z</Initiated> 141 </Upload> 142 <Upload> 143 <Key>go1.5.0</Key> 144 <UploadId>uploadid2</UploadId> 145 <Initiator> 146 <ID/> 147 <DisplayName/> 148 </Initiator> 149 <Owner> 150 <ID/> 151 <DisplayName/> 152 </Owner> 153 <StorageClass/> 154 <Initiated>2015-05-30T15:00:07.759Z</Initiated> 155 </Upload> 156 <Prefix/> 157 <Delimiter/> 158 </ListMultipartUploadsResult> 159 ''' 160 mock_data2 = '''<?xml version="1.0"?> 161 <ListMultipartUploadsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 162 <Bucket>golang</Bucket> 163 <KeyMarker/> 164 <UploadIdMarker/> 165 <NextKeyMarker/> 166 <NextUploadIdMarker/> 167 <EncodingType/> 168 <MaxUploads>1000</MaxUploads> 169 <IsTruncated>false</IsTruncated> 170 <Upload> 171 <Key>go1.4.2</Key> 172 <UploadId>uploadid</UploadId> 173 <Initiator> 174 <ID/> 175 <DisplayName/> 176 </Initiator> 177 <Owner> 178 <ID/> 179 <DisplayName/> 180 </Owner> 181 <StorageClass/> 182 <Initiated>2015-05-30T14:43:35.349Z</Initiated> 183 </Upload> 184 <Upload> 185 <Key>go1.5.0</Key> 186 <UploadId>uploadid2</UploadId> 187 <Initiator> 188 <ID/> 189 <DisplayName/> 190 </Initiator> 191 <Owner> 192 <ID/> 193 <DisplayName/> 194 </Owner> 195 <StorageClass/> 196 <Initiated>2015-05-30T15:00:07.759Z</Initiated> 197 </Upload> 198 <Prefix/> 199 <Delimiter/> 200 </ListMultipartUploadsResult> 201 ''' 202 mock_server = MockConnection() 203 mock_connection.return_value = mock_server 204 mock_server.mock_add_request( 205 MockResponse('GET', 206 'https://localhost:9000/bucket/?max-uploads=1000&prefix=&uploads=', 207 {'User-Agent': _DEFAULT_USER_AGENT}, 200, content=mock_data1)) 208 209 client = Minio('localhost:9000') 210 upload_iter = client._list_incomplete_uploads('bucket', '', True, False) 211 uploads = [] 212 for upload in upload_iter: 213 mock_server.mock_add_request(MockResponse('GET', 214 'https://localhost:9000/bucket/?' 215 'key-marker=keymarker&' 216 'max-uploads=1000&prefix=&' 217 'upload-id-marker=uploadidmarker&uploads=', 218 {'User-Agent': _DEFAULT_USER_AGENT}, 200, content=mock_data2)) 219 uploads.append(upload) 220 221 eq_(4, len(uploads)) 222