|
19 | 19 | #include <glib.h> |
20 | 20 | #include <sys/stat.h> |
21 | 21 | #include <boost/test/unit_test.hpp> |
| 22 | +#include <inttypes.h> |
22 | 23 | #include "ds3.h" |
23 | 24 | #include "ds3_net.h" |
24 | 25 | #include "test.h" |
@@ -228,7 +229,56 @@ BOOST_AUTO_TEST_CASE( put_utf_object_name ) { |
228 | 229 | ds3_request_free(request); |
229 | 230 | ds3_bulk_object_list_response_free(obj_list); |
230 | 231 | handle_error(error); |
| 232 | + ds3_master_object_list_response_free(bulk_response); |
| 233 | + |
| 234 | + clear_bucket(client, bucket_name); |
| 235 | + free_client(client); |
| 236 | +} |
| 237 | + |
| 238 | +BOOST_AUTO_TEST_CASE( put_64bit_object_sizes ) { |
| 239 | + printf("-----Testing PUT objects with 64bit object sizes in name-------\n"); |
| 240 | + |
| 241 | + uint64_t test_objects_size = 429496729600; // 400gb > 32bit |
| 242 | + const char* bucket_name = "test_64_bit_object_sizes_bucket"; |
| 243 | + ds3_request* request = NULL; |
| 244 | + ds3_master_object_list_response* bulk_response = NULL; |
| 245 | + |
| 246 | + ds3_client* client = get_client(); |
| 247 | + ds3_error* error = create_bucket_with_data_policy(client, bucket_name, ids.data_policy_id->value); |
| 248 | + |
| 249 | + // Create obj_list with 1 folder with UTF-8 characters |
| 250 | + ds3_bulk_object_list_response* obj_list = ds3_init_bulk_object_list(); |
| 251 | + GPtrArray* ds3_bulk_object_response_array = g_ptr_array_new(); |
| 252 | + |
| 253 | + ds3_bulk_object_response* obj1 = g_new0(ds3_bulk_object_response, 1); |
| 254 | + obj1->name = ds3_str_init("max_size_obj_1"); |
| 255 | + obj1->length = test_objects_size; |
| 256 | + g_ptr_array_add(ds3_bulk_object_response_array, obj1); |
| 257 | + ds3_bulk_object_response* obj2 = g_new0(ds3_bulk_object_response, 1); |
| 258 | + obj2->name = ds3_str_init("max_size_obj_2"); |
| 259 | + obj2->length = test_objects_size; |
| 260 | + g_ptr_array_add(ds3_bulk_object_response_array, obj2); |
| 261 | + |
| 262 | + obj_list->objects = (ds3_bulk_object_response**)ds3_bulk_object_response_array->pdata; |
| 263 | + obj_list->num_objects = ds3_bulk_object_response_array->len; |
| 264 | + g_ptr_array_free(ds3_bulk_object_response_array, FALSE); |
| 265 | + |
| 266 | + request = ds3_init_put_bulk_job_spectra_s3_request(bucket_name, obj_list); |
| 267 | + error = ds3_put_bulk_job_spectra_s3_request(client, request, &bulk_response); |
| 268 | + ds3_request_free(request); |
| 269 | + ds3_bulk_object_list_response_free(obj_list); |
| 270 | + handle_error(error); |
| 271 | + |
| 272 | + BOOST_CHECK_EQUAL(bulk_response->num_objects, 14); |
231 | 273 |
|
| 274 | + BOOST_CHECK_EQUAL(bulk_response->objects[0]->objects[0]->length, 68719476736); |
| 275 | + BOOST_CHECK_EQUAL(bulk_response->objects[0]->objects[0]->offset, 0); |
| 276 | + |
| 277 | + BOOST_CHECK_EQUAL(bulk_response->objects[13]->objects[0]->length, 17179869184); |
| 278 | + BOOST_CHECK_EQUAL(bulk_response->objects[13]->objects[0]->offset, 412316860416); |
| 279 | + |
| 280 | + ds3_master_object_list_response_free(bulk_response); |
232 | 281 | clear_bucket(client, bucket_name); |
233 | 282 | free_client(client); |
234 | 283 | } |
| 284 | + |
0 commit comments