Skip to content

Commit 2383bfd

Browse files
committed
Updating bulk request payloads to marshal version
1 parent 94d3701 commit 2383bfd

File tree

4 files changed

+53
-14
lines changed

4 files changed

+53
-14
lines changed

src/ds3.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,8 @@ ds3_bulk_object_list_response* ds3_convert_object_list(const ds3_contents_respon
350350
for (object_index = 0; object_index < num_objects; object_index++) {
351351
ds3_bulk_object_response* response = g_new0(ds3_bulk_object_response, 1);
352352
response->name = ds3_str_dup(objects[object_index]->key);
353+
response->version = ds3_str_dup(objects[object_index]->version_id);
354+
353355
g_ptr_array_add(ds3_bulk_object_response_array, response);
354356
}
355357

src/ds3_requests.c

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,10 @@ static xmlDocPtr _generate_xml_bulk_objects_list(const ds3_bulk_object_list_resp
439439
if (list_type == BULK_PUT) {
440440
xmlSetProp(object_node, (xmlChar*) "Size", (xmlChar*) size_buff);
441441
}
442+
443+
if (list_type == BULK_GET && obj->version != NULL && strlen(obj->version->value) != 0) {
444+
xmlSetProp(object_node, (xmlChar*) "VersionId", (xmlChar*) obj->version->value);
445+
}
442446
}
443447

444448
xmlDocSetRootElement(doc, objects_node);
@@ -15754,6 +15758,9 @@ ds3_error* ds3_replicate_put_job_spectra_s3_request(const ds3_client* client, co
1575415758
return _parse_top_level_ds3_master_object_list_response(client, request, response, xml_blob);
1575515759
}
1575615760
ds3_error* ds3_stage_objects_job_spectra_s3_request(const ds3_client* client, const ds3_request* request) {
15761+
ds3_error* error;
15762+
ds3_xml_send_buff send_buff;
15763+
GByteArray* xml_blob;
1575715764

1575815765
int num_slashes = num_chars_in_ds3_str(request->path, '/');
1575915766
if (num_slashes < 2 || ((num_slashes == 2) && ('/' == request->path->value[request->path->size-1]))) {
@@ -15762,7 +15769,17 @@ ds3_error* ds3_stage_objects_job_spectra_s3_request(const ds3_client* client, co
1576215769
return ds3_create_error(DS3_ERROR_MISSING_ARGS, "The resource id parameter is required.");
1576315770
}
1576415771

15765-
return _internal_request_dispatcher(client, request, NULL, NULL, NULL, NULL, NULL);
15772+
error = _init_request_payload(request, &send_buff, BULK_GET);
15773+
if (error != NULL) return error;
15774+
15775+
xml_blob = g_byte_array_new();
15776+
error = _internal_request_dispatcher(client, request, xml_blob, ds3_load_buffer, (void*) &send_buff, _ds3_send_xml_buff, NULL);
15777+
15778+
// Clean up the data sent to the server
15779+
xmlFree(send_buff.buff);
15780+
15781+
g_byte_array_free(xml_blob, TRUE);
15782+
return error;
1576615783
}
1576715784
ds3_error* ds3_truncate_active_job_spectra_s3_request(const ds3_client* client, const ds3_request* request) {
1576815785

test/negative_tests.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
#include "test.h"
2020
#include <boost/test/unit_test.hpp>
2121

22+
23+
24+
2225
//Testing a Duplicate Bucket Put
2326
BOOST_AUTO_TEST_CASE(put_duplicate_bucket) {
2427
printf("-----Negative Testing Duplicate Bucket Creation-------\n");
@@ -75,6 +78,7 @@ BOOST_AUTO_TEST_CASE(delete_non_existing_bucket){
7578
request = ds3_init_delete_bucket_request(bucket_name);
7679
error = ds3_delete_bucket_request(client, request);
7780
ds3_request_free(request);
81+
7882
BOOST_CHECK(error != NULL);
7983
BOOST_CHECK(error->error->http_error_code == 404);
8084
BOOST_CHECK(strcmp(error->error->code->value ,"Not Found")==0);
@@ -178,6 +182,7 @@ BOOST_AUTO_TEST_CASE(head_bucket_non_existing_bucket){
178182
request = ds3_init_head_bucket_request(bucket_name);
179183
error = ds3_head_bucket_request(client, request);
180184
ds3_request_free(request);
185+
181186
BOOST_CHECK(error != NULL);
182187
BOOST_CHECK(error->error->http_error_code == 404);
183188
BOOST_CHECK(strcmp(error->error->code->value ,"Not Found")==0);
@@ -225,7 +230,7 @@ BOOST_AUTO_TEST_CASE(delete_non_existing_object) {
225230
free_client(client);
226231

227232
BOOST_REQUIRE(error != NULL);
228-
BOOST_CHECK(error->error->http_error_code == 404);
233+
BOOST_CHECK(error->error->http_error_code == 404);
229234
BOOST_CHECK(strcmp(error->error->code->value ,"Not Found") == 0);
230235
ds3_error_free(error);
231236
}
@@ -256,7 +261,7 @@ BOOST_AUTO_TEST_CASE( put_bucket_bucket_name_with_trailing_slash){
256261
BOOST_CHECK(put_bucket_error != NULL);
257262
BOOST_CHECK(put_bucket_error->code == DS3_ERROR_BAD_STATUS_CODE);
258263
BOOST_CHECK(put_bucket_error->error->http_error_code == 400);
259-
BOOST_CHECK_EQUAL( g_strcmp0(put_bucket_error->error->code->value, "Bad Request"), 0);
264+
BOOST_CHECK(strcmp(put_bucket_error->error->code->value, "Bad Request") == 0);
260265

261266
ds3_error_free(put_bucket_error);
262267
clear_bucket(client, bucket_name);

test/test.cpp

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,25 @@ void test_log(const char* message, void* user_data) {
7676
}
7777
}
7878

79+
void print_error(const ds3_error* error) {
80+
if (error == NULL) {
81+
return;
82+
}
83+
if (NULL != error->message) {
84+
printf("ds3_error_message: %s\n", error->message->value);
85+
}
86+
if (error->error != NULL) {
87+
printf("ds3_status_code: %lu\n", (unsigned long)error->error->http_error_code);
88+
printf("ds3_status_message: %s\n", error->error->message->value);
89+
printf("ds3_error_body: %s\n", error->error->code->value);
90+
}
91+
}
92+
7993
ds3_client* get_client_at_loglvl(ds3_log_lvl log_lvl) {
8094
ds3_client* client;
8195

8296
ds3_error* error = ds3_create_client_from_env(&client);
97+
print_error(error);
8398

8499
if (error != NULL) {
85100
fprintf(stderr, "Failed to construct ds3_client from environment variables: %s\n", error->message->value);
@@ -119,6 +134,8 @@ void configure_for_tests() {
119134
// Create DataPolicy
120135
ds3_request* put_dp_request = ds3_init_put_data_policy_spectra_s3_request(TEST_DP_NAME);
121136
ds3_error* error = ds3_put_data_policy_spectra_s3_request(client, put_dp_request, &put_dp_response);
137+
print_error(error);
138+
122139
data_policy_id = ds3_str_init(put_dp_response->id->value);
123140

124141
ds3_request_free(put_dp_request);
@@ -128,6 +145,7 @@ void configure_for_tests() {
128145
// Create StorageDomain
129146
ds3_request* put_sd_request = ds3_init_put_storage_domain_spectra_s3_request(TEST_SD_NAME);
130147
error = ds3_put_storage_domain_spectra_s3_request(client, put_sd_request, &put_sd_response);
148+
print_error(error);
131149
storage_domain_id = ds3_str_init(put_sd_response->id->value);
132150

133151
ds3_request_free(put_sd_request);
@@ -137,6 +155,7 @@ void configure_for_tests() {
137155
// Create pool partition
138156
ds3_request* put_pp_request = ds3_init_put_pool_partition_spectra_s3_request(TEST_PP_NAME, DS3_POOL_TYPE_ONLINE);
139157
error = ds3_put_pool_partition_spectra_s3_request(client, put_pp_request, &put_pp_response);
158+
print_error(error);
140159
pool_partition_id = ds3_str_init(put_pp_response->id->value);
141160

142161
ds3_request_free(put_pp_request);
@@ -146,6 +165,7 @@ void configure_for_tests() {
146165
// Create storage domain member linking pool partition to storage domain
147166
ds3_request* put_pool_sd_member_request = ds3_init_put_pool_storage_domain_member_spectra_s3_request(pool_partition_id->value, storage_domain_id->value);
148167
error = ds3_put_pool_storage_domain_member_spectra_s3_request(client, put_pool_sd_member_request, &put_sd_member_response);
168+
print_error(error);
149169
storage_domain_member_id = ds3_str_init(put_sd_member_response->id->value);
150170

151171
ds3_request_free(put_pool_sd_member_request);
@@ -159,6 +179,7 @@ void configure_for_tests() {
159179
storage_domain_id->value,
160180
DS3_DATA_PERSISTENCE_RULE_TYPE_PERMANENT);
161181
error = ds3_put_data_persistence_rule_spectra_s3_request(client, put_data_persistence_rule_request, &put_data_persistence_rule_response);
182+
print_error(error);
162183
data_persistence_rule_id = ds3_str_init(put_data_persistence_rule_response->id->value);
163184

164185
ds3_request_free(put_data_persistence_rule_request);
@@ -180,47 +201,41 @@ void teardown_after_tests() {
180201
// Delete DataPersistenceRule
181202
ds3_request* delete_data_persistence_rule_request = ds3_init_delete_data_persistence_rule_spectra_s3_request(ids.data_persistence_rule_id->value);
182203
error = ds3_delete_data_persistence_rule_spectra_s3_request(client, delete_data_persistence_rule_request);
204+
print_error(error);
183205
ds3_request_free(delete_data_persistence_rule_request);
184206
ds3_error_free(error);
185207

186208
// Delete DataPolicy
187209
ds3_request* delete_data_policy_request = ds3_init_delete_data_policy_spectra_s3_request(TEST_DP_NAME);
188210
error = ds3_delete_data_policy_spectra_s3_request(client, delete_data_policy_request);
211+
print_error(error);
189212
ds3_request_free(delete_data_policy_request);
190213
ds3_error_free(error);
191214

192215
// Delete StorageDomainMember
193216
ds3_request* delete_storage_domain_member_request = ds3_init_delete_storage_domain_member_spectra_s3_request(ids.storage_domain_member_id->value);
194217
error = ds3_delete_storage_domain_member_spectra_s3_request(client, delete_storage_domain_member_request);
218+
print_error(error);
195219
ds3_request_free(delete_storage_domain_member_request);
196220
ds3_error_free(error);
197221

198222
// Delete StorageDomain
199223
ds3_request* delete_storage_domain_request = ds3_init_delete_storage_domain_spectra_s3_request(TEST_SD_NAME);
200224
error = ds3_delete_storage_domain_spectra_s3_request(client, delete_storage_domain_request);
225+
print_error(error);
201226
ds3_request_free(delete_storage_domain_request);
202227
ds3_error_free(error);
203228

204229
// Delete PoolPartition
205230
ds3_request* delete_pool_partition_request = ds3_init_delete_pool_partition_spectra_s3_request(TEST_PP_NAME);
206231
error = ds3_delete_pool_partition_spectra_s3_request(client, delete_pool_partition_request);
232+
print_error(error);
207233
ds3_request_free(delete_pool_partition_request);
208234
ds3_error_free(error);
209235

210236
free_client(client);
211237
}
212238

213-
void print_error(const ds3_error* error) {
214-
if (NULL != error->message) {
215-
printf("ds3_error_message: %s\n", error->message->value);
216-
}
217-
if (error->error != NULL) {
218-
printf("ds3_status_code: %lu\n", (unsigned long)error->error->http_error_code);
219-
printf("ds3_status_message: %s\n", error->error->message->value);
220-
printf("ds3_error_body: %s\n", error->error->code->value);
221-
}
222-
}
223-
224239
void handle_error(ds3_error* error) {
225240
BOOST_CHECK(error == NULL);
226241
if (error != NULL) {

0 commit comments

Comments
 (0)