Skip to content

Commit 8bc3d38

Browse files
authored
Merge pull request #223 from RachelTucker/marshaling-tests
Fixing marshaling of ids request payload
2 parents 3506d70 + 11bb14d commit 8bc3d38

File tree

6 files changed

+250
-51
lines changed

6 files changed

+250
-51
lines changed

src/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ add_library(ds3 SHARED
1010
ds3_uint64_string_map.h ds3_uint64_string_map.c
1111
ds3_response_header_utils.h ds3_response_header_utils.c
1212
ds3_bool.h
13-
ds3_library_exports.h)
13+
ds3_library_exports.h
14+
ds3_marshaling.h)
1415

1516
if (WIN32)
1617
set(CMAKE_BUILD_TYPE Release)
@@ -89,6 +90,7 @@ else(WIN32)
8990
"ds3_response_header_utils.h"
9091
"ds3_bool.h"
9192
"ds3_library_exports.h"
93+
"ds3_marshaling.h"
9294
DESTINATION
9395
"/usr/local/include")
9496
install(TARGETS ds3 DESTINATION lib)

src/ds3_library_exports.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* ******************************************************************************
3-
* Copyright 2014-2017 Spectra Logic Corporation. All Rights Reserved.
3+
* Copyright 2014-2018 Spectra Logic Corporation. All Rights Reserved.
44
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use
55
* this file except in compliance with the License. A copy of the License is located at
66
*

src/ds3_marshaling.h

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/*
2+
* ******************************************************************************
3+
* Copyright 2014-2018 Spectra Logic Corporation. All Rights Reserved.
4+
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use
5+
* this file except in compliance with the License. A copy of the License is located at
6+
*
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
*
9+
* or in the "license" file accompanying this file.
10+
* This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
11+
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
12+
* specific language governing permissions and limitations under the License.
13+
* ****************************************************************************
14+
*/
15+
16+
#ifndef DS3_MARSHALING_H
17+
#define DS3_MARSHALING_H
18+
19+
#include <libxml/parser.h>
20+
21+
#ifdef __cplusplus
22+
extern "C" {
23+
#endif
24+
25+
typedef enum {
26+
BULK_PUT,
27+
BULK_GET,
28+
BULK_DELETE,
29+
GET_PHYSICAL_PLACEMENT,
30+
COMPLETE_MPU,
31+
STRING,
32+
STRING_LIST,
33+
ID_LIST,
34+
DATA
35+
}object_list_type;
36+
37+
typedef struct {
38+
char* buff;
39+
size_t size;
40+
size_t total_read;
41+
}ds3_xml_send_buff;
42+
43+
xmlDocPtr ds3_generate_xml_ids(ds3_ids_list* ids_list);
44+
xmlDocPtr ds3_generate_xml_delete_objects(ds3_delete_objects_response* keys_list);
45+
xmlDocPtr ds3_generate_xml_complete_mpu(const ds3_complete_multipart_upload_response* mpu_list);
46+
xmlDocPtr ds3_generate_xml_bulk_objects_list(const ds3_bulk_object_list_response* obj_list, object_list_type list_type);
47+
48+
#ifdef __cplusplus
49+
}
50+
#endif
51+
#endif

src/ds3_requests.c

Lines changed: 10 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include "ds3_string_multimap_impl.h"
2929
#include "ds3_uint64_string_map.h"
3030
#include "ds3_utils.h"
31+
#include "ds3_marshaling.h"
3132

3233
#ifdef _WIN32
3334
#include <io.h>
@@ -311,13 +312,6 @@ static ds3_bool xml_get_bool_from_attribute(const ds3_log* log, xmlDocPtr doc, s
311312
return xml_get_bool(log, doc, (xmlNodePtr) attribute);
312313
}
313314

