Skip to content

Commit 06e7a87

Browse files
authored
Merge pull request #158 from DenverM80/3_0_fix_special_chars
escape plus(+) char in object names; re-enable related tests
2 parents 56f6e62 + 652a1cf commit 06e7a87

File tree

3 files changed

+26
-17
lines changed

3 files changed

+26
-17
lines changed

src/ds3_net.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,10 @@ char* escape_url_extended(const char* url, const char** delimiters, uint32_t num
9191
return escaped_ptr;
9292
}
9393

94-
// Like escape_url but don't encode "/" or "+".
94+
// Like escape_url but don't encode "/".
9595
char* escape_url_object_name(const char* url) {
96-
const char *delimiters[2]={"/","+"};
97-
return escape_url_extended(url, delimiters, 2);
96+
const char *delimiters[1]={"/"};
97+
return escape_url_extended(url, delimiters, 1);
9898
}
9999

100100
// Like escape_url but don't encode "=".

test/bulk_get.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ BOOST_AUTO_TEST_CASE( chunk_preference ) {
278278
ds3_master_object_list_response* chunk_response = NULL;
279279
bool retry_get;
280280

281-
ds3_client* client = get_client_at_loglvl(DS3_TRACE);
281+
ds3_client* client = get_client();
282282
const char* bucket_name = "test_chunk_preference_bucket";
283283

284284
printf("-----Testing Bulk GET with chunk_preference-------\n");
@@ -405,7 +405,7 @@ BOOST_AUTO_TEST_CASE( escape_urls ) {
405405
const char *delimiters[4] = {"or", "/", "@", "="};
406406
const char *strings_to_test[5] = {"some normal text", "/an/object/name", "bytes=0-255,300-400,550-800", "orqwerty/qwerty@qwerty=", "`1234567890-=~!@#$%^&*()_+[]\{}|;:,./<>?"};
407407
const char *object_name_results[5] = {"some%20normal%20text", "/an/object/name", "bytes%3D0-255%2C300-400%2C550-800", "orqwerty/qwerty%40qwerty%3D",
408-
"%601234567890-%3D~%21%40%23%24%25%5E%26%2A%28%29_+%5B%5D%7B%7D%7C%3B%3A%2C./%3C%3E%3F"};
408+
"%601234567890-%3D~%21%40%23%24%25%5E%26%2A%28%29_%2B%5B%5D%7B%7D%7C%3B%3A%2C./%3C%3E%3F"};
409409
const char *range_header_results[5] = {"some%20normal%20text", "%2Fan%2Fobject%2Fname", "bytes=0-255,300-400,550-800", "orqwerty%2Fqwerty%40qwerty=",
410410
"%601234567890-=~%21%40%23%24%25%5E%26%2A%28%29_%2B%5B%5D%7B%7D%7C%3B%3A,.%2F%3C%3E%3F"};
411411
const char *general_delimiter_results[5] = {"some%20normal%20text", "/an/object/name", "bytes=0-255%2C300-400%2C550-800", "orqwerty/qwerty@qwerty=",

test/search_tests.cpp

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include <stdio.h>
33
#include "ds3.h"
44
#include "test.h"
5+
#include <sys/stat.h>
56
#include <boost/test/unit_test.hpp>
67

78
BOOST_AUTO_TEST_CASE( get_all_objects ) {
@@ -118,20 +119,25 @@ BOOST_AUTO_TEST_CASE( get_one_objects ) {
118119
free_client(client);
119120
}
120121

121-
/* Disabling from nightly test until network timeout failure is resolved */
122-
/*
123-
BOOST_AUTO_TEST_CASE(get_objects_details_with_plus_query_param) {
122+
BOOST_AUTO_TEST_CASE(get_objects_with_plus_query_param) {
124123
printf("-----Testing Search Object with +-------\n");
125124

126125
ds3_client* client = get_client();
127126
const char* bucket_name = "get_objects_details_with_plus_query_param";
128127
const char* plus_object = "Plus+Object";
128+
const char* local_file_to_put = "resources/beowulf.txt";
129+
struct stat file_info;
130+
memset(&file_info, 0, sizeof(struct stat));
131+
uint64_t file_size = 0;
129132

130133
ds3_error* bucket_error = create_bucket_with_data_policy(client, bucket_name, ids.data_policy_id->value);
131134
handle_error(bucket_error);
132135

133-
ds3_request* put_request = ds3_init_put_object_request(bucket_name, plus_object, 1024);
134-
FILE* obj_file = fopen("resources/beowulf.txt", "r");
136+
stat(local_file_to_put, &file_info);
137+
file_size = file_info.st_size;
138+
139+
ds3_request* put_request = ds3_init_put_object_request(bucket_name, plus_object, file_size);
140+
FILE* obj_file = fopen(local_file_to_put, "r");
135141

136142
ds3_error* error = ds3_put_object_request(client, put_request, obj_file, ds3_read_from_file);
137143
ds3_request_free(put_request);
@@ -155,22 +161,26 @@ BOOST_AUTO_TEST_CASE(get_objects_details_with_plus_query_param) {
155161
clear_bucket(client, bucket_name);
156162
free_client(client);
157163
}
158-
*/
159164

160-
/* Disabling from nightly test until network timeout failure is resolved */
161-
/*
162-
BOOST_AUTO_TEST_CASE(get_objects_details_with_special_chars_query_param) {
165+
BOOST_AUTO_TEST_CASE(get_objects_with_special_chars_query_param) {
163166
printf("-----Testing Search Object with special char-------\n");
164167

165168
ds3_client* client = get_client();
166169
const char* bucket_name = "TestSpecialCharacterInObjectName";
167170
const char* special_char_object = "varsity1314/_projects/VARSITY 13-14/_versions/Varsity 13-14 (2015-10-05 1827)/_project/Trash/PCMAC HD.avb";
171+
const char* local_file_to_put = "resources/beowulf.txt";
172+
struct stat file_info;
173+
memset(&file_info, 0, sizeof(struct stat));
174+
uint64_t file_size = 0;
168175

169176
ds3_error* bucket_error = create_bucket_with_data_policy(client, bucket_name, ids.data_policy_id->value);
170177
handle_error(bucket_error);
171178

172-
ds3_request* put_request = ds3_init_put_object_request(bucket_name, special_char_object, 1024);
173-
FILE* obj_file = fopen("resources/beowulf.txt", "r");
179+
stat(local_file_to_put, &file_info);
180+
file_size = file_info.st_size;
181+
182+
ds3_request* put_request = ds3_init_put_object_request(bucket_name, special_char_object, file_size);
183+
FILE* obj_file = fopen(local_file_to_put, "r");
174184

175185
ds3_error* error = ds3_put_object_request(client, put_request, obj_file, ds3_read_from_file);
176186
ds3_request_free(put_request);
@@ -194,7 +204,6 @@ BOOST_AUTO_TEST_CASE(get_objects_details_with_special_chars_query_param) {
194204
clear_bucket(client, bucket_name);
195205
free_client(client);
196206
}
197-
*/
198207

199208
BOOST_AUTO_TEST_CASE( get_folder_and_objects ) {
200209
uint64_t num_objs;

0 commit comments

Comments
 (0)