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