From 9694df87b886ed9bc045719762ffa936f359eb76 Mon Sep 17 00:00:00 2001 From: Terraneo Federico <fede.tft@miosix.org> Date: Sun, 6 May 2018 23:44:45 +0200 Subject: [PATCH] Added tests for error code paths in the buffer API, compiled tests with address sanitizer --- examples/6_buffer_failtest.cpp | 72 ++++++++++++++++++++++++++++++++++ examples/Makefile | 6 ++- 2 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 examples/6_buffer_failtest.cpp diff --git a/examples/6_buffer_failtest.cpp b/examples/6_buffer_failtest.cpp new file mode 100644 index 0000000..a2b5784 --- /dev/null +++ b/examples/6_buffer_failtest.cpp @@ -0,0 +1,72 @@ + +#include <iostream> +#include <sstream> +#include <cassert> +#include <tscpp.h> +#include "types.h" + +using namespace std; +using namespace tscpp; + +int main() +{ + //BufferTooSmall while serialize + { + Point3d p1(1,2,3); + char buffer[10]; + assert(serialize(buffer,sizeof(buffer),p1)==BufferTooSmall); + } + + //BufferTooSmall while unserialize + { + Point3d p1(1,2,3); + char buffer[64]; + int serializedSize=serialize(buffer,sizeof(buffer),p1); + assert(serializedSize>0); + + Point3d p2; + assert(unserialize(p2,buffer,serializedSize-1)==BufferTooSmall); + assert(p2.x==0 && p2.y==0 && p2.z==0); + } + + //WrongType while unserialize + { + Point3d p(1,2,3); + char buffer[64]; + int serializedSize=serialize(buffer,sizeof(buffer),p); + assert(serializedSize>0); + + Point2d q; + assert(unserialize(q,buffer,serializedSize)==WrongType); + assert(q.x==0 && q.y==0); + } + + TypePool tp; + tp.registerType<Point2d>([&](Point2d& t) { assert(false); }); + tp.registerType<Point3d>([&](Point3d& t) { assert(false); }); + + { + Point3d p(1,2,3); + char buffer[64]; + int serializedSize=serialize(buffer,sizeof(buffer),p); + assert(serializedSize>0); + + //BufferTooSmall while unserializeUnknown (name) + assert(unserializeUnknown(tp,buffer,1)==BufferTooSmall); + + //BufferTooSmall while unserializeUnknown (type) + assert(unserializeUnknown(tp,buffer,serializedSize-1)==BufferTooSmall); + } + + //UnknownType while unserializeUnknown + { + MiscData md; + char buffer[1024]; + int serializedSize=serialize(buffer,sizeof(buffer),md); + assert(serializedSize>0); + + assert(unserializeUnknown(tp,buffer,serializedSize)==UnknownType); + } + + cout<<"Test passed"<<endl; +} diff --git a/examples/Makefile b/examples/Makefile index 2f227a4..ab098d7 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -1,6 +1,6 @@ CXX = g++ -CXXFLAGS = -std=c++11 -O2 -Wall -I.. +CXXFLAGS = -std=c++11 -g -O0 -fsanitize=address -Wall -I.. all: $(CXX) $(CXXFLAGS) 1_stream_known.cpp ../tscpp.cpp -o 1_stream_known @@ -8,12 +8,14 @@ all: $(CXX) $(CXXFLAGS) 3_buffer_known.cpp ../tscpp.cpp -o 3_buffer_known $(CXX) $(CXXFLAGS) 4_buffer_unknown.cpp ../tscpp.cpp -o 4_buffer_unknown $(CXX) $(CXXFLAGS) 5_stream_failtest.cpp ../tscpp.cpp -o 5_stream_failtest + $(CXX) $(CXXFLAGS) 6_buffer_failtest.cpp ../tscpp.cpp -o 6_buffer_failtest ./1_stream_known ./2_stream_unknown ./3_buffer_known ./4_buffer_unknown ./5_stream_failtest + ./6_buffer_failtest clean: rm -f 1_stream_known 2_stream_unknown 3_buffer_known 4_buffer_unknown \ - 5_stream_failtest + 5_stream_failtest 6_buffer_failtest -- GitLab