aboutsummaryrefslogtreecommitdiff
path: root/tests/sftp_stress/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/sftp_stress/main.c')
-rw-r--r--tests/sftp_stress/main.c174
1 files changed, 0 insertions, 174 deletions
diff --git a/tests/sftp_stress/main.c b/tests/sftp_stress/main.c
deleted file mode 100644
index ac3f8bb4..00000000
--- a/tests/sftp_stress/main.c
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * main.c
- *
- * Created on: 22 juin 2009
- * Author: aris
- */
-#include <stdio.h>
-#include <libssh/libssh.h>
-#include <libssh/sftp.h>
-#include <time.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <pthread.h>
-#define TEST_READ 1
-#define TEST_WRITE 2
-#define NTHREADS 3
-#define FILESIZE 100000
-unsigned char samplefile[FILESIZE];
-volatile int stop=0;
-
-const char* hosts[]={"localhost","barebone"};
-void signal_stop(){
- stop=1;
- printf("Stopping...\n");
-}
-
-SSH_SESSION *connect_host(const char *hostname);
-int sftp_test(SSH_SESSION *session, int test);
-
-int docycle(const char *host, int test){
- SSH_SESSION *session=connect_host(host);
- int ret=SSH_ERROR;
- if(!session){
- printf("connect failed\n");
- } else {
- printf("Connected\n");
- ret=sftp_test(session,test);
- if(ret != SSH_OK){
- printf("Error in sftp\n");
- }
- ssh_disconnect(session);
- }
- return ret;
-}
-
-int thread(){
- while(docycle(hosts[rand()%2],TEST_WRITE) == SSH_OK)
- if(stop)
- break;
- return 0;
-}
-
-int main(int argc, char **argv){
- int i;
- pthread_t threads[NTHREADS];
- ssh_init();
- srand(time(NULL));
- for(i=0;i<FILESIZE;++i)
- samplefile[i]=rand() & 0xff;
- signal(SIGTERM,signal_stop);
- signal(SIGINT,signal_stop);
-
- for(i=0;i<NTHREADS;++i){
- srand(i);
- pthread_create(&threads[i],NULL,(void *) thread, NULL);
- }
- for(i=0;i<NTHREADS;++i){
- pthread_join(threads[i],NULL);
- }
- ssh_finalize();
- printf("Ended\n");
- return 0;
-}
-
-SSH_SESSION *connect_host(const char *hostname){
- SSH_SESSION *session;
- SSH_OPTIONS *options;
- int auth=0;
- int state;
-
- options=ssh_options_new();
- ssh_options_set_host(options,hostname);
- session=ssh_new();
- ssh_set_options(session,options);
- if(ssh_connect(session)){
- fprintf(stderr,"Connection failed : %s\n",ssh_get_error(session));
- ssh_disconnect(session);
- return NULL;
- }
-
- state = ssh_session_is_known_server(session);
- switch(state){
- case SSH_SERVER_KNOWN_OK:
- break; /* ok */
- case SSH_SERVER_KNOWN_CHANGED:
- fprintf(stderr,"Host key for server changed : server's one is now :\n");
- fprintf(stderr,"For security reason, connection will be stopped\n");
- ssh_disconnect(session);
- ssh_finalize();
- return NULL;
- case SSH_SERVER_FOUND_OTHER:
- fprintf(stderr,"The host key for this server was not found but an other type of key exists.\n");
- fprintf(stderr,"An attacker might change the default server key to confuse your client"
- "into thinking the key does not exist\n"
- "We advise you to rerun the client with -d or -r for more safety.\n");
- ssh_disconnect(session);
- ssh_finalize();
- return NULL;
- case SSH_SERVER_NOT_KNOWN:
- fprintf(stderr,"The server is unknown. Leaving now");
- ssh_disconnect(session);
- return NULL;
- case SSH_SERVER_ERROR:
- fprintf(stderr,"%s",ssh_get_error(session));
- ssh_disconnect(session);
- return NULL;
- }
-
- ssh_userauth_none(session, NULL);
-
- auth=ssh_userauth_autopubkey(session, NULL);
- if(auth==SSH_AUTH_ERROR){
- fprintf(stderr,"Authenticating with pubkey: %s\n",ssh_get_error(session));
- ssh_disconnect(session);
- return NULL;
- }
- if(auth!=SSH_AUTH_SUCCESS){
- fprintf(stderr,"Authentication failed: %s\n",ssh_get_error(session));
- ssh_disconnect(session);
- return NULL;
- }
- ssh_log(session, SSH_LOG_FUNCTIONS, "Authentication success");
- return session;
-}
-
-int sftp_test(SSH_SESSION *session, int test){
- SFTP_SESSION *sftp=sftp_new(session);
- SFTP_FILE *file;
- int wrote=0;
- char name[128];
- if(sftp == NULL)
- return SSH_ERROR;
- if(sftp_init(sftp)<0){
- printf("problem initializing sftp : %s\n",ssh_get_error(session));
- return SSH_ERROR;
- }
- if(test==TEST_WRITE){
- snprintf(name,sizeof(name),"/tmp/libsshstress%d",rand());
- file=sftp_open(sftp,name,O_RDWR|O_CREAT,0777);
- if(!file){
- printf("Failed to open file : %s\n",ssh_get_error(session));
- sftp_free(sftp);
- return SSH_ERROR;
- }
- while(wrote<FILESIZE){
- int max=FILESIZE-wrote;
- int towrite=rand()%max + 1;
- int ret=sftp_write(file,&samplefile[wrote],towrite);
- if(ret<=0){
- printf("Problem while writing : %s\n",ssh_get_error(session));
- sftp_free(sftp);
- return SSH_ERROR;
- }
- if(ret != towrite){
- printf("Asked to write %d, wrote %d\n",towrite,ret);
- }
- wrote += ret;
- }
- sftp_close(file);
- }
- sftp_free(sftp);
- return SSH_OK;
-}