Test that DynamicJsonBuffer can't alloc more than BLOCK_CAPACITY

This commit is contained in:
Benoit Blanchon
2014-12-13 10:13:24 +01:00
parent ada588c112
commit 3cd6f66067
2 changed files with 24 additions and 7 deletions

View File

@ -19,14 +19,21 @@ class DynamicJsonBuffer : public JsonBuffer {
size_t size() const { return _size; } size_t size() const { return _size; }
static const size_t BLOCK_CAPACITY = 32;
protected: protected:
virtual void* alloc(size_t bytes) { virtual void* alloc(size_t bytes) {
if (bytes > BLOCK_CAPACITY) return NULL;
void* p = _buffer + _size; void* p = _buffer + _size;
_size += bytes; _size += bytes;
return p; return p;
} }
static const size_t BLOCK_CAPACITY = 32; bool canStore(size_t bytes) {
// by design a DynamicJsonBuffer can't alloc a block bigger than
// BLOCK_CAPACITY
return bytes < BLOCK_CAPACITY;
}
size_t _size; size_t _size;
uint8_t _buffer[BLOCK_CAPACITY]; uint8_t _buffer[BLOCK_CAPACITY];

View File

@ -21,14 +21,24 @@ TEST_F(DynamicJsonBuffer_Basic_Tests, InitialSizeIsZero) {
} }
TEST_F(DynamicJsonBuffer_Basic_Tests, GrowsAfterAlloc) { TEST_F(DynamicJsonBuffer_Basic_Tests, GrowsAfterAlloc) {
buffer.alloc(100); buffer.alloc(1);
ASSERT_EQ(100, buffer.size()); ASSERT_EQ(1, buffer.size());
buffer.alloc(100); buffer.alloc(1);
ASSERT_EQ(200, buffer.size()); ASSERT_EQ(2, buffer.size());
}
TEST_F(DynamicJsonBuffer_Basic_Tests, CanAllocLessThanBlockCapacity) {
void* p = buffer.alloc(DynamicJsonBuffer::BLOCK_CAPACITY);
ASSERT_TRUE(p);
}
TEST_F(DynamicJsonBuffer_Basic_Tests, CantAllocMoreThanBlockCapacity) {
void* p = buffer.alloc(DynamicJsonBuffer::BLOCK_CAPACITY + 1);
ASSERT_FALSE(p);
} }
TEST_F(DynamicJsonBuffer_Basic_Tests, ReturnDifferentPointer) { TEST_F(DynamicJsonBuffer_Basic_Tests, ReturnDifferentPointer) {
void* p1 = buffer.alloc(100); void* p1 = buffer.alloc(1);
void* p2 = buffer.alloc(200); void* p2 = buffer.alloc(2);
ASSERT_NE(p1, p2); ASSERT_NE(p1, p2);
} }