mirror of
https://github.com/savoirfairelinux/opendht.git
synced 2026-11-08 04:21:51 +00:00
tests: require native alignment for C hashes
This commit is contained in:
1 parent
13f340694e
commit
a09cfefe5e
1 file changed
+21
-12
+21
-12
@@ -12,6 +12,11 @@
|
||||
#include <gnutls/gnutls.h>
|
||||
#endif
|
||||
|
||||
_Static_assert(_Alignof(dht_infohash) == _Alignof(uint32_t), "InfoHash alignment must match uint32_t");
|
||||
_Static_assert(_Alignof(dht_pkid) == _Alignof(uint32_t), "PkId alignment must match uint32_t");
|
||||
_Static_assert(sizeof(dht_infohash) == HASH_LEN, "InfoHash size must remain unchanged");
|
||||
_Static_assert(sizeof(dht_pkid) == 32, "PkId size must remain unchanged");
|
||||
|
||||
static void
|
||||
done_cb(bool ok, void* user_data)
|
||||
{
|
||||
@@ -66,20 +71,24 @@ main(void)
|
||||
assert(memcmp(&hash, &restored, sizeof(hash)) == 0);
|
||||
|
||||
struct {
|
||||
uint32_t alignment;
|
||||
uint8_t prefix;
|
||||
dht_infohash hash;
|
||||
} unaligned = {0};
|
||||
dht_infohash_get_from_string(&unaligned.hash, "abc");
|
||||
assert(!dht_infohash_is_zero(&unaligned.hash));
|
||||
assert(strcmp(dht_infohash_print(&unaligned.hash), "a9993e364706816aba3e25717850c26c9cd0d89d") == 0);
|
||||
dht_infohash_from_hex_null(&unaligned.hash, "a9993e364706816aba3e25717850c26c9cd0d89d");
|
||||
dht_infohash_from_hex(&restored, dht_infohash_print(&unaligned.hash));
|
||||
assert(memcmp(&unaligned.hash, &restored, sizeof(restored)) == 0);
|
||||
dht_infohash_zero(&unaligned.hash);
|
||||
assert(dht_infohash_is_zero(&unaligned.hash));
|
||||
dht_infohash_random(&unaligned.hash);
|
||||
assert(!dht_infohash_is_zero(&unaligned.hash));
|
||||
dht_pkid pkid;
|
||||
} embedded = {0};
|
||||
assert((uintptr_t) &embedded.hash % _Alignof(uint32_t) == 0);
|
||||
assert((uintptr_t) &embedded.pkid % _Alignof(uint32_t) == 0);
|
||||
dht_infohash_get_from_string(&embedded.hash, "abc");
|
||||
assert(!dht_infohash_is_zero(&embedded.hash));
|
||||
assert(strcmp(dht_infohash_print(&embedded.hash), "a9993e364706816aba3e25717850c26c9cd0d89d") == 0);
|
||||
dht_infohash_from_hex_null(&embedded.hash, "a9993e364706816aba3e25717850c26c9cd0d89d");
|
||||
dht_infohash_from_hex(&restored, dht_infohash_print(&embedded.hash));
|
||||
assert(memcmp(&embedded.hash, &restored, sizeof(restored)) == 0);
|
||||
dht_infohash_zero(&embedded.hash);
|
||||
assert(dht_infohash_is_zero(&embedded.hash));
|
||||
dht_infohash_random(&embedded.hash);
|
||||
assert(!dht_infohash_is_zero(&embedded.hash));
|
||||
assert(strcmp(dht_pkid_print(&embedded.pkid),
|
||||
"0000000000000000000000000000000000000000000000000000000000000000") == 0);
|
||||
|
||||
dht_value* value = dht_value_with_id_new(invalid, sizeof(invalid), 42);
|
||||
assert(value != NULL);
|
||||
|
||||
Reference in new issue
Block a user