[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Patch to add sync() method to Engine and fixes for unit tests on Lin
From: |
David Sugar |
Subject: |
Re: Patch to add sync() method to Engine and fixes for unit tests on Linux |
Date: |
Sat, 17 Jul 2004 08:59:36 -0400 |
User-agent: |
Mutt/1.5.5.1i |
This one seemed to supercede the first one as it also had the same
header fixes for persist.h and would conflict. But I was able to apply
this one alone and build successfully.
Chad Yates wrote:
> Flip! here it is.
>
> Chad Yates wrote:
>
> >Attached is a patch to the Persistence Engine and cppunit test suite:
> >
> > - Added a new sync() method to Engine using code from ~Engine.
> >
> > - Added implementations for std::string << and >> operators (was
> >overlooked in last patch as I was juggling 3 source trees)
> >
> > - Applies various fixes/updates to the ccxx_tests cppunit test
> >suite. The tests that are active, should compile and run successfully
> >under Linux now.
> >
> >Cheers,
> >
> >Chad
> >
>
> Index: tests/SampleObject.h
> ===================================================================
> RCS file: /cvsroot/commoncpp/commoncpp2/tests/SampleObject.h,v
> retrieving revision 1.1.6.1
> diff -u -r1.1.6.1 SampleObject.h
> --- tests/SampleObject.h 17 Jan 2004 11:51:02 -0000 1.1.6.1
> +++ tests/SampleObject.h 17 Jul 2004 04:50:45 -0000
> @@ -45,7 +45,6 @@
> #include <iterator>
> #include "SampleSubObject.h"
>
> -using namespace ost;
> using std::cout;
> using std::endl;
> using std::string;
> Index: tests/Test_Date.h
> ===================================================================
> RCS file: /cvsroot/commoncpp/commoncpp2/tests/Test_Date.h,v
> retrieving revision 1.3.4.1
> diff -u -r1.3.4.1 Test_Date.h
> --- tests/Test_Date.h 17 Jan 2004 11:51:02 -0000 1.3.4.1
> +++ tests/Test_Date.h 17 Jul 2004 04:50:45 -0000
> @@ -88,10 +88,13 @@
> exp_dayofweek = 1;
>
> std::stringstream tmp;
> - tmp << exp_year << std::setfill('0') << std::setw(2) << exp_month <<
> std::setw(2) << exp_day;
> + tmp << exp_year << "-" << std::setfill('0') << std::setw(2) << exp_month
> << "-" << std::setw(2) << exp_day;
> exp_stringdate = tmp.str();
> - exp_value = atoi(exp_stringdate.c_str());
> -
> +
> + std::stringstream tmp2;
> + tmp2 << exp_year << std::setfill('0') << std::setw(2) << exp_month <<
> std::setw(2) << exp_day;
> + exp_value = atoi(tmp2.str().c_str());
> +
> // make a ctime style datetime stamp
> memset(&exp_dt, 0, sizeof(exp_dt));
> exp_dt.tm_year = exp_year - 1900; // years since 1900
> @@ -184,4 +187,3 @@
> }
>
> };
> -
> Index: tests/Test_Engine.cpp
> ===================================================================
> RCS file: /cvsroot/commoncpp/commoncpp2/tests/Test_Engine.cpp,v
> retrieving revision 1.1.6.1
> diff -u -r1.1.6.1 Test_Engine.cpp
> --- tests/Test_Engine.cpp 17 Jan 2004 11:51:02 -0000 1.1.6.1
> +++ tests/Test_Engine.cpp 17 Jul 2004 04:50:45 -0000
> @@ -107,12 +107,13 @@
> TEST_PRIMITIVE_OUTPUT(uint16, 0x0123);
> TEST_PRIMITIVE_OUTPUT(int32, 0x01234567);
> TEST_PRIMITIVE_OUTPUT(uint32, 0x01234567);
> - TEST_PRIMITIVE_OUTPUT(int64, 0x0123456789ABCDEF); // warning: integer
> constant larger than the maximum value of an unsigned long int
> - TEST_PRIMITIVE_OUTPUT(uint64, 0x0123456789ABCDEF); // warning: integer
> constant larger than the maximum value of an unsigned long int
> + //TEST_PRIMITIVE_OUTPUT(int64, 0x0123456789ABCDEF); // warning: integer
> constant larger than the maximum value of an unsigned long int
> + //TEST_PRIMITIVE_OUTPUT(uint64, 0x0123456789ABCDEF); // warning: integer
> constant larger than the maximum value of an unsigned long int
> TEST_PRIMITIVE_OUTPUT(float, 3.141592653589793238462643f);
> TEST_PRIMITIVE_OUTPUT(double, 3.141592653589793238462643);
> TEST_PRIMITIVE_OUTPUT(string, "abcdefghijklmnopqrstuvwxyz0123456789");
>
> + outputEngine.sync(); // flush Engine buffers before closing file
> outputArchive.close();
>
> // read primitive types back in and check
> @@ -125,8 +126,8 @@
> TEST_PRIMITIVE_INPUT(uint16);
> TEST_PRIMITIVE_INPUT(int32);
> TEST_PRIMITIVE_INPUT(uint32);
> - TEST_PRIMITIVE_INPUT(int64);
> - TEST_PRIMITIVE_INPUT(uint64);
> + //TEST_PRIMITIVE_INPUT(int64);
> + //TEST_PRIMITIVE_INPUT(uint64);
> TEST_PRIMITIVE_INPUT(float);
> TEST_PRIMITIVE_INPUT(double);
> TEST_PRIMITIVE_INPUT(string);
> @@ -148,6 +149,7 @@
> binaryBuffer[i] = i;
>
> outputEngine.writeBinary((const uint8*) binaryBuffer,
> sizeof(binaryBuffer));
> + outputEngine.sync(); // flush Engine buffers before closing file
> outputArchive.close();
>
> // read binary data back in and check
> @@ -180,6 +182,7 @@
>
> outputEngine << intVector;
> outputEngine << *pIntVector;
> + outputEngine.sync(); // flush Engine buffers before closing file
> outputArchive.close();
>
> // read STL std::vector back in and check
> @@ -218,6 +221,7 @@
>
> outputEngine << intDeque;
> outputEngine << *pIntDeque;
> + outputEngine.sync(); // flush Engine buffers before closing file
> outputArchive.close();
>
> // read STL std::deque back in and check
> @@ -256,6 +260,7 @@
>
> outputEngine << intMap;
> outputEngine << *pIntMap;
> + outputEngine.sync(); // flush Engine buffers before closing file
> outputArchive.close();
>
> // read STL std::map back in and check
> @@ -282,6 +287,7 @@
> std::fstream outputArchive("EngineComplexObjectTest.dat",
> std::ios::out|std::ios::binary);
> Engine outputEngine(outputArchive, ost::Engine::modeWrite);
> outputEngine << complexObject;
> + outputEngine.sync(); // flush Engine buffers before closing file
> outputArchive.close();
>
> // Unpersist a new object structure into an uninitialized object
> @@ -321,6 +327,7 @@
> std::fstream inputArchive("EngineComplexObjectTest.dat", std::ios::in);
> Engine inputEngine(inputArchive, ost::Engine::modeRead);
> inputEngine >> myObjAllocatedPtr;
> + outputEngine.sync(); // flush Engine buffers before closing file
> inputArchive.close();
>
> CPPUNIT_ASSERT_MESSAGE("Unpersisted into pre-allocated pointer",
> *myObjAllocatedPtr == complexObject);
> Index: tests/Test_Engine.h
> ===================================================================
> RCS file: /cvsroot/commoncpp/commoncpp2/tests/Test_Engine.h,v
> retrieving revision 1.1.6.1
> diff -u -r1.1.6.1 Test_Engine.h
> --- tests/Test_Engine.h 17 Jan 2004 11:51:02 -0000 1.1.6.1
> +++ tests/Test_Engine.h 17 Jul 2004 04:50:45 -0000
> @@ -141,4 +141,3 @@
> */
> void testModeExceptions();
> };
> -
> Index: tests/Test_TCPStream.h
> ===================================================================
> RCS file: /cvsroot/commoncpp/commoncpp2/tests/Test_TCPStream.h,v
> retrieving revision 1.1.6.1
> diff -u -r1.1.6.1 Test_TCPStream.h
> --- tests/Test_TCPStream.h 17 Jan 2004 11:51:02 -0000 1.1.6.1
> +++ tests/Test_TCPStream.h 17 Jul 2004 04:50:45 -0000
> @@ -68,22 +68,23 @@
>
> void testIsPending()
> {
> + /* FIXME hanging after recent changes to isPending?
> try
> - {
> - // Just connect to a port that won't send data -- doesn't
> matter what
> - ost::TCPStream foo("10.0.0.5",5800,512,true,100);
> - for(unsigned int i = 0; i < 50 ; i++)
> - {
> - while(
> foo.isPending(ost::Socket::pendingInput,100));
> - }
> -
> - CPPUNIT_ASSERT(true);
> - }
> - catch( ost::Socket* s )
> - {
> - CPPUNIT_ASSERT_MESSAGE("Socket error", true);
> - }
> + {
> + // Just connect to a port that won't send data -- doesn't matter what
> + ost::TCPStream foo(ost::IPV4Host("10.0.0.5"),5800,512,true,100);
> + for(unsigned int i = 0; i < 5 ; i++)
> + {
> + while( foo.isPending(ost::Socket::pendingInput,100));
> + }
> +
> + CPPUNIT_ASSERT(true);
> + }
> + catch( ost::Socket* s )
> + {
> + CPPUNIT_ASSERT_MESSAGE("Socket error", true);
> + }
> + */
> }
>
> -};
> -
> +};
> Index: tests/Test_URLString.h
> ===================================================================
> RCS file: /cvsroot/commoncpp/commoncpp2/tests/Test_URLString.h,v
> retrieving revision 1.3.4.1
> diff -u -r1.3.4.1 Test_URLString.h
> --- tests/Test_URLString.h 17 Jan 2004 11:51:02 -0000 1.3.4.1
> +++ tests/Test_URLString.h 17 Jul 2004 04:50:45 -0000
> @@ -40,7 +40,7 @@
>
> #include <cppunit/extensions/HelperMacros.h>
> #include <iostream>
> -#include <cc++/urlstring.h>
> +#include <cc++/url.h>
>
> using namespace ost;
> using std::string;
> @@ -112,8 +112,8 @@
>
> void testStringVersion()
> {
> - CPPUNIT_ASSERT_EQUAL(string("VGhpcyBpcyBhIHRlc3Qu"),
> b64Encode(string("This is a test.")));
> - CPPUNIT_ASSERT_EQUAL(string("This is a test."),
> b64Decode(string("VGhpcyBpcyBhIHRlc3Qu")));
> + CPPUNIT_ASSERT_EQUAL(String("VGhpcyBpcyBhIHRlc3Qu"),
> b64Encode(String("This is a test.")));
> + CPPUNIT_ASSERT_EQUAL(String("This is a test."),
> b64Decode(String("VGhpcyBpcyBhIHRlc3Qu")));
> }
>
> void testTypicalTextBase64EncodeDecode()
> Index: include/cc++/persist.h
> ===================================================================
> RCS file: /cvsroot/commoncpp/commoncpp2/include/cc++/persist.h,v
> retrieving revision 1.11.4.7
> diff -u -r1.11.4.7 persist.h
> --- include/cc++/persist.h 14 Jun 2004 21:48:23 -0000 1.11.4.7
> +++ include/cc++/persist.h 17 Jul 2004 04:50:45 -0000
> @@ -46,6 +46,14 @@
> #ifndef CCXX_PERSIST_H_
> #define CCXX_PERSIST_H_
>
> +#ifndef CCXX_CONFIG_H_
> +#include <cc++/config.h>
> +#endif
> +
> +#ifndef CCXX_EXCEPTIONS_H_
> +#include <cc++/exception.h>
> +#endif
> +
> #ifndef CCXX_MISSING_H_
> #include <cc++/missing.h>
> #endif
> @@ -280,6 +288,8 @@
> * This Flushes the buffers and closes the Persistence::Engine
> * this must happen before the underlying stream is shut down
> */
> + void sync();
> +
> virtual ~Engine();
>
>
> @@ -312,7 +322,9 @@
> void write(float i) THROWS (Exception) { CCXX_ENGINEWRITE_REF(i); }
> void write(double i) THROWS (Exception) { CCXX_ENGINEWRITE_REF(i); }
> #undef CCXX_ENGINEWRITE_REF
> +
> void write(const String& str) THROWS (Exception);
> + void write(const std::string& str) THROWS (Exception);
>
> // Every write operation boils down to one or more of these
> void writeBinary(const uint8* data, const uint32 size) THROWS
> (Exception);
> @@ -348,6 +360,7 @@
> #undef CCXX_ENGINEREAD_REF
>
> void read(String& str) THROWS (Exception);
> + void read(std::string& str) THROWS (Exception);
>
> // Every read operation boild down to one or more of these
> void readBinary(uint8* data, uint32 size) THROWS (Exception);
> @@ -465,6 +478,11 @@
> __EXPORT Engine& operator <<( Engine& ar, String ob) THROWS
> (Engine::Exception);
>
> /** @relates Engine */
> +__EXPORT Engine& operator >>( Engine& ar, std::string& ob) THROWS
> (Engine::Exception);
> +/** @relates Engine */
> +__EXPORT Engine& operator <<( Engine& ar, std::string ob) THROWS
> (Engine::Exception);
> +
> +/** @relates Engine */
> __EXPORT Engine& operator >>( Engine& ar, bool& ob) THROWS
> (Engine::Exception);
> /** @relates Engine */
> __EXPORT Engine& operator <<( Engine& ar, bool ob) THROWS
> (Engine::Exception);
> @@ -585,7 +603,3 @@
> * c-basic-offset: 8
> * End:
> */
> -
> -
> -
> -
> Index: src/engine.cpp
> ===================================================================
> RCS file: /cvsroot/commoncpp/commoncpp2/src/engine.cpp,v
> retrieving revision 1.6.4.4
> diff -u -r1.6.4.4 engine.cpp
> --- src/engine.cpp 6 Jul 2004 21:55:05 -0000 1.6.4.4
> +++ src/engine.cpp 17 Jul 2004 04:50:45 -0000
> @@ -109,8 +109,7 @@
> #endif
> }
>
> -
> -Engine::~Engine()
> +void Engine::sync()
> {
> // Flush compression buffers etc here.
> #ifndef NO_COMPRESSION
> @@ -133,11 +132,17 @@
> }
> deflateEnd(&myZStream);
> }
> - delete [] myCompressedDataBuffer;
> - delete [] myUncompressedDataBuffer;
> #endif
> }
>
> +Engine::~Engine()
> +{
> + if (myUnderlyingStream.good())
> + sync();
> +
> + delete [] myCompressedDataBuffer;
> + delete [] myUncompressedDataBuffer;
> +}
>
> void Engine::writeBinary(const uint8* data, const uint32 size)
> THROWS (Engine::Exception)
> @@ -268,7 +273,7 @@
> uint32 classId = (uint32)myClassMap.size();
> myClassMap[object->getPersistenceID()] = classId;
> write(classId);
> - write(object->getPersistenceID());
> + write(static_cast<String>(object->getPersistenceID()));
> }
> else
> {
> @@ -309,7 +314,7 @@
> // we won't need it later since this object is already allocated
> readClass();
>
> - // Okay then - we can read data straight into this object
> + // Okay then - we can read data straight into this object
> readObject(&object);
> }
>
> @@ -419,6 +424,30 @@
> delete[] buffer;
> }
>
> +/*
> + * note, does not (yet?) throw an exception, but interface
> + * prepared ..
> + */
> +void Engine::write(const std::string& str) THROWS (Engine::Exception)
> +{
> + assert(myOperationalMode == modeWrite);
> + uint32 len = (uint32)str.length();
> + write(len);
> + writeBinary((uint8*)str.c_str(),len);
> +}
> +
> +void Engine::read(std::string& str) THROWS (Engine::Exception)
> +{
> + assert(myOperationalMode == modeRead);
> + uint32 len = 0;
> + read(len);
> + uint8 *buffer = new uint8[len+1];
> + readBinary(buffer,len);
> + buffer[len] = 0;
> + str = (char*)buffer;
> + delete[] buffer;
> +}
> +
> #define CCXX_RE(ar,ob) ar.read(ob); return ar
> #define CCXX_WE(ar,ob) ar.write(ob); return ar
>
> @@ -462,6 +491,9 @@
> CCXX_EXPORT(Engine&) operator >>( Engine& ar, String& ob) THROWS
> (Engine::Exception) {CCXX_RE (ar,ob);}
> CCXX_EXPORT(Engine&) operator <<( Engine& ar, String ob) THROWS
> (Engine::Exception) {CCXX_WE (ar,ob);}
>
> +CCXX_EXPORT(Engine&) operator >>( Engine& ar, std::string& ob) THROWS
> (Engine::Exception) {CCXX_RE (ar,ob);}
> +CCXX_EXPORT(Engine&) operator <<( Engine& ar, std::string ob) THROWS
> (Engine::Exception) {CCXX_WE (ar,ob);}
> +
> CCXX_EXPORT(Engine&) operator >>( Engine& ar, bool& ob) THROWS
> (Engine::Exception) {
> uint32 a; ar.read(a); ob=a==1;return ar;
> }
> _______________________________________________
> Bug-commoncpp mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/bug-commoncpp