1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117 | // Copyright (C) 2012-2016 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
#include <config.h>
#include <util/tests/memory_segment_common_unittest.h>
#include <util/memory_segment_local.h>
#include <exceptions/exceptions.h>
#include <gtest/gtest.h><--- Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results.
#include <boost/scoped_ptr.hpp><--- Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results.
#include <memory><--- Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results.
#include <limits.h><--- Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results.
using namespace std;
using namespace isc::util;
namespace {
TEST(MemorySegmentLocal, TestLocal) {
boost::scoped_ptr<MemorySegment> segment(new MemorySegmentLocal());
// By default, nothing is allocated.
EXPECT_TRUE(segment->allMemoryDeallocated());
void* ptr = segment->allocate(1024);
// Now, we have an allocation:
EXPECT_FALSE(segment->allMemoryDeallocated());
void* ptr2 = segment->allocate(42);
// Still:
EXPECT_FALSE(segment->allMemoryDeallocated());
// These should not fail, because the buffers have been allocated.
EXPECT_NO_FATAL_FAILURE(memset(ptr, 0, 1024));
EXPECT_NO_FATAL_FAILURE(memset(ptr, 0, 42));
segment->deallocate(ptr, 1024);
// Still:
EXPECT_FALSE(segment->allMemoryDeallocated());
segment->deallocate(ptr2, 42);
// Now, we have an deallocated everything:
EXPECT_TRUE(segment->allMemoryDeallocated());
}
/// @todo: disabled, see ticket #3510
TEST(MemorySegmentLocal, DISABLED_TestTooMuchMemory) {<--- syntax error
boost::scoped_ptr<MemorySegment> segment(new MemorySegmentLocal());
// Although it should be perfectly fine to use the ULONG_MAX
// instead of LONG_MAX as the size_t value should be unsigned,
// Valgrind appears to be using the signed value and hence the
// maximum positive value is LONG_MAX for Valgrind. But, this
// should be sufficient to test the "too much memory" conditions.
EXPECT_THROW(segment->allocate(LONG_MAX), bad_alloc);
}
TEST(MemorySegmentLocal, TestBadDeallocate) {
boost::scoped_ptr<MemorySegment> segment(new MemorySegmentLocal());
// By default, nothing is allocated.
EXPECT_TRUE(segment->allMemoryDeallocated());
void* ptr = segment->allocate(1024);
// Now, we have an allocation:
EXPECT_FALSE(segment->allMemoryDeallocated());
// This should not throw
EXPECT_NO_THROW(segment->deallocate(ptr, 1024));
// Now, we have an deallocated everything:
EXPECT_TRUE(segment->allMemoryDeallocated());
ptr = segment->allocate(1024);
// Now, we have another allocation:
EXPECT_FALSE(segment->allMemoryDeallocated());
// This should throw as the size passed to deallocate() is larger
// than what was allocated.
EXPECT_THROW(segment->deallocate(ptr, 2048), isc::OutOfRange);
// This should not throw
EXPECT_NO_THROW(segment->deallocate(ptr, 1024));
// Now, we have an deallocated everything:
EXPECT_TRUE(segment->allMemoryDeallocated());
}
TEST(MemorySegmentLocal, TestNullDeallocate) {
boost::scoped_ptr<MemorySegment> segment(new MemorySegmentLocal());
// By default, nothing is allocated.
EXPECT_TRUE(segment->allMemoryDeallocated());
// NULL deallocation is a no-op.
EXPECT_NO_THROW(segment->deallocate(NULL, 1024));
// This should still return true.
EXPECT_TRUE(segment->allMemoryDeallocated());
}
TEST(MemorySegmentLocal, namedAddress) {
MemorySegmentLocal segment;
isc::util::test::checkSegmentNamedAddress(segment, true);
}
} // anonymous namespace
|