Debugging

This commit is contained in:
jmjatlanta 2017-09-28 13:21:34 -05:00
parent 296d164e84
commit 7f89e80d7b
8 changed files with 252 additions and 130 deletions

View file

@ -52,6 +52,8 @@ void ipfs_null_connection (void *ptr) {
session->default_stream = session->insecure_stream; session->default_stream = session->insecure_stream;
session->datastore = connection_param->local_node->repo->config->datastore; session->datastore = connection_param->local_node->repo->config->datastore;
session->filestore = connection_param->local_node->repo->config->filestore; session->filestore = connection_param->local_node->repo->config->filestore;
session->host = connection_param->ip;
session->port = connection_param->port;
libp2p_logger_info("null", "Connection %d, count %d\n", connection_param->file_descriptor, *(connection_param->count)); libp2p_logger_info("null", "Connection %d, count %d\n", connection_param->file_descriptor, *(connection_param->count));

View file

@ -280,6 +280,8 @@ int ipfs_import_file(const char* root_dir, const char* fileName, struct Hashtabl
} else { } else {
// process this file // process this file
FILE* file = fopen(fileName, "rb"); FILE* file = fopen(fileName, "rb");
if (file == 0)
return 0;
retVal = ipfs_hashtable_node_new(parent_node); retVal = ipfs_hashtable_node_new(parent_node);
if (retVal == 0) { if (retVal == 0) {
return 0; return 0;
@ -388,6 +390,7 @@ int ipfs_import_files(struct CliArguments* args) {
// import the file(s) // import the file(s)
current = first; current = first;
while (current != NULL) { while (current != NULL) {
if (current->file_name[0] != '-') { // not a switch
os_utils_split_filename(current->file_name, &path, &filename); os_utils_split_filename(current->file_name, &path, &filename);
size_t bytes_written = 0; size_t bytes_written = 0;
if (!ipfs_import_file(NULL, current->file_name, &directory_entry, local_node, &bytes_written, recursive)) if (!ipfs_import_file(NULL, current->file_name, &directory_entry, local_node, &bytes_written, recursive))
@ -406,6 +409,7 @@ int ipfs_import_files(struct CliArguments* args) {
ipfs_hashtable_node_free(directory_entry); ipfs_hashtable_node_free(directory_entry);
directory_entry = NULL; directory_entry = NULL;
} }
}
current = current->next; current = current->next;
} }

View file

@ -429,6 +429,7 @@ int fs_repo_open_config(struct FSRepo* repo) {
swarm_pos++; swarm_pos++;
repo->config->addresses->swarm_head = NULL; repo->config->addresses->swarm_head = NULL;
struct Libp2pLinkedList* last = NULL; struct Libp2pLinkedList* last = NULL;
struct Libp2pLinkedList* current_ma_pos = repo->config->identity->peer->addr_head;
for(int i = 0; i < swarm_size; i++) { for(int i = 0; i < swarm_size; i++) {
struct Libp2pLinkedList* current = libp2p_utils_linked_list_new(); struct Libp2pLinkedList* current = libp2p_utils_linked_list_new();
if (!_get_json_string_value(data, tokens, num_tokens, swarm_pos + i, NULL, (char**)&current->item)) if (!_get_json_string_value(data, tokens, num_tokens, swarm_pos + i, NULL, (char**)&current->item))
@ -439,6 +440,19 @@ int fs_repo_open_config(struct FSRepo* repo) {
last->next = current; last->next = current;
} }
last = current; last = current;
// add current to peer too
struct MultiAddress* ma = multiaddress_new_from_string(current->item);
if (ma != NULL) {
if (current_ma_pos == NULL) {
repo->config->identity->peer->addr_head = libp2p_utils_linked_list_new();
current_ma_pos = repo->config->identity->peer->addr_head;
} else {
struct Libp2pLinkedList* next_ma_pos = libp2p_utils_linked_list_new();
current_ma_pos->next = next_ma_pos;
current_ma_pos = next_ma_pos;
}
current_ma_pos->item = ma;
}
} }
_get_json_string_value(data, tokens, num_tokens, curr_pos, "API", &repo->config->addresses->api); _get_json_string_value(data, tokens, num_tokens, curr_pos, "API", &repo->config->addresses->api);
_get_json_string_value(data, tokens, num_tokens, curr_pos, "Gateway", &repo->config->addresses->gateway); _get_json_string_value(data, tokens, num_tokens, curr_pos, "Gateway", &repo->config->addresses->gateway);

View file

@ -160,8 +160,11 @@ int repo_fsrepo_lmdb_get(const unsigned char* key, size_t key_size, struct Datas
*/ */
int lmdb_datastore_create_transaction(struct lmdb_context *db_context, MDB_txn **mdb_txn) { int lmdb_datastore_create_transaction(struct lmdb_context *db_context, MDB_txn **mdb_txn) {
// open transaction // open transaction
if (mdb_txn_begin(db_context->db_environment, db_context->current_transaction, 0, mdb_txn) != 0) int retVal = mdb_txn_begin(db_context->db_environment, db_context->current_transaction, 0, mdb_txn);
if (retVal != 0) {
libp2p_logger_error("lmdb_datastore", "Unable to create transaction. Error code %d.\n", retVal);
return 0; return 0;
}
return 1; return 1;
} }

View file

@ -12,6 +12,12 @@ int test_namesys_publisher_publish() {
struct IpfsNode* local_node = NULL; struct IpfsNode* local_node = NULL;
char* hash_text = "/ipns/QmZtAEqmnXMZkwVPKdyMGxUoo35cQMzNhmq6CN3DvgRwAD"; char* hash_text = "/ipns/QmZtAEqmnXMZkwVPKdyMGxUoo35cQMzNhmq6CN3DvgRwAD";
char* repo_path = "/tmp/ipfs_1"; char* repo_path = "/tmp/ipfs_1";
char* peer_id = NULL;
if (!drop_and_build_repository(repo_path, 4001, NULL, &peer_id)) {
libp2p_logger_error("test_publisher", "Unable to build repository at %s.\n", repo_path);
goto exit;
}
// get a local node // get a local node
if (!ipfs_node_offline_new(repo_path, &local_node)) { if (!ipfs_node_offline_new(repo_path, &local_node)) {

View file

@ -17,11 +17,74 @@
#include "../test_helper.h" #include "../test_helper.h"
/*** /***
* "publish" a hash to the datastore (for ipns) * "publish" a hash to the datastore (for ipns)
*/ */
int test_routing_put_value() { int test_routing_put_value() {
int retVal = 0;
char* ipfs_path_publisher = "/tmp/ipfs_1";
char* peer_id_publisher = NULL;
struct MultiAddress* ma_publisher = NULL;
pthread_t thread_publisher;
int publisher_thread_started = 0;
struct CliArguments* arguments = NULL;
libp2p_logger_add_class("test_routing");
// fire up the "publisher"
if (!drop_and_build_repository(ipfs_path_publisher, 4001, NULL, &peer_id_publisher)) {
libp2p_logger_error("test_routing", "Unable to drop and build repository.\n");
goto exit;
}
char multiaddress_string[255];
sprintf(multiaddress_string, "/ip4/127.0.0.1/tcp/4001/ipfs/%s", peer_id_publisher);
ma_publisher = multiaddress_new_from_string(multiaddress_string);
if (pthread_create(&thread_publisher, NULL, test_daemon_start, (void*)ipfs_path_publisher) < 0) {
libp2p_logger_error("test_routing", "Unable to start first daemon.\n");
goto exit;
}
publisher_thread_started = 1;
sleep(3);
// import the file into the "publisher"
char* args[] = { "ipfs", "--config", ipfs_path_publisher, "add", "-r", "~/site"};
arguments = cli_arguments_new(6, args);
ipfs_import_files(arguments);
cli_arguments_free(arguments);
// now "publish" to publisher
libp2p_logger_debug("test_routing", "About to publish to publisher.\n");
char* args2[] = {"ipfs", "--config", ipfs_path_publisher, "name", "publish", "QmZtAEqmnXMZkwVPKdyMGxUoo35cQMzNhmq6CN3DvgRwAD" };
arguments = cli_arguments_new(6, args2);
if (!ipfs_name(arguments))
goto exit;
cli_arguments_free(arguments);
arguments = NULL;
// see if we have what we should...
libp2p_logger_debug("test_routing", "About to ask for the server to resolve the publisher.\n");
char* args3[] = {"ipfs", "--config", ipfs_path_publisher, "resolve", peer_id_publisher};
arguments = cli_arguments_new(5, args3);
if (!ipfs_name(arguments))
goto exit;
retVal = 1;
exit:
ipfs_daemon_stop();
if (publisher_thread_started) {
pthread_join(thread_publisher, NULL);
}
multiaddress_free(ma_publisher);
cli_arguments_free(arguments);
return retVal;
}
/***
* "publish" a hash to the datastore (for ipns)
*/
int test_routing_put_value_and_resolve() {
int retVal = 0; int retVal = 0;
char* ipfs_path_publisher = "/tmp/ipfs_1"; char* ipfs_path_publisher = "/tmp/ipfs_1";
char* peer_id_publisher = NULL; char* peer_id_publisher = NULL;
@ -35,19 +98,31 @@ int test_routing_put_value() {
struct Libp2pVector* ma_vector = NULL; struct Libp2pVector* ma_vector = NULL;
struct CliArguments* arguments = NULL; struct CliArguments* arguments = NULL;
libp2p_logger_add_class("test_routing");
// fire up the "publisher" // fire up the "publisher"
drop_and_build_repository(ipfs_path_publisher, 4001, NULL, &peer_id_publisher); if (!drop_and_build_repository(ipfs_path_publisher, 4001, NULL, &peer_id_publisher)) {
libp2p_logger_error("test_routing", "Unable to drop and build repository.\n");
goto exit;
}
char multiaddress_string[255]; char multiaddress_string[255];
sprintf(multiaddress_string, "/ip4/127.0.0.1/tcp/4001/ipfs/%s", peer_id_publisher); sprintf(multiaddress_string, "/ip4/127.0.0.1/tcp/4001/ipfs/%s", peer_id_publisher);
ma_publisher = multiaddress_new_from_string(multiaddress_string); ma_publisher = multiaddress_new_from_string(multiaddress_string);
char* args[] = { "ipfs", "--config", ipfs_path_publisher, "add", "-r", "~/site"}; if (pthread_create(&thread_publisher, NULL, test_daemon_start, (void*)ipfs_path_publisher) < 0) {
arguments = cli_arguments_new(6, args); libp2p_logger_error("test_routing", "Unable to start first daemon.\n");
ipfs_import_files(arguments);
if (!pthread_create(&thread_publisher, NULL, test_daemon_start, (void*)ipfs_path_publisher)) {
goto exit; goto exit;
} }
publisher_thread_started = 1; publisher_thread_started = 1;
sleep(3);
// import the file into the "publisher"
char* args[] = { "ipfs", "--config", ipfs_path_publisher, "add", "-r", "~/site"};
arguments = cli_arguments_new(6, args);
ipfs_import_files(arguments);
cli_arguments_free(arguments);
// fire up the "consumer" // fire up the "consumer"
ma_vector = libp2p_utils_vector_new(1); ma_vector = libp2p_utils_vector_new(1);
libp2p_utils_vector_add(ma_vector, ma_publisher); libp2p_utils_vector_add(ma_vector, ma_publisher);
@ -55,25 +130,25 @@ int test_routing_put_value() {
if (pthread_create(&thread_consumer, NULL, test_daemon_start, (void*)ipfs_path_consumer) < 0) if (pthread_create(&thread_consumer, NULL, test_daemon_start, (void*)ipfs_path_consumer) < 0)
goto exit; goto exit;
consumer_thread_started = 1; consumer_thread_started = 1;
// wait for everything to fire up // wait for everything to fire up
sleep(5);
/* this area is for when we get the command line interface closer to completion... So skip for now
// now "publish" to publisher, and verify that "consumer" receives the message
char* args2[] = {"ipfs" "--config", ipfs_path_publisher, "name", "publish", "QmZtAEqmnXMZkwVPKdyMGxUoo35cQMzNhmq6CN3DvgRwAD" };
//ipfs_name_publish(6, args2);
// wait for everything to settle in
sleep(3); sleep(3);
// see if we have what we should... // now "publish" to publisher
char* args3[] = {"ipfs", "--config", ipfs_path_consumer, "resolve", peer_id_publisher}; libp2p_logger_debug("test_routing", "About to publish to publisher.\n");
char* results = NULL; char* args2[] = {"ipfs", "--config", ipfs_path_publisher, "name", "publish", "QmZtAEqmnXMZkwVPKdyMGxUoo35cQMzNhmq6CN3DvgRwAD" };
//ipfs_resolve(5, args3, &results); arguments = cli_arguments_new(6, args2);
*/ if (!ipfs_name(arguments))
goto exit;
cli_arguments_free(arguments);
arguments = NULL;
// see if we have what we should...
libp2p_logger_debug("test_routing", "About to ask for the server to resolve the publisher.\n");
char* args3[] = {"ipfs", "--config", ipfs_path_consumer, "resolve", peer_id_publisher};
//char* results = NULL;
arguments = cli_arguments_new(5, args3);
if (!ipfs_name(arguments))
goto exit;
retVal = 1; retVal = 1;
exit: exit:
@ -91,20 +166,25 @@ int test_routing_put_value() {
int test_routing_find_peer() { int test_routing_find_peer() {
int retVal = 0; int retVal = 0;
char* ipfs_path = "/tmp/test1"; char* ipfs_path1 = "/tmp/ipfs_1";
char* ipfs_path2 = "/tmp/ipfs_2";
char* ipfs_path3 = "/tmp/ipfs_3";
pthread_t thread1; pthread_t thread1;
pthread_t thread2; pthread_t thread2;
int thread1_started = 0, thread2_started = 0; pthread_t thread3;
int thread1_started = 0, thread2_started = 0, thread3_started = 0;
char* peer_id_1 = NULL; char* peer_id_1 = NULL;
char* peer_id_2 = NULL; char* peer_id_2 = NULL;
char* peer_id_3 = NULL; char* peer_id_3 = NULL;
struct IpfsNode local_node; struct IpfsNode* local_node = NULL;
struct IpfsNode *local_node2; struct IpfsNode* local_node2 = NULL;
struct IpfsNode* local_node3 = NULL;
struct FSRepo* fs_repo = NULL; struct FSRepo* fs_repo = NULL;
struct MultiAddress* ma_peer1; struct MultiAddress* ma_peer1;
struct Libp2pVector *ma_vector = NULL; struct Libp2pVector *ma_vector = NULL;
struct Libp2pPeer* result = NULL; struct Libp2pPeer* result = NULL;
struct HashtableNode *node = NULL; struct HashtableNode *node = NULL;
struct Libp2pVector* peers = NULL;
//libp2p_logger_add_class("online"); //libp2p_logger_add_class("online");
//libp2p_logger_add_class("null"); //libp2p_logger_add_class("null");
@ -113,59 +193,49 @@ int test_routing_find_peer() {
//libp2p_logger_add_class("peerstore"); //libp2p_logger_add_class("peerstore");
// create peer 1 // create peer 1
os_utils_setenv("IPFS_PATH", ipfs_path, 1); drop_and_build_repository(ipfs_path1, 4001, NULL, &peer_id_1);
drop_and_build_repository(ipfs_path, 4001, NULL, &peer_id_1);
char multiaddress_string[255]; char multiaddress_string[255];
sprintf(multiaddress_string, "/ip4/127.0.0.1/tcp/4001/ipfs/%s", peer_id_1); sprintf(multiaddress_string, "/ip4/127.0.0.1/tcp/4001/ipfs/%s", peer_id_1);
ma_peer1 = multiaddress_new_from_string(multiaddress_string); ma_peer1 = multiaddress_new_from_string(multiaddress_string);
// start the daemon in a separate thread // start the daemon in a separate thread
if (pthread_create(&thread1, NULL, test_daemon_start, (void*)ipfs_path) < 0) if (pthread_create(&thread1, NULL, test_daemon_start, (void*)ipfs_path2) < 0)
goto exit; goto exit;
thread1_started = 1; thread1_started = 1;
sleep(3); sleep(3);
// create peer 2 // create peer 2
ipfs_path = "/tmp/test2";
os_utils_setenv("IPFS_PATH", ipfs_path, 1);
ma_vector = libp2p_utils_vector_new(1); ma_vector = libp2p_utils_vector_new(1);
libp2p_utils_vector_add(ma_vector, ma_peer1); libp2p_utils_vector_add(ma_vector, ma_peer1);
drop_and_build_repository(ipfs_path, 4002, ma_vector, &peer_id_2); drop_and_build_repository(ipfs_path2, 4002, ma_vector, &peer_id_2);
// add a file, to prime the connection to peer 1
//TODO: Find a better way to do this...
size_t bytes_written = 0;
ipfs_node_online_new(ipfs_path, &local_node2);
local_node2->routing->Bootstrap(local_node2->routing);
ipfs_import_file(NULL, "/home/parallels/ipfstest/hello_world.txt", &node, local_node2, &bytes_written, 0);
ipfs_node_free(local_node2);
// start the daemon in a separate thread // start the daemon in a separate thread
if (pthread_create(&thread2, NULL, test_daemon_start, (void*)ipfs_path) < 0) if (pthread_create(&thread2, NULL, test_daemon_start, (void*)ipfs_path2) < 0)
goto exit; goto exit;
thread2_started = 1; thread2_started = 1;
// JMJ wait for everything to start up // JMJ wait for everything to start up
sleep(3); sleep(3);
// add a file to peer 2
size_t bytes_written = 0;
ipfs_node_offline_new(ipfs_path2, &local_node2);
ipfs_import_file(NULL, "hello.txt", &node, local_node2, &bytes_written, 0);
ipfs_node_free(local_node2);
// create my peer, peer 3 // create my peer, peer 3
ipfs_path = "/tmp/test3";
os_utils_setenv("IPFS_PATH", ipfs_path, 1);
libp2p_utils_vector_add(ma_vector, ma_peer1); libp2p_utils_vector_add(ma_vector, ma_peer1);
drop_and_build_repository(ipfs_path, 4003, ma_vector, &peer_id_3); drop_and_build_repository(ipfs_path3, 4003, ma_vector, &peer_id_3);
// start the daemon in a separate thread
if (pthread_create(&thread3, NULL, test_daemon_start, (void*)ipfs_path3) < 0)
goto exit;
thread3_started = 1;
ipfs_repo_fsrepo_new(ipfs_path, NULL, &fs_repo); sleep(3);
ipfs_repo_fsrepo_open(fs_repo);
// We know peer 1, try to find peer 2 ipfs_node_offline_new(ipfs_path3, &local_node3);
local_node.mode = MODE_ONLINE;
local_node.peerstore = libp2p_peerstore_new(fs_repo->config->identity->peer);
local_node.providerstore = NULL;
local_node.repo = fs_repo;
local_node.identity = fs_repo->config->identity;
local_node.routing = ipfs_routing_new_online(&local_node, &fs_repo->config->identity->private_key);
local_node.routing->Bootstrap(local_node.routing); if (!local_node3->routing->FindProviders(local_node->routing, (unsigned char*)peer_id_2, strlen(peer_id_2), &peers)) {
if (!local_node.routing->FindPeer(local_node.routing, (unsigned char*)peer_id_2, strlen(peer_id_2), &result)) {
fprintf(stderr, "Unable to find peer %s by asking %s\n", peer_id_2, peer_id_1); fprintf(stderr, "Unable to find peer %s by asking %s\n", peer_id_2, peer_id_1);
goto exit; goto exit;
} }
@ -199,10 +269,8 @@ int test_routing_find_peer() {
libp2p_utils_vector_free(ma_vector); libp2p_utils_vector_free(ma_vector);
if (node != NULL) if (node != NULL)
ipfs_hashtable_node_free(node); ipfs_hashtable_node_free(node);
if (local_node.peerstore != NULL) if (local_node != NULL)
libp2p_peerstore_free(local_node.peerstore); ipfs_node_free(local_node);
if (local_node.routing != NULL)
ipfs_routing_online_free(local_node.routing);
if (result != NULL) if (result != NULL)
libp2p_peer_free(result); libp2p_peer_free(result);
@ -212,51 +280,46 @@ int test_routing_find_peer() {
int test_routing_find_providers() { int test_routing_find_providers() {
int retVal = 0; int retVal = 0;
// clean out repository char* ipfs_path1 = "/tmp/ipfs_1";
char* ipfs_path = "/tmp/test1"; char* ipfs_path2 = "/tmp/ipfs_2";
os_utils_setenv("IPFS_PATH", ipfs_path, 1); char* ipfs_path3 = "/tmp/ipfs_3";
char* peer_id_1 = NULL; char* peer_id_1 = NULL;
char* peer_id_2 = NULL; char* peer_id_2 = NULL;
struct IpfsNode *local_node2 = NULL;;
char* peer_id_3 = NULL; char* peer_id_3 = NULL;
//struct IpfsNode *local_node1 = NULL;
struct IpfsNode *local_node2 = NULL;
struct IpfsNode *local_node3 = NULL;
char* remote_peer_id = NULL; char* remote_peer_id = NULL;
pthread_t thread1, thread2; pthread_t thread1, thread2;
int thread1_started = 0, thread2_started = 0; int thread1_started = 0, thread2_started = 0;
struct MultiAddress* ma_peer1 = NULL; struct MultiAddress* ma_peer1 = NULL;
struct Libp2pVector* ma_vector2 = NULL, *ma_vector3 = NULL; struct Libp2pVector* ma_vector2 = NULL, *ma_vector3 = NULL;
struct IpfsNode local_node;
struct FSRepo* fs_repo = NULL; struct FSRepo* fs_repo = NULL;
struct HashtableNode* node = NULL; struct HashtableNode* node = NULL;
struct Libp2pVector* result = NULL; struct Libp2pVector* result = NULL;
// create peer 1 // create peer 1
drop_and_build_repository(ipfs_path, 4001, NULL, &peer_id_1); drop_and_build_repository(ipfs_path1, 4001, NULL, &peer_id_1);
char multiaddress_string[255]; char multiaddress_string[255];
sprintf(multiaddress_string, "/ip4/127.0.0.1/tcp/4001/ipfs/%s", peer_id_1); sprintf(multiaddress_string, "/ip4/127.0.0.1/tcp/4001/ipfs/%s", peer_id_1);
ma_peer1 = multiaddress_new_from_string(multiaddress_string); ma_peer1 = multiaddress_new_from_string(multiaddress_string);
// start the daemon in a separate thread // start the daemon in a separate thread
if (pthread_create(&thread1, NULL, test_daemon_start, (void*)ipfs_path) < 0) { if (pthread_create(&thread1, NULL, test_daemon_start, (void*)ipfs_path1) < 0) {
fprintf(stderr, "Unable to start thread 1\n"); fprintf(stderr, "Unable to start thread 1\n");
goto exit; goto exit;
} }
thread1_started = 1; thread1_started = 1;
sleep(3);
// create peer 2 // create peer 2
ipfs_path = "/tmp/test2";
os_utils_setenv("IPFS_PATH", ipfs_path, 1);
// create a vector to hold peer1's multiaddress so we can connect as a peer // create a vector to hold peer1's multiaddress so we can connect as a peer
ma_vector2 = libp2p_utils_vector_new(1); ma_vector2 = libp2p_utils_vector_new(1);
libp2p_utils_vector_add(ma_vector2, ma_peer1); libp2p_utils_vector_add(ma_vector2, ma_peer1);
// note: this destroys some things, as it frees the fs_repo: // note: this destroys some things, as it frees the fs_repo:
drop_and_build_repository(ipfs_path, 4002, ma_vector2, &peer_id_2); drop_and_build_repository(ipfs_path2, 4002, ma_vector2, &peer_id_2);
// add a file, to prime the connection to peer 1
//TODO: Find a better way to do this...
size_t bytes_written = 0;
ipfs_node_online_new(ipfs_path, &local_node2);
ipfs_import_file(NULL, "/home/parallels/ipfstest/hello_world.txt", &node, local_node2, &bytes_written, 0);
ipfs_node_free(local_node2);
// start the daemon in a separate thread // start the daemon in a separate thread
if (pthread_create(&thread2, NULL, test_daemon_start, (void*)ipfs_path) < 0) { if (pthread_create(&thread2, NULL, test_daemon_start, (void*)ipfs_path2) < 0) {
fprintf(stderr, "Unable to start thread 2\n"); fprintf(stderr, "Unable to start thread 2\n");
goto exit; goto exit;
} }
@ -266,28 +329,21 @@ int test_routing_find_providers() {
// JMJ debugging = // JMJ debugging =
sleep(3); sleep(3);
// add a file, to prime the connection to peer 1
size_t bytes_written = 0;
ipfs_node_offline_new(ipfs_path2, &local_node2);
ipfs_import_file(NULL, "/home/parallels/ipfstest/hello_world.txt", &node, local_node2, &bytes_written, 0);
ipfs_node_free(local_node2);
// create my peer, peer 3 // create my peer, peer 3
ipfs_path = "/tmp/test3";
os_utils_setenv("IPFS_PATH", ipfs_path, 1);
ma_peer1 = multiaddress_new_from_string(multiaddress_string); ma_peer1 = multiaddress_new_from_string(multiaddress_string);
ma_vector3 = libp2p_utils_vector_new(1); ma_vector3 = libp2p_utils_vector_new(1);
libp2p_utils_vector_add(ma_vector3, ma_peer1); libp2p_utils_vector_add(ma_vector3, ma_peer1);
drop_and_build_repository(ipfs_path, 4003, ma_vector3, &peer_id_3); drop_and_build_repository(ipfs_path3, 4003, ma_vector3, &peer_id_3);
ipfs_repo_fsrepo_new(ipfs_path, NULL, &fs_repo); ipfs_node_offline_new(ipfs_path3, &local_node3);
ipfs_repo_fsrepo_open(fs_repo);
// We know peer 1, try to find peer 2 if (!local_node3->routing->FindProviders(local_node3->routing, node->hash, node->hash_size, &result)) {
local_node.mode = MODE_ONLINE;
local_node.peerstore = libp2p_peerstore_new(fs_repo->config->identity->peer);
local_node.providerstore = libp2p_providerstore_new(fs_repo->config->datastore, fs_repo->config->identity->peer);
local_node.repo = fs_repo;
local_node.identity = fs_repo->config->identity;
local_node.routing = ipfs_routing_new_online(&local_node, &fs_repo->config->identity->private_key);
local_node.routing->Bootstrap(local_node.routing);
if (!local_node.routing->FindProviders(local_node.routing, node->hash, node->hash_size, &result)) {
fprintf(stderr, "Unable to find a provider\n"); fprintf(stderr, "Unable to find a provider\n");
goto exit; goto exit;
} }
@ -301,7 +357,8 @@ int test_routing_find_providers() {
struct Libp2pPeer *remote_peer = NULL; struct Libp2pPeer *remote_peer = NULL;
for(int i = 0; i < result->total; i++) { for(int i = 0; i < result->total; i++) {
remote_peer = (struct Libp2pPeer*)libp2p_utils_vector_get(result, i); remote_peer = (struct Libp2pPeer*)libp2p_utils_vector_get(result, i);
if (remote_peer->connection_type == CONNECTION_TYPE_CONNECTED || libp2p_peer_connect(&local_node.identity->private_key, remote_peer, local_node.peerstore, local_node.repo->config->datastore, 5)) { if (remote_peer->connection_type == CONNECTION_TYPE_CONNECTED
|| libp2p_peer_connect(&local_node3->identity->private_key, remote_peer, local_node3->peerstore, local_node3->repo->config->datastore, 5)) {
break; break;
} }
remote_peer = NULL; remote_peer = NULL;
@ -340,13 +397,8 @@ int test_routing_find_providers() {
if (ma_vector3 != NULL) { if (ma_vector3 != NULL) {
libp2p_utils_vector_free(ma_vector3); libp2p_utils_vector_free(ma_vector3);
} }
if (local_node.providerstore != NULL) if (local_node3 != NULL) {
libp2p_providerstore_free(local_node.providerstore); ipfs_node_free(local_node3);
if (local_node.peerstore != NULL) {
libp2p_peerstore_free(local_node.peerstore);
}
if (local_node.routing != NULL) {
ipfs_routing_online_free(local_node.routing);
} }
if (node != NULL) if (node != NULL)
ipfs_hashtable_node_free(node); ipfs_hashtable_node_free(node);
@ -472,6 +524,7 @@ int test_routing_retrieve_file_third_party() {
libp2p_logger_add_class("peer"); libp2p_logger_add_class("peer");
libp2p_logger_add_class("test_routing"); libp2p_logger_add_class("test_routing");
libp2p_logger_add_class("api"); libp2p_logger_add_class("api");
libp2p_logger_add_class("secio");
// clean out repository // clean out repository
@ -481,7 +534,7 @@ int test_routing_retrieve_file_third_party() {
sprintf(multiaddress_string, "/ip4/127.0.0.1/tcp/4001/ipfs/%s", peer_id_1); sprintf(multiaddress_string, "/ip4/127.0.0.1/tcp/4001/ipfs/%s", peer_id_1);
ma_peer1 = multiaddress_new_from_string(multiaddress_string); ma_peer1 = multiaddress_new_from_string(multiaddress_string);
// start the daemon in a separate thread // start the daemon in a separate thread
libp2p_logger_debug("test_routing", "Firing up daemon 1.\n"); libp2p_logger_debug("test_routing", "Firing up daemon 1, our central server. Named: %s.\n", peer_id_1);
if (pthread_create(&thread1, NULL, test_daemon_start, (void*)ipfs_path_1) < 0) { if (pthread_create(&thread1, NULL, test_daemon_start, (void*)ipfs_path_1) < 0) {
libp2p_logger_error("test_routing", "Unable to start thread 1\n"); libp2p_logger_error("test_routing", "Unable to start thread 1\n");
goto exit; goto exit;
@ -496,7 +549,7 @@ int test_routing_retrieve_file_third_party() {
drop_and_build_repository(ipfs_path_2, 4002, ma_vector2, &peer_id_2); drop_and_build_repository(ipfs_path_2, 4002, ma_vector2, &peer_id_2);
multiaddress_free(ma_peer1); multiaddress_free(ma_peer1);
// start the daemon in a separate thread // start the daemon in a separate thread
libp2p_logger_debug("test_routing", "Firing up daemon 2.\n"); libp2p_logger_debug("test_routing", "Firing up daemon 2, which will host the file. Named %s.\n", peer_id_2);
if (pthread_create(&thread2, NULL, test_daemon_start, (void*)ipfs_path_2) < 0) { if (pthread_create(&thread2, NULL, test_daemon_start, (void*)ipfs_path_2) < 0) {
libp2p_logger_error("test_routing", "Unable to start thread 2.\n"); libp2p_logger_error("test_routing", "Unable to start thread 2.\n");
goto exit; goto exit;
@ -515,7 +568,7 @@ int test_routing_retrieve_file_third_party() {
ipfs_import_file(NULL, filename, &node, ipfs_node2, &bytes_written, 0); ipfs_import_file(NULL, filename, &node, ipfs_node2, &bytes_written, 0);
memset(hash, 0, 256); memset(hash, 0, 256);
ipfs_cid_hash_to_base58(node->hash, node->hash_size, (unsigned char*)hash, 256); ipfs_cid_hash_to_base58(node->hash, node->hash_size, (unsigned char*)hash, 256);
libp2p_logger_debug("test_routing", "Inserted file with hash %s.\n", hash); libp2p_logger_debug("test_routing", "Inserted file with hash %s into server %s.\n", hash, peer_id_2);
ipfs_node_free(ipfs_node2); ipfs_node_free(ipfs_node2);
// wait for everything to start up // wait for everything to start up
@ -527,7 +580,7 @@ int test_routing_retrieve_file_third_party() {
libp2p_utils_vector_add(ma_vector3, ma_peer1); libp2p_utils_vector_add(ma_vector3, ma_peer1);
drop_and_build_repository(ipfs_path_3, 4003, ma_vector3, &peer_id_3); drop_and_build_repository(ipfs_path_3, 4003, ma_vector3, &peer_id_3);
multiaddress_free(ma_peer1); multiaddress_free(ma_peer1);
libp2p_logger_debug("test_routing", "Firing up daemon 3.\n"); libp2p_logger_debug("test_routing", "Firing up daemon 3, which is our leech. Named: %s.\n", peer_id_3);
if (pthread_create(&thread3, NULL, test_daemon_start, (void*)ipfs_path_3) < 0) { if (pthread_create(&thread3, NULL, test_daemon_start, (void*)ipfs_path_3) < 0) {
libp2p_logger_error("test_routing", "Unable to start thread 3.\n"); libp2p_logger_error("test_routing", "Unable to start thread 3.\n");
goto exit; goto exit;
@ -539,7 +592,7 @@ int test_routing_retrieve_file_third_party() {
//now have peer 3 ask for a file that is on peer 2, but peer 3 only knows of peer 1 //now have peer 3 ask for a file that is on peer 2, but peer 3 only knows of peer 1
ipfs_node_offline_new(ipfs_path_3, &ipfs_node3); ipfs_node_offline_new(ipfs_path_3, &ipfs_node3);
libp2p_logger_debug("test_routing", "Attempting to look for %s.\n", hash); libp2p_logger_debug("test_routing", "Client of daemon 3 will now attempt to look for %s.\n", hash);
if (!ipfs_exporter_get_node(ipfs_node3, node->hash, node->hash_size, &result_node)) { if (!ipfs_exporter_get_node(ipfs_node3, node->hash, node->hash_size, &result_node)) {
libp2p_logger_error("test_routing", "Get_Node returned false\n"); libp2p_logger_error("test_routing", "Get_Node returned false\n");

40
test/scripts/test_6.sh Executable file
View file

@ -0,0 +1,40 @@
#!/bin/bash
####
# Attempt to start a deamon and have an api client do a name publish
#
####
source ./test_helpers.sh
IPFS="../../main/ipfs --config /tmp/ipfs_1"
function pre {
post
eval "$IPFS" init;
check_failure "pre" $?
cp ../config.test1.wo_journal /tmp/ipfs_1/config
}
function post {
rm -Rf /tmp/ipfs_1;
rm hello.txt;
}
function body {
create_hello_world;
eval "$IPFS" add hello.txt
check_failure "add hello.txt" $?
#start the daemon
eval "../../main/ipfs --config /tmp/ipfs_1 daemon &"
daemon_id=$!
sleep 5
eval "$IPFS" name publish QmYAXgX8ARiriupMQsbGXtKdDyGzWry1YV3sycKw1qqmgH
check_failure "name publish" $?
kill -9 $daemon_id
}

View file

@ -95,11 +95,11 @@ const char* names[] = {
"test_routing_find_peer", "test_routing_find_peer",
"test_routing_provide", "test_routing_provide",
"test_routing_find_providers", "test_routing_find_providers",
"test_routing_put_value",
"test_routing_supernode_get_value", "test_routing_supernode_get_value",
"test_routing_supernode_get_remote_value", "test_routing_supernode_get_remote_value",
"test_routing_retrieve_file_third_party", "test_routing_retrieve_file_third_party",
"test_routing_retrieve_large_file", "test_routing_retrieve_large_file",
// 60 below
"test_unixfs_encode_decode", "test_unixfs_encode_decode",
"test_unixfs_encode_smallfile", "test_unixfs_encode_smallfile",
"test_ping", "test_ping",
@ -165,11 +165,11 @@ int (*funcs[])(void) = {
test_routing_find_peer, test_routing_find_peer,
test_routing_provide, test_routing_provide,
test_routing_find_providers, test_routing_find_providers,
test_routing_put_value,
test_routing_supernode_get_value, test_routing_supernode_get_value,
test_routing_supernode_get_remote_value, test_routing_supernode_get_remote_value,
test_routing_retrieve_file_third_party, test_routing_retrieve_file_third_party,
test_routing_retrieve_large_file, test_routing_retrieve_large_file,
// 60 below
test_unixfs_encode_decode, test_unixfs_encode_decode,
test_unixfs_encode_smallfile, test_unixfs_encode_smallfile,
test_ping, test_ping,