
This introduces a test suite for libssh2. It runs OpenSSH in a Docker container because that works well on Windows (via docker-machine) as well as Linux. Presumably it works on Mac too with docker-machine, but I've not tested that. Because the test suite is docker-machine aware, you can also run it against a cloud provider, for more realistic network testing, by setting your cloud provider as your active docker machine. The Appveyor CI setup in this commit does that because Appveyor doesn't support docker locally.
75 строки
2.2 KiB
C
75 строки
2.2 KiB
C
#include "session_fixture.h"
|
|
#include "libssh2_config.h"
|
|
|
|
#include <libssh2.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
const char *EXPECTED_HOSTKEY =
|
|
"AAAAB3NzaC1yc2EAAAABIwAAAQEArrr/JuJmaZligyfS8vcNur+mWR2ddDQtVdhHzdKU"
|
|
"UoR6/Om6cvxpe61H1YZO1xCpLUBXmkki4HoNtYOpPB2W4V+8U4BDeVBD5crypEOE1+7B"
|
|
"Am99fnEDxYIOZq2/jTP0yQmzCpWYS3COyFmkOL7sfX1wQMeW5zQT2WKcxC6FSWbhDqrB"
|
|
"eNEGi687hJJoJ7YXgY/IdiYW5NcOuqRSWljjGS3dAJsHHWk4nJbhjEDXbPaeduMAwQU9"
|
|
"i6ELfP3r+q6wdu0P4jWaoo3De1aYxnToV/ldXykpipON4NPamsb6Ph2qlJQKypq7J4iQ"
|
|
"gkIIbCU1A31+4ExvcIVoxLQw/aTSbw==";
|
|
|
|
const char *EXPECTED_MD5_HASH_DIGEST = "0C0ED1A5BB10275F76924CE187CE5C5E";
|
|
|
|
const char *EXPECTED_SHA1_HASH_DIGEST =
|
|
"F3CD59E2913F4422B80F7B0A82B2B89EAE449387";
|
|
|
|
const int MD5_HASH_SIZE = 16;
|
|
const int SHA1_HASH_SIZE = 20;
|
|
|
|
static void calculate_digest(const char *hash, size_t hash_len, char *buffer,
|
|
size_t buffer_len)
|
|
{
|
|
size_t i;
|
|
char *p = buffer;
|
|
char *end = buffer + buffer_len;
|
|
|
|
for (i = 0; i < hash_len && p < end; ++i) {
|
|
p += snprintf(p, end - p, "%02X", (unsigned char)hash[i]);
|
|
}
|
|
}
|
|
|
|
int test(LIBSSH2_SESSION *session)
|
|
{
|
|
char buf[BUFSIZ];
|
|
|
|
const char *md5_hash;
|
|
const char *sha1_hash;
|
|
|
|
md5_hash = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_MD5);
|
|
if (md5_hash == NULL) {
|
|
print_last_session_error(
|
|
"libssh2_hostkey_hash(LIBSSH2_HOSTKEY_HASH_MD5)");
|
|
return 1;
|
|
}
|
|
|
|
calculate_digest(md5_hash, MD5_HASH_SIZE, buf, BUFSIZ);
|
|
|
|
if (strcmp(buf, EXPECTED_MD5_HASH_DIGEST) != 0) {
|
|
fprintf(stderr, "MD5 hash not as expected - digest %s != %s\n", buf,
|
|
EXPECTED_MD5_HASH_DIGEST);
|
|
return 1;
|
|
}
|
|
|
|
sha1_hash = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);
|
|
if (sha1_hash == NULL) {
|
|
print_last_session_error(
|
|
"libssh2_hostkey_hash(LIBSSH2_HOSTKEY_HASH_SHA1)");
|
|
return 1;
|
|
}
|
|
|
|
calculate_digest(sha1_hash, SHA1_HASH_SIZE, buf, BUFSIZ);
|
|
|
|
if (strcmp(buf, EXPECTED_SHA1_HASH_DIGEST) != 0) {
|
|
fprintf(stderr, "SHA1 hash not as expected - digest %s != %s\n", buf,
|
|
EXPECTED_SHA1_HASH_DIGEST);
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|