diff --git a/accelerator/apis.c b/accelerator/apis.c index 257e9d88..28e24dee 100644 --- a/accelerator/apis.c +++ b/accelerator/apis.c @@ -124,6 +124,7 @@ status_t api_find_transactions(const iota_client_service_t* const service, const *json_result = (char*)malloc((res_buff->length + 1) * sizeof(char)); if (*json_result == NULL) { + ret = SC_CCLIENT_JSON_PARSE; goto done; } snprintf(*json_result, (res_buff->length + 1), "%s", res_buff->data); diff --git a/accelerator/common_core.c b/accelerator/common_core.c index afea94f6..5fe95d64 100644 --- a/accelerator/common_core.c +++ b/accelerator/common_core.c @@ -292,7 +292,8 @@ status_t ta_find_transaction_objects(const iota_client_service_t* const service, get_trytes_req_t* req_get_trytes = get_trytes_req_new(); transaction_array_t* uncached_txn_array = transaction_array_new(); if (req == NULL || res == NULL || req_get_trytes == NULL || uncached_txn_array == NULL) { - return SC_TA_NULL; + ret = SC_TA_NULL; + goto done; } char txn_hash[NUM_TRYTES_HASH + 1] = {0}; char cache_value[NUM_TRYTES_SERIALIZED_TRANSACTION + 1] = {0}; @@ -319,16 +320,16 @@ status_t ta_find_transaction_objects(const iota_client_service_t* const service, transaction_array_push_back(res, temp); transaction_free(temp); + + // reset the string `cache_value` + cache_value[0] = '\0'; } else { if (hash243_queue_push(&req_get_trytes->hashes, q_iter->hash) != RC_OK) { - ret = SC_CCLIENT_OOM; + ret = SC_CCLIENT_HASH; goto done; } ret = SC_OK; } - - // reset the string `cache_value` - cache_value[0] = '\0'; } if (req_get_trytes->hashes != NULL) { @@ -338,7 +339,7 @@ status_t ta_find_transaction_objects(const iota_client_service_t* const service, } } - // append response of `iota_client_find_transaction_objectss` into cache + // append response of `iota_client_find_transaction_objects` into cache flex_trit_t* temp_txn_trits = NULL; TX_OBJS_FOREACH(uncached_txn_array, temp) { temp_txn_trits = transaction_serialize(temp); @@ -369,41 +370,6 @@ status_t ta_find_transaction_objects(const iota_client_service_t* const service, return ret; } -status_t ta_find_transactions_obj_by_tag(const iota_client_service_t* const service, const char* const req, - ta_find_transactions_obj_res_t* res) { - if (req == NULL || res == NULL) { - return SC_TA_NULL; - } - status_t ret = SC_OK; - - ta_find_transactions_res_t* hash_res = ta_find_transactions_res_new(); - if (hash_res == NULL) { - ret = SC_TA_OOM; - goto done; - } - - // get transaction hash - ret = ta_find_transactions_by_tag(service, req, hash_res); - if (ret) { - goto done; - } - - // get transaction obj - ta_find_transaction_objects_req_t* obj_req = ta_find_transaction_objects_req_new(); - if (obj_req == NULL) { - ret = SC_TA_OOM; - goto done; - } - hash243_queue_copy(&obj_req->hashes, hash_res->hashes, hash243_queue_count(hash_res->hashes)); - - ret = ta_find_transaction_objects(service, obj_req, res->txn_obj); - -done: - ta_find_transaction_objects_req_free(&obj_req); - ta_find_transactions_res_free(&hash_res); - return ret; -} - static int idx_sort(void const* lhs, void const* rhs) { iota_transaction_t* _lhs = (iota_transaction_t*)lhs; iota_transaction_t* _rhs = (iota_transaction_t*)rhs; diff --git a/accelerator/common_core.h b/accelerator/common_core.h index 6a7efbd3..dd2596ff 100644 --- a/accelerator/common_core.h +++ b/accelerator/common_core.h @@ -149,7 +149,7 @@ status_t ta_find_transactions_obj_by_tag(const iota_client_service_t* const serv * * @param[in] service IRI node end point service * @param[in] req Given transaction hashes - * @param[out] res Result containing transaction object in transaction_array_t. + * @param[out] res Result containing transaction objects in transaction_array_t. * * @return * - SC_OK on success diff --git a/accelerator/server.cc b/accelerator/server.cc index 2724c1c8..426219dc 100644 --- a/accelerator/server.cc +++ b/accelerator/server.cc @@ -127,7 +127,7 @@ int main(int argc, char* argv[]) { }); /** - * @method {post} /transaction/object Get transaction hash + * @method {post} /transaction/object Find transaction hash * * @return {String[]} hash Transaction hash */ @@ -156,9 +156,9 @@ int main(int argc, char* argv[]) { }); /** - * @method {post} /transaction/object Get transaction object + * @method {post} /transaction/object Find transaction object * - * @return {String[]} object Info of enitre transaction object + * @return {String[]} object Info of entire transaction object */ mux.handle("/transaction/object") .method(served::method::OPTIONS, diff --git a/serializer/serializer.c b/serializer/serializer.c index 3191a058..4d19b37e 100644 --- a/serializer/serializer.c +++ b/serializer/serializer.c @@ -222,7 +222,8 @@ status_t iota_transaction_to_json_object(iota_transaction_t const* const txn, cJ return SC_OK; } -status_t transaction_array_to_json_array(cJSON* json_root, char* obj_name, const transaction_array_t* const txn_array) { +static status_t transaction_array_to_json_array(cJSON* json_root, char* obj_name, + const transaction_array_t* const txn_array) { status_t ret = SC_OK; iota_transaction_t* txn = NULL; cJSON* txn_obj = NULL; @@ -415,7 +416,14 @@ status_t ta_send_trytes_res_serialize(const hash8019_array_p trytes, char** obj) status_t ta_find_transaction_objects_req_deserialize(const char* const obj, ta_find_transaction_objects_req_t* const req) { status_t ret = SC_OK; + if (obj == NULL) { + return SC_SERIALIZER_NULL; + } + cJSON* json_obj = cJSON_Parse(obj); + if (json_obj == NULL) { + return SC_SERIALIZER_JSON_PARSE; + } if (json_array_to_hash243_queue(json_obj, "hashes", &req->hashes) != RC_OK) { ret = SC_SERIALIZER_JSON_PARSE; diff --git a/tests/driver.c b/tests/driver.c index 01193f57..543abb48 100644 --- a/tests/driver.c +++ b/tests/driver.c @@ -130,7 +130,7 @@ void test_send_trytes(void) { } void test_find_transactions(void) { - const char* json = "{\"addresses\":[\"" TX_HASH_1 "\",\"" TX_HASH_2 "\"]}"; + const char* json = "{\"addresses\":[\"" TRYTES_81_2 "\",\"" TRYTES_81_3 "\"]}"; char* json_result; double sum = 0; @@ -144,7 +144,7 @@ void test_find_transactions(void) { } void test_find_transaction_objects(void) { - const char* json = "{\"hashes\":[\"" TX_HASH_1 "\",\"" TX_HASH_2 "\"]}"; + const char* json = "{\"hashes\":[\"" TRYTES_81_2 "\",\"" TRYTES_81_3 "\"]}"; char* json_result; double sum = 0; diff --git a/tests/iota_api_mock.cc b/tests/iota_api_mock.cc index c937005d..300cb4df 100644 --- a/tests/iota_api_mock.cc +++ b/tests/iota_api_mock.cc @@ -69,11 +69,10 @@ retcode_t iota_client_get_transaction_objects(iota_client_service_t const* const get_trytes_req_t* const tx_hashes, transaction_array_t* out_tx_objs) { flex_trit_t tx_trits[NUM_TRITS_SERIALIZED_TRANSACTION]; flex_trit_t hash_trits[NUM_TRITS_HASH]; - flex_trits_from_trytes(tx_trits, NUM_TRITS_SERIALIZED_TRANSACTION, (const tryte_t*)TRYTES_2673_1, + flex_trits_from_trytes(tx_trits, NUM_TRITS_SERIALIZED_TRANSACTION, (const tryte_t*)TRYTES_2673_2, NUM_TRYTES_SERIALIZED_TRANSACTION, NUM_TRYTES_SERIALIZED_TRANSACTION); - iota_transaction_t* temp = transaction_deserialize(tx_trits, 0); - transaction_set_hash(temp, hash_trits); + iota_transaction_t* temp = transaction_deserialize(tx_trits, true); transaction_array_push_back(out_tx_objs, temp); transaction_free(temp); diff --git a/tests/regression/1_run_TA_API.sh b/tests/regression/1_run_TA_API.sh index 6f2506b1..7a7156bb 100755 --- a/tests/regression/1_run_TA_API.sh +++ b/tests/regression/1_run_TA_API.sh @@ -10,7 +10,10 @@ pip install --user -r tests/regression/requirements.txt python3 tests/regression/runner.py $3 $4 $5 rc=$? -if [[ $rc != 0 ]]; then exit -1 $rc; fi +if [ $rc -ne 0 ] +then + exit -1; +fi wait $(kill -9 $TA) trap 'exit 0' SIGTERM diff --git a/tests/regression/runner.py b/tests/regression/runner.py index 12a6cd1b..2d2e7eec 100755 --- a/tests/regression/runner.py +++ b/tests/regression/runner.py @@ -280,8 +280,8 @@ def test_send_transfer(self): pass_case = [0, 1, 2, 3, 5, 6, 7, 8, 9, 10] for i in range(len(response)): if i in pass_case: - res_json = json.loads(response[i]["content"]) - + res_json_tmp = json.loads(response[i]["content"]) + res_json = res_json_tmp["transactions"][0] # we only send zero tx at this moment self.assertEqual(0, res_json["value"]) self.assertTrue(valid_trytes(res_json["tag"], LEN_TAG)) @@ -321,260 +321,221 @@ def test_send_transfer(self): eval_stat(time_cost, "send transfer") - def test_find_transactions_by_tag(self): + def test_find_transactions(self): logging.debug( - "\n================================find transactions by tag================================" + "\n================================find transactions================================" ) # cmd - # 0. 27 trytes tag - # 1. 20 trytes tag - # 2. 30 trytes tag - # 3. unicode trytes tag - # 4. Null trytes tag - rand_tag_27 = gen_rand_trytes(27) - rand_tag_20 = gen_rand_trytes(20) - rand_tag_30 = gen_rand_trytes(30) - query_string = [rand_tag_27, rand_tag_20, rand_tag_30, "半導體絆倒你", None] - - rand_msg = gen_rand_trytes(30) - rand_addr = gen_rand_trytes(81) - transaction_response = [] + # 0. single address req + # 1. multiple addresses req + # 2. single bundle req + # 3. multiple bundles req + # 4. single tag req + # 5. multiple tags req + # 6. single approvee req + # 7. multiple approvees req + # 8. addresses, bundles, tags, approvees req + query_bundle = [] + query_addr = [] + query_tag = [] + query_approvee = [] for i in range(3): - post_data = { + rand_tag = gen_rand_trytes(27) + rand_msg = gen_rand_trytes(30) + rand_addr = gen_rand_trytes(81) + tx_post_data = { "value": 0, "message": rand_msg, - "tag": query_string[i], + "tag": rand_tag, "address": rand_addr } - post_data_json = json.dumps(post_data) - transaction_response.append( - API("/transaction/", post_data=post_data_json)) - - for i in range(len(transaction_response)): - logging.debug("find transactions by tag i = " + str(i) + - ", tx_res = " + transaction_response[i]["content"] + - ", status code = " + - transaction_response[i]["status_code"]) - + tx_post_data_json = json.dumps(tx_post_data) + sent_transaction_obj = API("/transaction/", + post_data=tx_post_data_json) + + logging.debug("sent_transaction_obj = " + + repr(sent_transaction_obj)) + sent_transaction_obj_json = json.loads( + sent_transaction_obj["content"]) + sent_tx = sent_transaction_obj_json["transactions"][0] + + # append the sent transaction information + query_bundle.append(sent_tx["bundle_hash"]) + query_addr.append(rand_addr) + query_tag.append(rand_tag) + query_approvee.append(sent_tx["trunk_transaction_hash"]) + query_approvee.append(sent_tx["branch_transaction_hash"]) + + query_data = [{ + "addresses": [query_addr[0]] + }, { + "addresses": query_addr + }, { + "bundles": [query_bundle[0]] + }, { + "bundles": query_bundle + }, { + "tags": [query_tag[0]] + }, { + "tags": query_tag + }, { + "approvees": [query_approvee[0]] + }, { + "approvees": query_approvee + }, { + "addresses": query_addr, + "bundles": query_bundle, + "tags": query_tag, + "approvees": query_approvee + }] response = [] - for t_case in query_string: - logging.debug("testing case = " + repr(t_case)) - if t_case != None: - response.append(API("/tag/", get_data=(t_case + "/hashes"))) - else: - response.append(API("/tag/", get_data="/hashes")) + for i in range(len(query_data)): + logging.debug("testing case i = " + repr(i)) + post_data_json = json.dumps(query_data[i]) + response.append(API("/transaction/hash", post_data=post_data_json)) for i in range(len(response)): - logging.debug("find transactions by tag i = " + str(i) + - ", res = " + response[i]["content"] + - ", status code = " + response[i]["status_code"]) - pass_case = [0, 1] + logging.debug("response find transactions i = " + str(i) + ", " + + repr(response[i])) + + pass_case = [0, 1, 2, 3, 4, 5, 6, 7, 8] for i in range(len(response)): if i in pass_case: - expected_tx_json = json.loads( - transaction_response[i]["content"]) res_json = json.loads(response[i]["content"]) - - self.assertEqual(expected_tx_json["hash"], - res_json["hashes"][0]) + res_hashes_list = res_json["hashes"] + for tx_hash in res_hashes_list: + self.assertTrue(valid_trytes(tx_hash, LEN_ADDR)) else: - self.assertEqual(STATUS_CODE_400, response[i]["status_code"]) + self.assertEqual(STATUS_CODE_500, response[i]["status_code"]) # Time Statistics time_cost = [] + post_data_json = json.dumps(query_data[0]) for i in range(TIMES_TOTAL): start_time = time.time() - API("/tag/", get_data=(rand_tag_27 + "/hashes")) + API("/transaction/hash", post_data=post_data_json) time_cost.append(time.time() - start_time) - eval_stat(time_cost, "find transactions by tag") + eval_stat(time_cost, "find transactions") def test_get_transactions_object(self): logging.debug( - "\n================================get transactions object================================" + "\n================================find transaction objects================================" ) # cmd # 0. 81 trytes transaction hash - # 1. 20 trytes transaction hash - # 2. 100 trytes transaction hash - # 3. unicode transaction hash - # 4. Null transaction hash - rand_tag = gen_rand_trytes(27) - rand_msg = gen_rand_trytes(30) - rand_addr = gen_rand_trytes(81) - post_data = { - "value": 0, - "message": rand_msg, - "tag": rand_tag, - "address": rand_addr - } - post_data_json = json.dumps(post_data) - sent_transaction_obj = API("/transaction/", post_data=post_data_json) - - logging.debug("sent_transaction_obj = " + - ", sent_transaction_obj[0] = " + - sent_transaction_obj["content"] + - ", sent_transaction_obj[1] = " + - sent_transaction_obj["status_code"]) - sent_transaction_obj_json = json.loads(sent_transaction_obj["content"]) - sent_transaction_hash = sent_transaction_obj_json["hash"] - query_string = [ - sent_transaction_hash, sent_transaction_hash[0:19], - sent_transaction_hash + gen_rand_trytes(19), "工程師批哩趴啦的生活", "" - ] - - response = [] - for t_case in query_string: - logging.debug("testing case = " + repr(t_case)) - response.append(API("/transaction/", get_data=t_case)) - - for i in range(len(response)): - logging.debug("get transactions object i = " + str(i) + - ", res = " + repr(response[i]["content"]) + - ", status code = " + - repr(response[i]["status_code"])) - - pass_case = [0] - for i in range(len(response)): - if i in pass_case: - res_json = json.loads(response[i]["content"]) - self.assertEqual(sent_transaction_hash, res_json["hash"]) - else: - self.assertEqual(STATUS_CODE_405, response[i]["status_code"]) - - # Time Statistics - time_cost = [] - for i in range(TIMES_TOTAL): - start_time = time.time() - API("/transaction/", get_data=sent_transaction_hash) - time_cost.append(time.time() - start_time) - - eval_stat(time_cost, "get transactions object") - - def test_find_transactions_obj_by_tag(self): - logging.debug( - "\n================================find transactions object by tag================================" - ) - - # cmd - # 0. 27 trytes tag - # 1. 20 trytes tag - # 2. multiple transactions share the same 27 trytes tag - # 3. 30 trytes tag - # 4. unicode trytes tag - # 5. Null trytes tag - rand_tag_27 = gen_rand_trytes(27) - rand_tag_27_multi = gen_rand_trytes(27) - rand_tag_20 = gen_rand_trytes(20) - rand_tag_30 = gen_rand_trytes(30) - query_string = [ - rand_tag_27, rand_tag_27_multi, rand_tag_20, rand_tag_30, "半導體絆倒你", - "" - ] - - rand_msg = gen_rand_trytes(30) - rand_addr = gen_rand_trytes(81) - transaction_response = [] + # 1. multiple 81 trytes transaction hash + # 2. 20 trytes transaction hash + # 3. 100 trytes transaction hash + # 4. unicode transaction hash + # 5. Null transaction hash + sent_transaction_tmp = [] for i in range(3): - post_data = { + rand_tag = gen_rand_trytes(27) + rand_msg = gen_rand_trytes(30) + rand_addr = gen_rand_trytes(81) + tx_post_data = { "value": 0, "message": rand_msg, - "tag": query_string[i], + "tag": rand_tag, "address": rand_addr } - post_data_json = json.dumps(post_data) - - if i == 2: - transaction_response.append([ - API("/transaction/", post_data=post_data_json), - API("/transaction/", post_data=post_data_json) - ]) - else: - transaction_response.append( - [API("/transaction/", post_data=post_data_json)]) - - for i in range(len(transaction_response)): - logging.debug("find transactions obj by tag i = " + str(i) + - ", tx_res = " + repr(transaction_response[i])) + tx_post_data_json = json.dumps(tx_post_data) + sent_transaction_obj = API("/transaction/", + post_data=tx_post_data_json) + + logging.debug("sent_transaction_obj = " + + repr(sent_transaction_obj)) + sent_transaction_obj_json = json.loads( + sent_transaction_obj["content"]) + sent_transaction_tmp.append( + sent_transaction_obj_json["transactions"][0]) + sent_transaction = [[sent_transaction_tmp[0]], + [sent_transaction_tmp[1], sent_transaction_tmp[2]]] + query_string = [[sent_transaction_tmp[0]["hash"]], + [ + sent_transaction_tmp[1]["hash"], + sent_transaction_tmp[2]["hash"] + ], + gen_rand_trytes(19), + gen_rand_trytes(100), "工程師批哩趴啦的生活", ""] response = [] for t_case in query_string: logging.debug("testing case = " + repr(t_case)) - response.append(API("/tag/", get_data=t_case)) + post_data_json = json.dumps({"hashes": t_case}) + response.append( + API("/transaction/object", post_data=post_data_json)) for i in range(len(response)): - logging.debug("find transactions obj by tag i = " + str(i) + - ", res = " + repr(response[i])) - pass_case = [0, 1, 2] + logging.debug("response find transaction objects i = " + str(i) + + ", " + repr(response[i])) + pass_case = [0, 1] + for i in range(len(response)): if i in pass_case: - res_tx_json = json.loads(response[i]["content"]) - res_json = [] - expected_tx_json = [] - for j in range(len(transaction_response[i])): - res_json.append(res_tx_json["transactions"][j]) - expected_tx_json.append( - json.loads(transaction_response[i][j]["content"])) - - for j in range(len(expected_tx_json)): - case_examined_equal = False - for k in range(len(res_json)): - if expected_tx_json[j]["hash"] == res_json[k]["hash"]: + expect_txs = sent_transaction[i] + res_json = json.loads(response[i]["content"]) + res_txs = res_json["transactions"] + + for j in range(len(expect_txs)): + did_exmine = False + for k in range(len(res_txs)): + if expect_txs[j]["hash"] == res_txs[k]["hash"]: self.assertEqual( - expected_tx_json[j] + expect_txs[j] ["signature_and_message_fragment"], - res_json[k]["signature_and_message_fragment"]) - self.assertEqual(expected_tx_json[j]["address"], - res_json[k]["address"]) - self.assertEqual(expected_tx_json[j]["value"], - res_json[k]["value"]) - self.assertEqual( - expected_tx_json[j]["obsolete_tag"], - res_json[k]["obsolete_tag"]) - self.assertEqual(expected_tx_json[j]["timestamp"], - res_json[k]["timestamp"]) - self.assertEqual(expected_tx_json[j]["last_index"], - res_json[k]["last_index"]) + res_txs[k]["signature_and_message_fragment"]) + self.assertEqual(expect_txs[j]["address"], + res_txs[k]["address"]) + self.assertEqual(expect_txs[j]["value"], + res_txs[k]["value"]) + self.assertEqual(expect_txs[j]["obsolete_tag"], + res_txs[k]["obsolete_tag"]) + self.assertEqual(expect_txs[j]["timestamp"], + res_txs[k]["timestamp"]) + self.assertEqual(expect_txs[j]["last_index"], + res_txs[k]["last_index"]) + self.assertEqual(expect_txs[j]["bundle_hash"], + res_txs[k]["bundle_hash"]) self.assertEqual( - expected_tx_json[j]["bundle_hash"], - res_json[k]["bundle_hash"]) + expect_txs[j]["trunk_transaction_hash"], + res_txs[k]["trunk_transaction_hash"]) self.assertEqual( - expected_tx_json[j]["trunk_transaction_hash"], - res_json[k]["trunk_transaction_hash"]) + expect_txs[j]["branch_transaction_hash"], + res_txs[k]["branch_transaction_hash"]) + self.assertEqual(expect_txs[j]["tag"], + res_txs[k]["tag"]) self.assertEqual( - expected_tx_json[j]["branch_transaction_hash"], - res_json[k]["branch_transaction_hash"]) - self.assertEqual(expected_tx_json[j]["tag"], - res_json[k]["tag"]) + expect_txs[j]["attachment_timestamp"], + res_txs[k]["attachment_timestamp"]) self.assertEqual( - expected_tx_json[j]["attachment_timestamp"], - res_json[k]["attachment_timestamp"]) - self.assertEqual( - expected_tx_json[j] + expect_txs[j] ["attachment_timestamp_lower_bound"], - res_json[k] - ["attachment_timestamp_lower_bound"]) + res_txs[k]["attachment_timestamp_lower_bound"]) self.assertEqual( - expected_tx_json[j] + expect_txs[j] ["attachment_timestamp_upper_bound"], - res_json[k] - ["attachment_timestamp_upper_bound"]) - self.assertEqual(expected_tx_json[j]["nonce"], - res_json[k]["nonce"]) - case_examined_equal = True + res_txs[k]["attachment_timestamp_upper_bound"]) + self.assertEqual(expect_txs[j]["nonce"], + res_txs[k]["nonce"]) + did_exmine = True break - self.assertTrue(case_examined_equal) + + self.assertTrue(did_exmine) + else: - self.assertEqual(STATUS_CODE_400, response[i]["status_code"]) + self.assertEqual(STATUS_CODE_500, response[i]["status_code"]) # Time Statistics time_cost = [] + post_data_json = json.dumps({"hashes": query_string[0]}) for i in range(TIMES_TOTAL): start_time = time.time() - API("/tag/", get_data=rand_tag_27) + API("/transaction/object", post_data=post_data_json) time_cost.append(time.time() - start_time) - eval_stat(time_cost, "find transactions obj by tag") + eval_stat(time_cost, "find transaction objects") def test_get_tips(self): logging.debug( diff --git a/tests/test_common.cc b/tests/test_common.cc index b906e4e5..30659361 100644 --- a/tests/test_common.cc +++ b/tests/test_common.cc @@ -34,22 +34,6 @@ TEST(GetTxnToApproveTest, TrunkBranchHashTest) { ta_get_tips_res_free(&res); } -TEST(FindTxnTest, TxnHashTest) { - const char req[NUM_TRYTES_TAG] = {}; - ta_find_transactions_res_t* res = ta_find_transactions_res_new(); - flex_trit_t hash_trits_1[FLEX_TRIT_SIZE_243]; - flex_trits_from_trytes(hash_trits_1, NUM_TRITS_HASH, (const tryte_t*)TRYTES_81_1, NUM_TRYTES_HASH, NUM_TRYTES_HASH); - - EXPECT_CALL(APIMockObj, iota_client_find_transactions(_, _, _)).Times(AtLeast(1)); - - EXPECT_EQ(ta_find_transactions_by_tag(&service, req, res), 0); - hash243_queue_entry_t* q_iter = NULL; - CDL_FOREACH(res->hashes, q_iter) { - EXPECT_FALSE(memcmp(q_iter->hash, hash_trits_1, sizeof(flex_trit_t) * FLEX_TRIT_SIZE_243)); - } - ta_find_transactions_res_free(&res); -} - TEST(GenAdressTest, GetNewAddressTest) { tangle.seed = SEED; hash243_queue_entry_t* q_iter = NULL; @@ -70,44 +54,33 @@ TEST(GetTxnObjTest, GetTrytesTest) { flex_trit_t* txn_msg = NULL; ta_find_transaction_objects_req_t* req = ta_find_transaction_objects_req_new(); transaction_array_t* res = transaction_array_new(); - flex_trit_t msg_trits[FLEX_TRIT_SIZE_6561]; - flex_trit_t tx_trits[FLEX_TRIT_SIZE_243]; - flex_trits_from_trytes(msg_trits, NUM_TRITS_SIGNATURE, (const tryte_t*)TRYTES_2187_1, NUM_TRYTES_SIGNATURE, - NUM_TRYTES_SIGNATURE); - flex_trits_from_trytes(tx_trits, NUM_TRITS_ADDRESS, (const tryte_t*)TRYTES_81_1, NUM_TRYTES_ADDRESS, - NUM_TRYTES_ADDRESS); - hash243_queue_push(&req->hashes, tx_trits); - EXPECT_CALL(APIMockObj, iota_client_find_transaction_objects(_, _, _)).Times(AtLeast(0)); + flex_trit_t tx_trits[NUM_TRITS_SERIALIZED_TRANSACTION]; + flex_trits_from_trytes(tx_trits, NUM_TRITS_SERIALIZED_TRANSACTION, (const tryte_t*)TRYTES_2673_2, + NUM_TRYTES_SERIALIZED_TRANSACTION, NUM_TRYTES_SERIALIZED_TRANSACTION); + iota_transaction_t* expected_txn = transaction_deserialize(tx_trits, true); + hash243_queue_push(&req->hashes, transaction_hash(expected_txn)); + + EXPECT_CALL(APIMockObj, iota_client_get_transaction_objects(_, _, _)).Times(AtLeast(0)); EXPECT_EQ(ta_find_transaction_objects(&service, req, res), 0); iota_transaction_t* txn = transaction_array_at(res, 0); - txn_msg = transaction_message(txn); - EXPECT_FALSE(memcmp(txn_msg, msg_trits, sizeof(flex_trit_t) * FLEX_TRIT_SIZE_6561)); + EXPECT_EQ( + memcmp(transaction_address(expected_txn), transaction_address(txn), (sizeof(flex_trit_t) * FLEX_TRIT_SIZE_243)), + 0); + EXPECT_EQ(memcmp(transaction_obsolete_tag(expected_txn), transaction_obsolete_tag(txn), + (sizeof(flex_trit_t) * FLEX_TRIT_SIZE_243)), + 0); + EXPECT_EQ( + memcmp(transaction_message(expected_txn), transaction_message(txn), (sizeof(flex_trit_t) * FLEX_TRIT_SIZE_6561)), + 0); + EXPECT_EQ(memcmp(transaction_tag(expected_txn), transaction_tag(txn), (sizeof(flex_trit_t) * FLEX_TRIT_SIZE_81)), 0); + EXPECT_EQ(transaction_value(expected_txn), transaction_value(txn)); + EXPECT_EQ(transaction_current_index(expected_txn), transaction_current_index(txn)); ta_find_transaction_objects_req_free(&req); transaction_array_free(res); -} - -TEST(FindTxnObjTest, TxnObjTest) { - const char req[NUM_TRYTES_TAG] = {}; - const iota_transaction_t* txn = NULL; - flex_trit_t* txn_msg = NULL; - ta_find_transactions_obj_res_t* res = ta_find_transactions_obj_res_new(); - flex_trit_t msg_trits[FLEX_TRIT_SIZE_6561]; - flex_trits_from_trytes(msg_trits, NUM_TRITS_SIGNATURE, (const tryte_t*)TRYTES_2187_1, NUM_TRYTES_SIGNATURE, - NUM_TRYTES_SIGNATURE); - - EXPECT_CALL(APIMockObj, iota_client_find_transactions(_, _, _)).Times(AtLeast(1)); - EXPECT_CALL(APIMockObj, iota_client_get_trytes(_, _, _)).Times(AtLeast(0)); - - EXPECT_EQ(ta_find_transactions_obj_by_tag(&service, req, res), 0); - for (txn = (const iota_transaction_t*)utarray_front(res->txn_obj); txn != NULL; - txn = (const iota_transaction_t*)utarray_next(res->txn_obj, txn)) { - txn_msg = transaction_message(txn); - EXPECT_FALSE(memcmp(txn_msg, msg_trits, sizeof(flex_trit_t) * FLEX_TRIT_SIZE_6561)); - } - ta_find_transactions_obj_res_free(&res); + transaction_free(expected_txn); } TEST(SendTransferTest, SendTransferTest) { diff --git a/tests/test_define.h b/tests/test_define.h index 90195f3e..e6ba3eb4 100644 --- a/tests/test_define.h +++ b/tests/test_define.h @@ -23,15 +23,9 @@ extern "C" { "LCIKYSBE9IHXLIKCEJTTIQOTTAWSQCCQQ9A9VOKIWRBWVPXMCGUENWVVMQAMPEIVHEQ9JXLCNZ" \ "OORVZTZ" #define TRYTES_81_2 \ - "RVORZ9SIIP9RCYMREUIXXVPQIPHVCNPQ9HZWYKFWYWZRE9JQKG9REPKIASHUUECPSQO9JT9XNM" \ - "VKWYGVA" -#define TRYTES_81_3 \ - "BGBQJCVSOESTAVKHKD9QBNYVHUUEQUGZ9BEUAPG9HGQWAHMDAJXKDPUZPRBZVVIPRHMERPOBCD" \ - "YB99999" -#define TX_HASH_1 \ "PXOB9CZFPDEKEKXKUH9BPTZWXVANCRWNBILDFPQSILXAGFCKFPWWKYAUIPDDHGZMATMSRR9RDN" \ "RU99999" -#define TX_HASH_2 \ +#define TRYTES_81_3 \ "VULTESFNRYKRKVFBMNOVOV9BRXLXYAOLIBCRCXBTWECGWIAMLOFI9SRROIW9PMSUEWSJOFOWPB" \ "OQA9999" #define BUNDLE_HASH \