forked from agorise/c-ipfs
158 lines
4.3 KiB
C
158 lines
4.3 KiB
C
#include "ipfs/merkledag/node.h"
|
|
|
|
/***
|
|
* Testing of storage nodes. Nodes can be directories, files, or sections of a file.
|
|
*/
|
|
|
|
int test_node() {
|
|
//Variables of link:
|
|
char * name = "Alex";
|
|
unsigned char * ahash = (unsigned char*)"QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG";
|
|
struct NodeLink * mylink;
|
|
int retVal = ipfs_node_link_create(name,ahash, strlen((char*)ahash), &mylink);
|
|
if (retVal == 0)
|
|
return 0;
|
|
|
|
//Link Two for testing purposes
|
|
char * name2 = "Simo";
|
|
unsigned char * ahash2 = (unsigned char*)"QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnSimo";
|
|
struct NodeLink * mylink2;
|
|
retVal = ipfs_node_link_create(name2, ahash2, strlen((char*)ahash2), &mylink2);
|
|
|
|
//Nodes
|
|
struct HashtableNode * Mynode;
|
|
retVal = ipfs_hashtable_node_new_from_link(mylink, &Mynode);
|
|
//mylink->name = "HAHA";//Testing for valid node creation
|
|
retVal = ipfs_hashtable_node_add_link(Mynode, mylink2);
|
|
//mylink2->name = "HAHA";//Testing for valid node creation
|
|
//struct NodeLink * ResultLink = ipfs_node_get_link_by_name(Mynode, "Simo");
|
|
ipfs_hashtable_node_remove_link_by_name("Simo", Mynode);
|
|
ipfs_hashtable_node_free(Mynode);
|
|
return 1;
|
|
}
|
|
|
|
int compare_link(struct NodeLink* link1, struct NodeLink* link2) {
|
|
if (strcmp(link1->name, link2->name) != 0) {
|
|
printf("Link Names are different %s vs. %s\n", link1->name, link2->name);
|
|
return 0;
|
|
}
|
|
if (link1->hash_size != link2->hash_size) {
|
|
printf("Link cid hash lengths are different. Expected %d but got %d\n", (int)link1->hash_size, (int)link2->hash_size);
|
|
return 0;
|
|
}
|
|
if (memcmp(link1->hash, link2->hash, link1->hash_size) != 0) {
|
|
printf("compare_link: The values of the hashes are different\n");
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
int test_node_link_encode_decode() {
|
|
struct NodeLink* control = NULL;
|
|
struct NodeLink* results = NULL;
|
|
size_t nl_size;
|
|
unsigned char* buffer = NULL;
|
|
int retVal = 0;
|
|
|
|
// make a NodeLink
|
|
if (ipfs_node_link_create("My Name", (unsigned char*)"QmMyHash", 8, &control) == 0)
|
|
goto l_exit;
|
|
|
|
// encode it
|
|
nl_size = ipfs_node_link_protobuf_encode_size(control);
|
|
buffer = malloc(nl_size);
|
|
if (buffer == NULL)
|
|
goto l_exit;
|
|
if (ipfs_node_link_protobuf_encode(control, buffer, nl_size, &nl_size) == 0) {
|
|
goto l_exit;
|
|
}
|
|
|
|
// decode it
|
|
if (ipfs_node_link_protobuf_decode(buffer, nl_size, &results) == 0) {
|
|
goto l_exit;
|
|
}
|
|
|
|
// verify it
|
|
if (compare_link(control, results) == 0)
|
|
goto l_exit;
|
|
retVal = 1;
|
|
l_exit:
|
|
if (control != NULL)
|
|
ipfs_node_link_free(control);
|
|
if (results != NULL)
|
|
ipfs_node_link_free(results);
|
|
if (buffer != NULL)
|
|
free(buffer);
|
|
return retVal;
|
|
}
|
|
|
|
/***
|
|
* Test a node with 2 links
|
|
*/
|
|
int test_node_encode_decode() {
|
|
struct HashtableNode* control = NULL;
|
|
struct HashtableNode* results = NULL;
|
|
struct NodeLink* link1 = NULL;
|
|
struct NodeLink* link2 = NULL;
|
|
int retVal = 0;
|
|
size_t buffer_length = 0;
|
|
unsigned char* buffer = NULL;
|
|
|
|
// node
|
|
if (ipfs_hashtable_node_new(&control) == 0)
|
|
goto ed_exit;
|
|
|
|
// first link
|
|
if (ipfs_node_link_create((char*)"Link1", (unsigned char*)"QmLink1", 7, &link1) == 0)
|
|
goto ed_exit;
|
|
|
|
if ( ipfs_hashtable_node_add_link(control, link1) == 0)
|
|
goto ed_exit;
|
|
|
|
// second link
|
|
if (ipfs_node_link_create((char*)"Link2", (unsigned char*)"QmLink2", 7, &link2) == 0)
|
|
goto ed_exit;
|
|
if ( ipfs_hashtable_node_add_link(control, link2) == 0)
|
|
goto ed_exit;
|
|
// encode
|
|
buffer_length = ipfs_hashtable_node_protobuf_encode_size(control);
|
|
buffer = (unsigned char*)malloc(buffer_length);
|
|
if (ipfs_hashtable_node_protobuf_encode(control, buffer, buffer_length, &buffer_length) == 0)
|
|
goto ed_exit;
|
|
|
|
// decode
|
|
if (ipfs_hashtable_node_protobuf_decode(buffer, buffer_length, &results) == 0)
|
|
goto ed_exit;
|
|
|
|
// compare results
|
|
|
|
struct NodeLink* control_link = control->head_link;
|
|
struct NodeLink* results_link = results->head_link;
|
|
while(control_link != NULL) {
|
|
if (compare_link(control_link, results_link) == 0) {
|
|
printf("Error was on link %s\n", control_link->name);
|
|
goto ed_exit;
|
|
}
|
|
control_link = control_link->next;
|
|
results_link = results_link->next;
|
|
}
|
|
|
|
if (control->data_size != results->data_size)
|
|
goto ed_exit;
|
|
|
|
if (memcmp(results->data, control->data, control->data_size) != 0) {
|
|
goto ed_exit;
|
|
}
|
|
|
|
retVal = 1;
|
|
ed_exit:
|
|
// clean up
|
|
if (control != NULL)
|
|
ipfs_hashtable_node_free(control);
|
|
if (results != NULL)
|
|
ipfs_hashtable_node_free(results);
|
|
if (buffer != NULL)
|
|
free(buffer);
|
|
|
|
return retVal;
|
|
}
|