Skip to content

Commit 818b429

Browse files
committed
Adding bulk_get test case to the unit test suite
1 parent 1bd40c4 commit 818b429

File tree

4 files changed

+101
-5
lines changed

4 files changed

+101
-5
lines changed

test/Makefile

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ run: test
2121
deps:
2222
./build_local.sh
2323

24-
test: test.o service_tests.o bucket_tests.o
24+
test: test.o service_tests.o bucket_tests.o bulk_get.o
2525
$(CPP) *.o $(CFLAGS) $(LIBS) -o test
2626

2727
test.o: ../install/lib/pkgconfig/libds3.pc
@@ -33,6 +33,9 @@ service_tests.o:
3333
bucket_tests.o:
3434
$(CPP) -c bucket_tests.cpp $(CFLAGS)
3535

36+
bulk_get.o:
37+
$(CPP) -c bulk_get.cpp $(CFLAGS)
38+
3639
../install/lib/pkgconfig/libds3.pc:
3740
$(error SDK not built. Please run make deps)
3841

test/bucket_tests.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ BOOST_AUTO_TEST_CASE( bulk_put ) {
88
ds3_error* error;
99
ds3_get_bucket_response* response;
1010
ds3_client* client = get_client();
11-
const char* bucket_name = "test_bucket";
11+
const char* bucket_name = "unit_test_bucket";
1212
uint64_t num_objs;
1313

1414
populate_with_objects(client, bucket_name);
@@ -34,7 +34,7 @@ BOOST_AUTO_TEST_CASE( prefix ) {
3434
ds3_error* error;
3535
ds3_get_bucket_response* response;
3636
ds3_client* client = get_client();
37-
const char* bucket_name = "test_bucket";
37+
const char* bucket_name = "unit_test_bucket";
3838
uint64_t num_objs;
3939

4040
populate_with_objects(client, bucket_name);
@@ -61,7 +61,7 @@ BOOST_AUTO_TEST_CASE( delimiter ) {
6161
ds3_error* error;
6262
ds3_get_bucket_response* response;
6363
ds3_client* client = get_client();
64-
const char* bucket_name = "test_bucket";
64+
const char* bucket_name = "unit_test_bucket";
6565
uint64_t num_objs;
6666

6767
populate_with_objects(client, bucket_name);

test/bulk_get.cpp

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
#include <stdio.h>
2+
#include <unistd.h>
3+
#include "ds3.h"
4+
#include "test.h"
5+
#include <boost/test/unit_test.hpp>
6+
7+
#define FILE_TEMPLATE "bulk-XXXXXX"
8+
9+
BOOST_AUTO_TEST_CASE( bulk_get ) {
10+
uint64_t i, n;
11+
uint64_t file_index = 0;
12+
ds3_request* request = NULL;
13+
ds3_error* error = NULL;
14+
ds3_get_bucket_response* response = NULL;
15+
ds3_bulk_response* bulk_response = NULL;
16+
ds3_bulk_object_list* object_list = NULL;
17+
ds3_get_available_chunks_response* chunk_response = NULL;
18+
bool retry_get;
19+
20+
ds3_client* client = get_client();
21+
const char* bucket_name = "unit_test_bucket";
22+
23+
char** tmp_files;
24+
25+
populate_with_objects(client, bucket_name);
26+
27+
request = ds3_init_get_bucket(bucket_name);
28+
error = ds3_get_bucket(client, request, &response);
29+
30+
ds3_free_request(request);
31+
32+
BOOST_REQUIRE(error == NULL);
33+
34+
tmp_files = (char**) calloc(response->num_objects, sizeof(char*));
35+
36+
object_list = ds3_convert_object_list(response->objects, response->num_objects);
37+
38+
request = ds3_init_get_bulk(bucket_name, object_list, NONE);
39+
error = ds3_bulk(client, request, &bulk_response);
40+
41+
ds3_free_request(request);
42+
ds3_free_bulk_object_list(object_list);
43+
44+
BOOST_REQUIRE(error == NULL);
45+
46+
do {
47+
retry_get = false;
48+
request = ds3_init_get_available_chunks(bulk_response->job_id->value);
49+
50+
error = ds3_get_available_chunks(client, request, &chunk_response);
51+
52+
ds3_free_request(request);
53+
54+
BOOST_REQUIRE(error == NULL);
55+
56+
BOOST_REQUIRE(chunk_response != NULL);
57+
58+
if (chunk_response->retry_after != 0) {
59+
// if this happens we need to try the request
60+
retry_get = true;
61+
sleep(chunk_response->retry_after);
62+
}
63+
64+
} while(retry_get);
65+
66+
BOOST_REQUIRE(error == NULL);
67+
68+
for (i = 0; i < chunk_response->object_list->list_size; i++) {
69+
ds3_bulk_object_list* chunk_object_list = chunk_response->object_list->list[i];
70+
for(n = 0; n < chunk_object_list->size; n++, file_index++) {
71+
FILE* w_file;
72+
ds3_bulk_object current_obj = chunk_object_list->list[n];
73+
request = ds3_init_get_object(bucket_name, current_obj.name->value);
74+
tmp_files[file_index] = (char*) calloc(13, sizeof(char));
75+
memcpy(tmp_files[file_index], FILE_TEMPLATE, 12);
76+
w_file = fopen(tmp_files[file_index], "w+");
77+
error = ds3_get_object(client, request, w_file, ds3_write_to_file);
78+
fclose(w_file);
79+
}
80+
}
81+
82+
for (i = 0; i <= file_index;i++) {
83+
unlink(tmp_files[i]);
84+
free(tmp_files[i]);
85+
}
86+
87+
free(tmp_files);
88+
89+
ds3_free_available_chunks_response(chunk_response);
90+
ds3_free_bulk_response(bulk_response);
91+
92+
clear_bucket(client, bucket_name);
93+
}

test/service_tests.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ BOOST_AUTO_TEST_CASE( put_bucket) {
2121
ds3_client* client = get_client();
2222
uint64_t i;
2323
bool found = false;
24-
const char* bucket_name = "test_bucket";
24+
const char* bucket_name = "unit_test_bucket";
2525
ds3_request* request = ds3_init_put_bucket(bucket_name);
2626
ds3_get_service_response* response;
2727

0 commit comments

Comments
 (0)