Skip to content

Commit

Permalink
Merge branch 'develop' into feature/ios-framework
Browse files Browse the repository at this point in the history
  • Loading branch information
rajivshah3 committed Apr 9, 2019
2 parents 92c8dfd + 771bb1e commit b246438
Show file tree
Hide file tree
Showing 35 changed files with 550 additions and 153 deletions.
2 changes: 1 addition & 1 deletion cclient/response/get_balances.h
Expand Up @@ -16,7 +16,7 @@ extern "C" {

static const UT_icd ut_uint64_icd UTARRAY_UNUSED = {sizeof(uint64_t), NULL, NULL, NULL};
typedef struct {
int milestone_index;
uint64_t milestone_index;
UT_array* balances;
hash243_queue_t references;
} get_balances_res_t;
Expand Down
14 changes: 8 additions & 6 deletions cclient/serialization/json/get_balances.c
Expand Up @@ -50,7 +50,7 @@ retcode_t json_get_balances_deserialize_request(serializer_t const *const s, cha
retcode_t ret = RC_OK;
cJSON *json_obj = cJSON_Parse(obj);
cJSON *json_item = NULL;
log_info(json_logger_id, "[%s:%d] %s\n", __func__, __LINE__, obj);
log_debug(json_logger_id, "[%s:%d] %s\n", __func__, __LINE__, obj);

JSON_CHECK_ERROR(json_obj, json_item, json_logger_id);

Expand All @@ -63,9 +63,11 @@ retcode_t json_get_balances_deserialize_request(serializer_t const *const s, cha
if (ret) {
goto end;
}
ret = json_array_to_hash243_queue(json_obj, "tips", &req->tips);
if (ret == RC_CCLIENT_JSON_KEY) {
ret = RC_OK;

if (cJSON_HasObjectItem(json_obj, "tips")) {
if ((ret = json_array_to_hash243_queue(json_obj, "tips", &req->tips)) != RC_OK) {
goto end;
}
}

end:
Expand All @@ -77,7 +79,7 @@ retcode_t json_get_balances_serialize_response(serializer_t const *const s, get_
char_buffer_t *out) {
retcode_t ret = RC_OK;
const char *json_text = NULL;
log_info(json_logger_id, "[%s:%d]\n", __func__, __LINE__);
log_debug(json_logger_id, "[%s:%d]\n", __func__, __LINE__);
cJSON *json_root = cJSON_CreateObject();
if (json_root == NULL) {
log_critical(json_logger_id, "[%s:%d] %s\n", __func__, __LINE__, STR_CCLIENT_JSON_CREATE);
Expand Down Expand Up @@ -126,7 +128,7 @@ retcode_t json_get_balances_deserialize_response(serializer_t const *const s, ch
goto end;
}

ret = json_get_int(json_obj, "milestoneIndex", &out->milestone_index);
ret = json_get_uint64(json_obj, "milestoneIndex", &out->milestone_index);

end:
cJSON_Delete(json_obj);
Expand Down
75 changes: 61 additions & 14 deletions cclient/serialization/json/get_inclusion_states.c
Expand Up @@ -9,11 +9,10 @@
#include "cclient/serialization/json/helpers.h"
#include "cclient/serialization/json/logger.h"

retcode_t json_get_inclusion_states_serialize_request(const serializer_t *const s,
get_inclusion_states_req_t *const obj, char_buffer_t *out) {
retcode_t json_get_inclusion_states_serialize_request(serializer_t const *const s,
get_inclusion_states_req_t const *const req, char_buffer_t *out) {
retcode_t ret = RC_OK;
const char *json_text = NULL;
size_t len = 0;
char const *json_text = NULL;
log_debug(json_logger_id, "[%s:%d]\n", __func__, __LINE__);
cJSON *json_root = cJSON_CreateObject();
if (json_root == NULL) {
Expand All @@ -23,23 +22,19 @@ retcode_t json_get_inclusion_states_serialize_request(const serializer_t *const

cJSON_AddItemToObject(json_root, "command", cJSON_CreateString("getInclusionStates"));

ret = hash243_queue_to_json_array(obj->hashes, json_root, "transactions");
ret = hash243_queue_to_json_array(req->hashes, json_root, "transactions");
if (ret != RC_OK) {
goto done;
}

ret = hash243_queue_to_json_array(obj->tips, json_root, "tips");
ret = hash243_queue_to_json_array(req->tips, json_root, "tips");
if (ret != RC_OK) {
goto done;
}

json_text = cJSON_PrintUnformatted(json_root);
if (json_text) {
len = strlen(json_text);
ret = char_buffer_allocate(out, len);
if (ret == RC_OK) {
strncpy(out->data, json_text, len);
}
ret = char_buffer_set(out, json_text);
cJSON_free((void *)json_text);
}

Expand All @@ -48,16 +43,68 @@ retcode_t json_get_inclusion_states_serialize_request(const serializer_t *const
return ret;
}

retcode_t json_get_inclusion_states_deserialize_response(const serializer_t *const s, const char *const obj,
get_inclusion_states_res_t *out) {
retcode_t json_get_inclusion_states_deserialize_request(serializer_t const *const s, char const *const obj,
get_inclusion_states_req_t *const req) {
retcode_t ret = RC_OK;
cJSON *json_obj = cJSON_Parse(obj);
cJSON *json_item = NULL;

log_debug(json_logger_id, "[%s:%d] %s\n", __func__, __LINE__, obj);
JSON_CHECK_ERROR(json_obj, json_item, json_logger_id);

ret = json_boolean_array_to_utarray(json_obj, "states", out->states);
ret = json_array_to_hash243_queue(json_obj, "transactions", &req->hashes);
if (ret != RC_OK) {
goto done;
}

if (cJSON_HasObjectItem(json_obj, "tips")) {
ret = json_array_to_hash243_queue(json_obj, "tips", &req->tips);
}

done:
cJSON_Delete(json_obj);
return ret;
}

retcode_t json_get_inclusion_states_serialize_response(serializer_t const *const s,
get_inclusion_states_res_t const *const res,
char_buffer_t *out) {
retcode_t ret = RC_OK;
char const *json_text = NULL;

log_debug(json_logger_id, "[%s:%d]\n", __func__, __LINE__);
cJSON *json_root = cJSON_CreateObject();
if (json_root == NULL) {
log_critical(json_logger_id, "[%s:%d] %s\n", __func__, __LINE__, STR_CCLIENT_JSON_CREATE);
return RC_CCLIENT_JSON_CREATE;
}

ret = utarray_to_json_boolean_array(res->states, json_root, "states");
if (ret != RC_OK) {
goto done;
}

json_text = cJSON_PrintUnformatted(json_root);
if (json_text) {
ret = char_buffer_set(out, json_text);
cJSON_free((void *)json_text);
}

done:
cJSON_Delete(json_root);
return ret;
}

retcode_t json_get_inclusion_states_deserialize_response(serializer_t const *const s, char const *const obj,
get_inclusion_states_res_t *const res) {
retcode_t ret = RC_OK;
cJSON *json_obj = cJSON_Parse(obj);
cJSON *json_item = NULL;

log_debug(json_logger_id, "[%s:%d] %s\n", __func__, __LINE__, obj);
JSON_CHECK_ERROR(json_obj, json_item, json_logger_id);

ret = json_boolean_array_to_utarray(json_obj, "states", res->states);

cJSON_Delete(json_obj);
return ret;
Expand Down
11 changes: 8 additions & 3 deletions cclient/serialization/json/get_inclusion_states.h
Expand Up @@ -16,11 +16,16 @@ extern "C" {

#include "cclient/request/get_inclusion_states.h"
#include "cclient/response/get_inclusion_states.h"
#include "cclient/serialization/json/helpers.h"
#include "cclient/serialization/serializer.h"

retcode_t json_get_inclusion_states_serialize_request(const serializer_t* const s,
get_inclusion_states_req_t* const obj, char_buffer_t* out);
retcode_t json_get_inclusion_states_deserialize_response(const serializer_t* const s, const char* const obj,
retcode_t json_get_inclusion_states_serialize_request(serializer_t const* const s,
get_inclusion_states_req_t const* const req, char_buffer_t* out);
retcode_t json_get_inclusion_states_deserialize_request(serializer_t const* const s, char const* const obj,
get_inclusion_states_req_t* const req);
retcode_t json_get_inclusion_states_serialize_response(serializer_t const* const s,
get_inclusion_states_res_t const* const res, char_buffer_t* out);
retcode_t json_get_inclusion_states_deserialize_response(serializer_t const* const s, char const* const obj,
get_inclusion_states_res_t* const res);

#ifdef __cplusplus
Expand Down
21 changes: 21 additions & 0 deletions cclient/serialization/json/helpers.c
Expand Up @@ -99,6 +99,27 @@ retcode_t json_boolean_array_to_utarray(cJSON const* const obj, char const* cons
return RC_OK;
}

retcode_t utarray_to_json_boolean_array(UT_array const* const ut, cJSON* const json_root, char const* const obj_name) {
if (!ut) {
log_error(json_logger_id, "[%s:%d] %s\n", __func__, __LINE__, STR_NULL_PARAM);
return RC_NULL_PARAM;
}
if (utarray_len(ut) > 0) {
cJSON* array_obj = cJSON_CreateArray();
if (array_obj == NULL) {
log_critical(json_logger_id, "[%s:%d] %s\n", __func__, __LINE__, STR_CCLIENT_JSON_CREATE);
return RC_CCLIENT_JSON_CREATE;
}

cJSON_AddItemToObject(json_root, obj_name, array_obj);
int* p = NULL;
while ((p = (int*)utarray_next(ut, p))) {
cJSON_AddItemToArray(array_obj, cJSON_CreateBool(*p));
}
}
return RC_OK;
}

retcode_t json_string_array_to_utarray(cJSON const* const obj, char const* const obj_name, UT_array* const ut) {
char* str = NULL;

Expand Down
2 changes: 2 additions & 0 deletions cclient/serialization/json/helpers.h
Expand Up @@ -50,6 +50,8 @@ retcode_t uint64_utarray_to_json_array(UT_array const *const ut, cJSON *const js

retcode_t json_boolean_array_to_utarray(cJSON const *const obj, char const *const obj_name, UT_array *const ut);

retcode_t utarray_to_json_boolean_array(UT_array const *const ut, cJSON *const json_root, char const *const obj_name);

retcode_t json_string_array_to_utarray(cJSON const *const obj, char const *const obj_name, UT_array *const ut);

retcode_t json_get_int(cJSON const *const json_obj, char const *const obj_name, int *const num);
Expand Down
2 changes: 2 additions & 0 deletions cclient/serialization/json/json_serializer.c
Expand Up @@ -44,6 +44,8 @@ static serializer_vtable json_vtable = {
.get_balances_serialize_response = json_get_balances_serialize_response,
.get_balances_deserialize_response = json_get_balances_deserialize_response,
.get_inclusion_states_serialize_request = json_get_inclusion_states_serialize_request,
.get_inclusion_states_deserialize_request = json_get_inclusion_states_deserialize_request,
.get_inclusion_states_serialize_response = json_get_inclusion_states_serialize_response,
.get_inclusion_states_deserialize_response = json_get_inclusion_states_deserialize_response,
.get_neighbors_serialize_request = json_get_neighbors_serialize_request,
.get_neighbors_serialize_response = json_get_neighbors_serialize_response,
Expand Down
75 changes: 67 additions & 8 deletions cclient/serialization/json/tests/get_inclusion_states.c
Expand Up @@ -7,22 +7,29 @@

#include "cclient/serialization/json/tests/shared.h"

void test_serialize_get_inclusion_states(void) {
void test_get_inclusion_states_serialize_request(void) {
serializer_t serializer;
init_json_serializer(&serializer);
const char* json_text =
char const* json_text =
"{\"command\":\"getInclusionStates\",\"transactions\":["
"\"" TEST_81_TRYTES_1 "\"],\"tips\":[\"" TEST_81_TRYTES_2 "\"]}";
char const* json_text_no_tips =
"{\"command\":\"getInclusionStates\",\"transactions\":["
"\"" TEST_81_TRYTES_1 "\"]}";

get_inclusion_states_req_t* get_is = get_inclusion_states_req_new();
char_buffer_t* serializer_out = char_buffer_new();
flex_trit_t trits_243[FLEX_TRIT_SIZE_243];

TEST_ASSERT(flex_trits_from_trytes(trits_243, NUM_TRITS_HASH, (const tryte_t*)TEST_81_TRYTES_1, NUM_TRYTES_HASH,
TEST_ASSERT(flex_trits_from_trytes(trits_243, NUM_TRITS_HASH, (tryte_t const*)TEST_81_TRYTES_1, NUM_TRYTES_HASH,
NUM_TRYTES_HASH));
TEST_ASSERT(hash243_queue_push(&get_is->hashes, trits_243) == RC_OK);

TEST_ASSERT(flex_trits_from_trytes(trits_243, NUM_TRITS_HASH, (const tryte_t*)TEST_81_TRYTES_2, NUM_TRYTES_HASH,
serializer.vtable.get_inclusion_states_serialize_request(&serializer, get_is, serializer_out);
// test request with no tips
TEST_ASSERT_EQUAL_STRING(json_text_no_tips, serializer_out->data);

TEST_ASSERT(flex_trits_from_trytes(trits_243, NUM_TRITS_HASH, (tryte_t const*)TEST_81_TRYTES_2, NUM_TRYTES_HASH,
NUM_TRYTES_HASH));
TEST_ASSERT(hash243_queue_push(&get_is->tips, trits_243) == RC_OK);

Expand All @@ -34,10 +41,59 @@ void test_serialize_get_inclusion_states(void) {
get_inclusion_states_req_free(&get_is);
}

void test_deserialize_get_inclusion_states(void) {
void test_get_inclusion_states_deserialize_request(void) {
serializer_t serializer;
init_json_serializer(&serializer);
char const* json_text = "{\"transactions\": [\"" TEST_81_TRYTES_1
"\"],"
"\"tips\": [\"" TEST_81_TRYTES_2 "\"]}";
char const* json_text_no_tips = "{\"transactions\": [\"" TEST_81_TRYTES_1 "\"]}";
flex_trit_t hash[FLEX_TRIT_SIZE_243];
flex_trit_t* req_transaction = NULL;
get_inclusion_states_req_t* deserialize_get_is = get_inclusion_states_req_new();

// test request with no tips
serializer.vtable.get_inclusion_states_deserialize_request(&serializer, json_text_no_tips, deserialize_get_is);
req_transaction = hash243_queue_at(&deserialize_get_is->hashes, 0);
flex_trits_from_trytes(hash, NUM_TRITS_HASH, (tryte_t*)TEST_81_TRYTES_1, NUM_TRYTES_HASH, NUM_TRYTES_HASH);
TEST_ASSERT_EQUAL_MEMORY(hash, req_transaction, FLEX_TRIT_SIZE_243);
TEST_ASSERT(hash243_queue_count(deserialize_get_is->tips) == 0);

// test request with tips
serializer.vtable.get_inclusion_states_deserialize_request(&serializer, json_text, deserialize_get_is);
req_transaction = hash243_queue_at(&deserialize_get_is->hashes, 0);
flex_trits_from_trytes(hash, NUM_TRITS_HASH, (tryte_t*)TEST_81_TRYTES_1, NUM_TRYTES_HASH, NUM_TRYTES_HASH);
TEST_ASSERT_EQUAL_MEMORY(hash, req_transaction, FLEX_TRIT_SIZE_243);

req_transaction = hash243_queue_at(&deserialize_get_is->tips, 0);
flex_trits_from_trytes(hash, NUM_TRITS_HASH, (tryte_t*)TEST_81_TRYTES_2, NUM_TRYTES_HASH, NUM_TRYTES_HASH);
TEST_ASSERT_EQUAL_MEMORY(hash, req_transaction, FLEX_TRIT_SIZE_243);
get_inclusion_states_req_free(&deserialize_get_is);
}

void test_get_inclusion_states_serialize_response(void) {
serializer_t serializer;
init_json_serializer(&serializer);
const char* json_text = "{\"states\": [true,false]}";
char const* json_text = "{\"states\":[true,false]}";

get_inclusion_states_res_t* get_is = get_inclusion_states_res_new();
char_buffer_t* serializer_out = char_buffer_new();

TEST_ASSERT(get_inclusion_states_res_states_set(get_is, 1) == RC_OK);
TEST_ASSERT(get_inclusion_states_res_states_set(get_is, 0) == RC_OK);

serializer.vtable.get_inclusion_states_serialize_response(&serializer, get_is, serializer_out);

TEST_ASSERT_EQUAL_STRING(json_text, serializer_out->data);

char_buffer_free(serializer_out);
get_inclusion_states_res_free(&get_is);
}

void test_get_inclusion_states_deserialize_response(void) {
serializer_t serializer;
init_json_serializer(&serializer);
char const* json_text = "{\"states\": [true,false]}";
get_inclusion_states_res_t* deserialize_get_is = get_inclusion_states_res_new();

serializer.vtable.get_inclusion_states_deserialize_response(&serializer, json_text, deserialize_get_is);
Expand All @@ -51,7 +107,10 @@ void test_deserialize_get_inclusion_states(void) {
int main(void) {
UNITY_BEGIN();

RUN_TEST(test_serialize_get_inclusion_states);
RUN_TEST(test_deserialize_get_inclusion_states);
RUN_TEST(test_get_inclusion_states_serialize_request);
RUN_TEST(test_get_inclusion_states_deserialize_request);
RUN_TEST(test_get_inclusion_states_serialize_response);
RUN_TEST(test_get_inclusion_states_deserialize_response);

return UNITY_END();
}
15 changes: 11 additions & 4 deletions cclient/serialization/serializer.h
Expand Up @@ -65,10 +65,17 @@ typedef struct {
retcode_t (*get_balances_deserialize_response)(serializer_t const* const s, char const* const obj,
get_balances_res_t* const out);

retcode_t (*get_inclusion_states_serialize_request)(serializer_t const* const, get_inclusion_states_req_t* const obj,
char_buffer_t* out);
retcode_t (*get_inclusion_states_deserialize_response)(serializer_t const* const, char const* const obj,
get_inclusion_states_res_t* out);
retcode_t (*get_inclusion_states_serialize_request)(serializer_t const* const s,
get_inclusion_states_req_t const* const obj, char_buffer_t* out);

retcode_t (*get_inclusion_states_deserialize_request)(serializer_t const* const s, char const* const obj,
get_inclusion_states_req_t* const out);

retcode_t (*get_inclusion_states_serialize_response)(serializer_t const* const s,
get_inclusion_states_res_t const* const obj, char_buffer_t* out);

retcode_t (*get_inclusion_states_deserialize_response)(serializer_t const* const s, char const* const obj,
get_inclusion_states_res_t* const out);

retcode_t (*get_neighbors_serialize_request)(serializer_t const* const s, char_buffer_t* out);
retcode_t (*get_neighbors_serialize_response)(serializer_t const* const s, get_neighbors_res_t const* const obj,
Expand Down
18 changes: 14 additions & 4 deletions ciri/BUILD
Expand Up @@ -3,13 +3,23 @@ package(default_visibility = ["//visibility:public"])
load(":conf.bzl", "CIRI_MAINNET_VARIABLES")
load(":conf.bzl", "CIRI_TESTNET_VARIABLES")

config_setting(
name = "mainnet",
values = {"define": "network=mainnet"},
)

config_setting(
name = "testnet",
values = {"define": "network=testnet"},
)

cc_binary(
name = "ciri",
srcs = ["main.c"],
copts = ["-DLOGGER_ENABLE"],
data = select({
"//config:mainnet": ["db/ciri-mainnet.db"],
"//config:testnet": ["db/ciri-testnet.db"],
"//ciri:mainnet": ["db/ciri-mainnet.db"],
"//ciri:testnet": ["db/ciri-testnet.db"],
"//conditions:default": ["db/ciri-mainnet.db"],
}) + [":conf.yml"],
deps = [
Expand Down Expand Up @@ -51,8 +61,8 @@ cc_library(
srcs = ["conf.c"],
hdrs = ["conf.h"],
defines = select({
"//config:mainnet": CIRI_MAINNET_VARIABLES,
"//config:testnet": CIRI_TESTNET_VARIABLES,
"//ciri:mainnet": CIRI_MAINNET_VARIABLES,
"//ciri:testnet": CIRI_TESTNET_VARIABLES,
"//conditions:default": CIRI_MAINNET_VARIABLES,
}),
deps = [
Expand Down

0 comments on commit b246438

Please sign in to comment.