OpenVPN 3 Core Library
Loading...
Searching...
No Matches
test_alignment.cpp
Go to the documentation of this file.
1// OpenVPN -- An application to securely tunnel IP networks
2// over a single port, with support for SSL/TLS-based
3// session authentication and key exchange,
4// packet encryption, packet authentication, and
5// packet compression.
6//
7// Copyright (C) 2012- OpenVPN Inc.
8//
9// SPDX-License-Identifier: MPL-2.0 OR AGPL-3.0-only WITH openvpn3-openssl-exception
10//
11
12#include "test_common.hpp"
13
15
16#include <cstdint>
17#include <cstdlib>
18#include <ctime>
19
20using namespace openvpn;
21
22TEST(AlignmentSafeExtractTest, ExtractIntFromMisalignedData)
23{
24 int i = 1;
25 unsigned char data[32];
26 data[0] = 0xF0;
27 memcpy(data + 1, &i, sizeof(i));
28 int value = alignment_safe_extract<int>(data + 1);
29 EXPECT_EQ(value, i);
30}
31
32TEST(AlignmentSafeExtractTest, ExtractDoubleFromMisalignedData)
33{
34 double d = 98.6;
35 unsigned char data[32];
36 data[0] = 0xF0;
37 memcpy(data + 1, &d, sizeof(d));
38 double value = alignment_safe_extract<double>(data + 1);
39 EXPECT_EQ(value, d);
40}
41
42TEST(AlignmentSafeExtractTest, ExtractStructFromMisalignedData)
43{
44 struct TestStruct
45 {
46 int a = 42;
47 float b = 98.6f;
48 } test_struct;
49
50 unsigned char data[32];
51 data[0] = 0xF0;
52 memcpy(data + 1, &test_struct, sizeof(test_struct));
53 TestStruct value = alignment_safe_extract<TestStruct>(data + 1);
54 EXPECT_EQ(value.a, test_struct.a);
55 EXPECT_EQ(value.b, test_struct.b);
56}
TEST(AlignmentSafeExtractTest, ExtractIntFromMisalignedData)