314-
typedef struct {
315-
char* buff;
316-
size_t size;
317-
size_t total_read;
318-
}ds3_xml_send_buff;
319-
320-
321315
static size_t _ds3_send_xml_buff(void* buffer, size_t size, size_t nmemb, void* user_data) {
322316
size_t to_read;
323317
size_t remaining;
@@ -336,18 +330,6 @@ static size_t _ds3_send_xml_buff(void* buffer, size_t size, size_t nmemb, void*
336330
return to_read;
337331
}
338332

339-
typedef enum {
340-
BULK_PUT,
341-
BULK_GET,
342-
BULK_DELETE,
343-
GET_PHYSICAL_PLACEMENT,
344-
COMPLETE_MPU,
345-
STRING,
346-
STRING_LIST,
347-
ID_LIST,
348-
DATA
349-
}object_list_type;
350-
351333
static ds3_error* _internal_request_dispatcher(
352334
const ds3_client* client,
353335
const ds3_request* request,
@@ -408,7 +390,7 @@ static ds3_error* _get_request_xml_nodes(
408390
return NULL;
409391
}
410392

411-
static xmlDocPtr _generate_xml_bulk_objects_list(const ds3_bulk_object_list_response* obj_list, object_list_type list_type) {
393+
xmlDocPtr ds3_generate_xml_bulk_objects_list(const ds3_bulk_object_list_response* obj_list, object_list_type list_type) {
412394
char size_buff[STRING_BUFFER_SIZE];
413395
xmlDocPtr doc;
414396
ds3_bulk_object_response* obj;
@@ -442,7 +424,7 @@ static xmlDocPtr _generate_xml_bulk_objects_list(const ds3_bulk_object_list_resp
442424
return doc;
443425
}
444426

445-
static xmlDocPtr _generate_xml_complete_mpu(const ds3_complete_multipart_upload_response* mpu_list) {
427+
xmlDocPtr ds3_generate_xml_complete_mpu(const ds3_complete_multipart_upload_response* mpu_list) {
446428
char size_buff[STRING_BUFFER_SIZE];
447429
xmlDocPtr doc;
448430
ds3_multipart_upload_part_response* part;
@@ -469,7 +451,7 @@ static xmlDocPtr _generate_xml_complete_mpu(const ds3_complete_multipart_upload_
469451
return doc;
470452
}
471453

472-
static xmlDocPtr _generate_xml_delete_objects(ds3_delete_objects_response* keys_list) {
454+
xmlDocPtr ds3_generate_xml_delete_objects(ds3_delete_objects_response* keys_list) {
473455
xmlDocPtr doc;
474456
ds3_str* key;
475457
xmlNodePtr del_node, obj_node;
@@ -492,7 +474,7 @@ static xmlDocPtr _generate_xml_delete_objects(ds3_delete_objects_response* keys_
492474
return doc;
493475
}
494476

495-
static xmlDocPtr _generate_xml_ids(ds3_ids_list* ids_list) {
477+
xmlDocPtr ds3_generate_xml_ids(ds3_ids_list* ids_list) {
496478
xmlDocPtr doc;
497479
ds3_str* key;
498480
xmlNodePtr ids_node, id_node;
@@ -505,7 +487,7 @@ static xmlDocPtr _generate_xml_ids(ds3_ids_list* ids_list) {
505487
for (id_num = 0; id_num < ids_list->num_strings; id_num++) {
506488
key = ids_list->strings_list[id_num];
507489

508-
xmlNewTextChild(id_node, NULL, (xmlChar*) "Id", (xmlChar*) key->value);
490+
id_node = xmlNewTextChild(ids_node, NULL, (xmlChar*) "Id", (xmlChar*) key->value);
509491
xmlAddChild(ids_node, id_node);
510492
}
511493

@@ -530,29 +512,29 @@ static ds3_error* _init_request_payload(const ds3_request* _request,
530512
if (request->object_list == NULL || request->object_list->num_objects == 0) {
531513
return ds3_create_error(DS3_ERROR_MISSING_ARGS, "The bulk command requires a list of objects to process");
532514
}
533-
doc = _generate_xml_bulk_objects_list(request->object_list, operation_type);
515+
doc = ds3_generate_xml_bulk_objects_list(request->object_list, operation_type);
534516
break;
535517

536518
case COMPLETE_MPU:
537519
if (request->mpu_list == NULL || request->mpu_list->num_parts == 0) {
538520
return ds3_create_error(DS3_ERROR_MISSING_ARGS, "The complete multipart upload command requires a list of objects to process");
539521
}
540-
doc = _generate_xml_complete_mpu(request->mpu_list);
522+
doc = ds3_generate_xml_complete_mpu(request->mpu_list);
541523
break;
542524

543525
case BULK_DELETE:
544526
case STRING_LIST:
545527
if (request->delete_objects == NULL || request->delete_objects->num_strings == 0) {
546528
return ds3_create_error(DS3_ERROR_MISSING_ARGS, "The delete objects command requires a list of objects to process");
547529
}
548-
doc = _generate_xml_delete_objects(request->delete_objects);
530+
doc = ds3_generate_xml_delete_objects(request->delete_objects);
549531
break;
550532

551533
case ID_LIST:
552534
if (request->ids == NULL || request->ids->num_strings == 0) {
553535
return ds3_create_error(DS3_ERROR_MISSING_ARGS, "The suspect blob command requires a list of ids to process");
554536
}
555-
doc = _generate_xml_ids(request->ids);
537+
doc = ds3_generate_xml_ids(request->ids);
556538
break;
557539

558540
case STRING: // *** not XML - do not interpret

test/CMakeLists.txt

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,27 @@ set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/../modules/")
88

99
add_definitions(-DCURL_STATICLIB)
1010

11+
add_executable(ds3_c_tests
12+
bucket_tests.cpp
13+
bulk_get.cpp
14+
bulk_put.cpp
15+
checksum.cpp
16+
connection_tests.cpp
17+
deletes_test.cpp
18+
get_object.cpp
19+
get_physical_placement.cpp
20+
job_tests.cpp
21+
metadata_tests.cpp
22+
multimap_tests.cpp
23+
negative_tests.cpp
24+
put_directory.cpp
25+
search_tests.cpp
26+
service_tests.cpp
27+
unit_tests.cpp
28+
test.cpp)
29+
30+
add_test(regression_tests ds3_c_tests)
31+
1132
if (WIN32)
1233
find_package(Boost 1.59.0)
1334
include_directories(${Boost_INCLUDE_DIRS})
@@ -33,7 +54,16 @@ if (WIN32)
3354
set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${WINDOWS_VS_OUTPUT_DIR} )
3455
endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES )
3556

57+
target_link_libraries(ds3_c_tests ${WINDOWS_INSTALL_LIB_DIR}/libxml2_a.lib)
58+
3659
else(WIN32) # POSIX
60+
find_package(LibXml2 2.9 REQUIRED)
61+
62+
if (LIBXML2_FOUND)
63+
include_directories(${LIBXML2_INCLUDE_DIR})
64+
target_link_libraries (ds3_c_tests ${LIBXML2_LIBRARIES})
65+
endif (LIBXML2_FOUND)
66+
3767
add_definitions(-DBOOST_TEST_DYN_LINK)
3868
set(CMAKE_CXX_FLAGS "-g -Wall")
3969

@@ -63,27 +93,6 @@ else(WIN32) # POSIX
6393
#set(CMAKE_BUILD_TYPE Debug)
6494
endif(WIN32)
6595

66-
add_executable(ds3_c_tests
67-
bucket_tests.cpp
68-
bulk_get.cpp
69-
bulk_put.cpp
70-
checksum.cpp
71-
connection_tests.cpp
72-
deletes_test.cpp
73-
get_object.cpp
74-
get_physical_placement.cpp
75-
job_tests.cpp
76-
metadata_tests.cpp
77-
multimap_tests.cpp
78-
negative_tests.cpp
79-
put_directory.cpp
80-
search_tests.cpp
81-
service_tests.cpp
82-
unit_tests.cpp
83-
test.cpp)
84-
85-
add_test(regression_tests ds3_c_tests)
86-
8796
target_link_libraries(ds3_c_tests ds3 glib-2.0 boost_unit_test_framework)
8897

8998
find_program(VALGRIND "valgrind")

0 commit comments

Comments
 (0)