|
Packit |
a4aae4 |
#include <cppunit/TestFixture.h>
|
|
Packit |
a4aae4 |
#include <cppunit/TestAssert.h>
|
|
Packit |
a4aae4 |
#include <cppunit/extensions/TestFactoryRegistry.h>
|
|
Packit |
a4aae4 |
#include <cppunit/ui/text/TestRunner.h>
|
|
Packit |
a4aae4 |
#include <cppunit/extensions/HelperMacros.h>
|
|
Packit |
a4aae4 |
#include <cppunit/CompilerOutputter.h>
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
#include "config.h"
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
#ifdef HAVE_UNISTD_H
|
|
Packit |
a4aae4 |
#include <unistd.h>
|
|
Packit |
a4aae4 |
#endif
|
|
Packit |
a4aae4 |
#include <fcntl.h>
|
|
Packit |
a4aae4 |
#include <pthread.h>
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// #define DODS_DEBUG 1
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
#include <iostream>
|
|
Packit |
a4aae4 |
#include <fstream>
|
|
Packit |
a4aae4 |
#include <cstring>
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
#include "TestByte.h"
|
|
Packit |
a4aae4 |
#include "TestInt16.h"
|
|
Packit |
a4aae4 |
#include "TestInt32.h"
|
|
Packit |
a4aae4 |
#include "TestUInt16.h"
|
|
Packit |
a4aae4 |
#include "TestUInt32.h"
|
|
Packit |
a4aae4 |
#include "TestFloat32.h"
|
|
Packit |
a4aae4 |
#include "TestFloat64.h"
|
|
Packit |
a4aae4 |
#include "TestStr.h"
|
|
Packit |
a4aae4 |
#include "TestUrl.h"
|
|
Packit |
a4aae4 |
#include "TestArray.h"
|
|
Packit |
a4aae4 |
#include "TestStructure.h"
|
|
Packit |
a4aae4 |
#include "TestGrid.h"
|
|
Packit |
a4aae4 |
#include "TestSequence.h"
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
#include "DataDDS.h"
|
|
Packit |
a4aae4 |
#include "ConstraintEvaluator.h"
|
|
Packit |
a4aae4 |
#include "TestTypeFactory.h"
|
|
Packit |
a4aae4 |
#include "XDRFileMarshaller.h"
|
|
Packit |
a4aae4 |
#include "XDRStreamMarshaller.h"
|
|
Packit |
a4aae4 |
#include "XDRFileUnMarshaller.h"
|
|
Packit |
a4aae4 |
#include "XDRStreamUnMarshaller.h"
|
|
Packit |
a4aae4 |
#include "GetOpt.h"
|
|
Packit |
a4aae4 |
//#include "Locker.h"
|
|
Packit |
a4aae4 |
#include "debug.h"
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
int test_variable_sleep_interval = 0; // Used in Test* classes for testing timeouts.
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
static bool debug = false;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
#undef DBG
|
|
Packit |
a4aae4 |
#define DBG(x) do { if (debug) {x;} } while(false)
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
using namespace CppUnit;
|
|
Packit |
a4aae4 |
using namespace std;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
namespace libdap {
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
class MarshallerTest: public CppUnit::TestFixture {
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_TEST_SUITE (MarshallerTest);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (simple_types_file_serialize_test);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (array_file_serialize_test);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (structure_file_serialize_test);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (grid_file_serialize_test);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (sequence_file_serialize_test);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (simple_types_file_deserialize_test);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (array_file_deserialize_test);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (structure_file_deserialize_test);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (grid_file_deserialize_test);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (sequence_file_deserialize_test);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (simple_types_stream_serialize_test);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (array_stream_serialize_test);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (array_stream_deserialize_test);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (array_stream_serialize_test_2);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (array_stream_serialize_test_3);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (array_stream_serialize_test_4);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (array_f32_stream_serialize_test);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (array_f32_stream_deserialize_test);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (array_f32_stream_serialize_test_2);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (array_f64_stream_serialize_test);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (array_f64_stream_deserialize_test);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (array_f64_stream_serialize_test_2);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (structure_stream_serialize_test);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (grid_stream_serialize_test);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (sequence_stream_serialize_test);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (simple_types_stream_deserialize_test);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (structure_stream_deserialize_test);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (grid_stream_deserialize_test);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (sequence_stream_deserialize_test);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (array_stream_put_vector_thread_test);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (array_stream_put_vector_thread_test_2);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (array_stream_put_vector_thread_test_3);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (array_stream_put_vector_thread_test_4);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (array_stream_put_vector_thread_test_5);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
#if 1
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (array_stream_serialize_part_thread_test);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (array_stream_serialize_part_thread_test_2);
|
|
Packit |
a4aae4 |
CPPUNIT_TEST (array_stream_serialize_part_thread_test_3);
|
|
Packit |
a4aae4 |
#endif
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_TEST_SUITE_END( );
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestByte *b;
|
|
Packit |
a4aae4 |
TestInt16 *i16;
|
|
Packit |
a4aae4 |
TestInt32 *i32;
|
|
Packit |
a4aae4 |
TestUInt16 *ui16;
|
|
Packit |
a4aae4 |
TestUInt32 *ui32;
|
|
Packit |
a4aae4 |
TestFloat32 *f32;
|
|
Packit |
a4aae4 |
TestFloat64 *f64;
|
|
Packit |
a4aae4 |
TestStr *str;
|
|
Packit |
a4aae4 |
TestUrl *url;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
vector<dods_byte> db;
|
|
Packit |
a4aae4 |
TestByte *ab;
|
|
Packit |
a4aae4 |
TestArray *arr;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
vector<dods_float32> d_f32;
|
|
Packit |
a4aae4 |
TestFloat32 *a_f32;
|
|
Packit |
a4aae4 |
TestArray *arr_f32;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
vector<dods_float64> d_f64;
|
|
Packit |
a4aae4 |
TestFloat64 *a_f64;
|
|
Packit |
a4aae4 |
TestArray *arr_f64;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestStructure *s;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
ConstraintEvaluator eval;
|
|
Packit |
a4aae4 |
TestTypeFactory ttf;
|
|
Packit |
a4aae4 |
DataDDS dds;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
string str_value, str2_value;
|
|
Packit |
a4aae4 |
string url_value;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
public:
|
|
Packit |
a4aae4 |
MarshallerTest() :
|
|
Packit |
a4aae4 |
b(0), i16(0), i32(0), ui16(0), ui32(0), f32(0), f64(0), str(0), url(0), ab(0), arr(0), a_f32(0), arr_f32(0), a_f64(
|
|
Packit |
a4aae4 |
0), arr_f64(0), s(0), dds(&ttf, "dds")
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
url_value = "http://dcz.gso.uri.edu/avhrr-archive/archive.html";
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void setUp()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
b = new TestByte("byte");
|
|
Packit |
a4aae4 |
b->read();
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
i16 = new TestInt16("i16");
|
|
Packit |
a4aae4 |
i16->read();
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
i32 = new TestInt32("i32");
|
|
Packit |
a4aae4 |
i32->read();
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
ui16 = new TestUInt16("ui16");
|
|
Packit |
a4aae4 |
ui16->read();
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
ui32 = new TestUInt32("ui32");
|
|
Packit |
a4aae4 |
ui32->read();
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
f32 = new TestFloat32("f32");
|
|
Packit |
a4aae4 |
f32->read();
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
f64 = new TestFloat64("f64");
|
|
Packit |
a4aae4 |
f64->read();
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
str = new TestStr("str");
|
|
Packit |
a4aae4 |
str->read();
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
url = new TestUrl("url");
|
|
Packit |
a4aae4 |
url->read();
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// Array of Byte
|
|
Packit |
a4aae4 |
ab = new TestByte("ab");
|
|
Packit |
a4aae4 |
ab->read();
|
|
Packit |
a4aae4 |
arr = new TestArray("arr", ab);
|
|
Packit |
a4aae4 |
arr->append_dim(5, "dim1");
|
|
Packit |
a4aae4 |
arr->append_dim(3, "dim2");
|
|
Packit |
a4aae4 |
arr->read();
|
|
Packit |
a4aae4 |
arr->set_read_p(true);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
db.resize(arr->length());
|
|
Packit |
a4aae4 |
for (int i = 0; i < arr->length(); ++i)
|
|
Packit |
a4aae4 |
db[i] = 126;
|
|
Packit |
a4aae4 |
arr->value(&db[0]);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// Array of Float32
|
|
Packit |
a4aae4 |
a_f32 = new TestFloat32("a_f32");
|
|
Packit |
a4aae4 |
a_f32->read();
|
|
Packit |
a4aae4 |
arr_f32 = new TestArray("arr_f32", a_f32);
|
|
Packit |
a4aae4 |
arr_f32->append_dim(5, "dim1");
|
|
Packit |
a4aae4 |
arr_f32->append_dim(3, "dim2");
|
|
Packit |
a4aae4 |
arr_f32->read();
|
|
Packit |
a4aae4 |
arr_f32->set_read_p(true);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
d_f32.resize(arr->length());
|
|
Packit |
a4aae4 |
for (int i = 0; i < arr->length(); ++i)
|
|
Packit |
a4aae4 |
d_f32[i] = 126.126;
|
|
Packit |
a4aae4 |
arr_f32->value(&d_f32[0]);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// Array of Float64
|
|
Packit |
a4aae4 |
a_f64 = new TestFloat64("a_f64");
|
|
Packit |
a4aae4 |
a_f64->read();
|
|
Packit |
a4aae4 |
arr_f64 = new TestArray("arr_f64", a_f64);
|
|
Packit |
a4aae4 |
arr_f64->append_dim(5, "dim1");
|
|
Packit |
a4aae4 |
arr_f64->append_dim(3, "dim2");
|
|
Packit |
a4aae4 |
arr_f64->read();
|
|
Packit |
a4aae4 |
arr_f64->set_read_p(true);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
d_f64.resize(arr->length());
|
|
Packit |
a4aae4 |
for (int i = 0; i < arr->length(); ++i)
|
|
Packit |
a4aae4 |
d_f64[i] = 1260.0126;
|
|
Packit |
a4aae4 |
arr_f64->value(&d_f64[0]);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
s = new TestStructure("s");
|
|
Packit |
a4aae4 |
s->add_var(i32);
|
|
Packit |
a4aae4 |
s->add_var(str);
|
|
Packit |
a4aae4 |
s->add_var(arr);
|
|
Packit |
a4aae4 |
s->set_send_p(true);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void tearDown()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
delete b;
|
|
Packit |
a4aae4 |
b = 0;
|
|
Packit |
a4aae4 |
delete i16;
|
|
Packit |
a4aae4 |
i16 = 0;
|
|
Packit |
a4aae4 |
delete i32;
|
|
Packit |
a4aae4 |
i32 = 0;
|
|
Packit |
a4aae4 |
delete ui16;
|
|
Packit |
a4aae4 |
ui16 = 0;
|
|
Packit |
a4aae4 |
delete ui32;
|
|
Packit |
a4aae4 |
ui32 = 0;
|
|
Packit |
a4aae4 |
delete f32;
|
|
Packit |
a4aae4 |
f32 = 0;
|
|
Packit |
a4aae4 |
delete f64;
|
|
Packit |
a4aae4 |
f64 = 0;
|
|
Packit |
a4aae4 |
delete str;
|
|
Packit |
a4aae4 |
str = 0;
|
|
Packit |
a4aae4 |
delete url;
|
|
Packit |
a4aae4 |
url = 0;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
delete ab;
|
|
Packit |
a4aae4 |
ab = 0;
|
|
Packit |
a4aae4 |
delete arr;
|
|
Packit |
a4aae4 |
arr = 0;
|
|
Packit |
a4aae4 |
delete a_f32;
|
|
Packit |
a4aae4 |
ab = 0;
|
|
Packit |
a4aae4 |
delete arr_f32;
|
|
Packit |
a4aae4 |
arr_f32 = 0;
|
|
Packit |
a4aae4 |
delete a_f64;
|
|
Packit |
a4aae4 |
ab = 0;
|
|
Packit |
a4aae4 |
delete arr_f64;
|
|
Packit |
a4aae4 |
arr_f64 = 0;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
delete s;
|
|
Packit |
a4aae4 |
s = 0;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void simple_types_file_serialize_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
FILE *f = fopen("st_test.file", "w");
|
|
Packit |
a4aae4 |
XDRFileMarshaller fm(f);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
b->serialize(eval, dds, fm, false);
|
|
Packit |
a4aae4 |
i16->serialize(eval, dds, fm, false);
|
|
Packit |
a4aae4 |
i32->serialize(eval, dds, fm, false);
|
|
Packit |
a4aae4 |
ui16->serialize(eval, dds, fm, false);
|
|
Packit |
a4aae4 |
ui32->serialize(eval, dds, fm, false);
|
|
Packit |
a4aae4 |
f32->serialize(eval, dds, fm, false);
|
|
Packit |
a4aae4 |
f64->serialize(eval, dds, fm, false);
|
|
Packit |
a4aae4 |
str->serialize(eval, dds, fm, false);
|
|
Packit |
a4aae4 |
url->serialize(eval, dds, fm, false);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void simple_types_file_deserialize_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
FILE *ff = fopen("st_test.file", "r");
|
|
Packit |
a4aae4 |
XDRFileUnMarshaller um(ff);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
Byte fb("fb");
|
|
Packit |
a4aae4 |
fb.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fb.value() == b->value());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
Int16 fi16("i16");
|
|
Packit |
a4aae4 |
fi16.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fi16.value() == i16->value());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
Int32 fi32("i32");
|
|
Packit |
a4aae4 |
fi32.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fi32.value() == i32->value());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
UInt16 fui16("ui16");
|
|
Packit |
a4aae4 |
fui16.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fui16.value() == ui16->value());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
UInt32 fui32("ui32");
|
|
Packit |
a4aae4 |
fui32.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fui32.value() == ui32->value());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
Float32 ff32("f32");
|
|
Packit |
a4aae4 |
ff32.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(ff32.value() == f32->value());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
Float64 ff64("f64");
|
|
Packit |
a4aae4 |
ff64.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(ff64.value() == f64->value());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
Str fstr("str");
|
|
Packit |
a4aae4 |
fstr.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
// Test for the string value like this because the digit after
|
|
Packit |
a4aae4 |
// the colon changes each time the read() method is called.
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fstr.value().find("Silly test string:") != string::npos);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
Url furl("url");
|
|
Packit |
a4aae4 |
furl.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(furl.value() == url_value);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void array_file_serialize_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
FILE *f = fopen("a_test.file", "w");
|
|
Packit |
a4aae4 |
XDRFileMarshaller fm(f);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
arr->serialize(eval, dds, fm, false);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void array_file_deserialize_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
FILE *ff = fopen("a_test.file", "r");
|
|
Packit |
a4aae4 |
XDRFileUnMarshaller um(ff);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestByte fab("ab");
|
|
Packit |
a4aae4 |
TestArray farr("arr", &fab;;
|
|
Packit |
a4aae4 |
farr.append_dim(5, "dim1");
|
|
Packit |
a4aae4 |
farr.append_dim(3, "dim2");
|
|
Packit |
a4aae4 |
farr.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(farr.length() == arr->length());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
dods_byte fdb[farr.length() * sizeof(dods_byte)];
|
|
Packit |
a4aae4 |
farr.value(fdb);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(!memcmp((void *) fdb, (void *) &db[0], farr.length() * sizeof(dods_byte)));
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void structure_file_serialize_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
FILE *f = fopen("struct_test.file", "w");
|
|
Packit |
a4aae4 |
XDRFileMarshaller fm(f);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
s->serialize(eval, dds, fm, false);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void structure_file_deserialize_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
FILE *ff = fopen("struct_test.file", "r");
|
|
Packit |
a4aae4 |
XDRFileUnMarshaller um(ff);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestStructure fs("fs");
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestInt32 fsi32("fsi32");
|
|
Packit |
a4aae4 |
fs.add_var(&fsi32);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestStr fsstr("fsstr");
|
|
Packit |
a4aae4 |
fs.add_var(&fsstr);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestByte fsab("fsab");
|
|
Packit |
a4aae4 |
TestArray fsarr("fsarr", &fsab);
|
|
Packit |
a4aae4 |
fsarr.append_dim(5, "dim1");
|
|
Packit |
a4aae4 |
fsarr.append_dim(3, "dim2");
|
|
Packit |
a4aae4 |
fs.add_var(&fsarr);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
fs.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
Int32 *fsi32_p = dynamic_cast<Int32 *>(fs.var("fsi32"));
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fsi32_p);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fsi32_p->value() == i32->value());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
Str *fsstr_p = dynamic_cast<Str *>(fs.var("fsstr"));
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fsstr_p);
|
|
Packit |
a4aae4 |
DBG2(cerr << "fsstr_p->value(): " << fsstr_p->value() << endl);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fsstr_p->value().find("Silly test string:") != string::npos);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
BaseType *bt = fs.var("fsab");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt);
|
|
Packit |
a4aae4 |
Array *fsarr_p = dynamic_cast<Array *>(bt);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fsarr_p);
|
|
Packit |
a4aae4 |
dods_byte fdb[fsarr_p->length() * sizeof(dods_byte)];
|
|
Packit |
a4aae4 |
fsarr_p->value(fdb);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fsarr_p->length() == arr->length());
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(!memcmp((void *) fdb, (void *) &db[0], fsarr_p->length() * sizeof(dods_byte)));
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void grid_file_serialize_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
FILE *f = fopen("g_test.file", "w");
|
|
Packit |
a4aae4 |
XDRFileMarshaller fm(f);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestGrid tg("grid1");
|
|
Packit |
a4aae4 |
TestArray arr2("arr2", ab);
|
|
Packit |
a4aae4 |
arr2.append_dim(5, "dim1");
|
|
Packit |
a4aae4 |
arr2.append_dim(3, "dim2");
|
|
Packit |
a4aae4 |
tg.add_var(&arr2, array);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestArray map1("map1", f32);
|
|
Packit |
a4aae4 |
map1.append_dim(5, "dim1");
|
|
Packit |
a4aae4 |
tg.add_var(&map1, maps);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestArray map2("map2", f32);
|
|
Packit |
a4aae4 |
map2.append_dim(3, "dim2");
|
|
Packit |
a4aae4 |
tg.add_var(&map2, maps);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
tg.set_send_p(true);
|
|
Packit |
a4aae4 |
tg.read();
|
|
Packit |
a4aae4 |
tg.set_read_p(true);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
tg.serialize(eval, dds, fm, false);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void grid_file_deserialize_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
FILE *ff = fopen("g_test.file", "r");
|
|
Packit |
a4aae4 |
XDRFileUnMarshaller um(ff);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestGrid tg("grid1");
|
|
Packit |
a4aae4 |
TestArray arr2("arr2", ab);
|
|
Packit |
a4aae4 |
arr2.append_dim(5, "dim1");
|
|
Packit |
a4aae4 |
arr2.append_dim(3, "dim2");
|
|
Packit |
a4aae4 |
tg.add_var(&arr2, array);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestArray map1("map1", f32);
|
|
Packit |
a4aae4 |
map1.append_dim(5, "dim1");
|
|
Packit |
a4aae4 |
tg.add_var(&map1, maps);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestArray map2("map2", f32);
|
|
Packit |
a4aae4 |
map2.append_dim(3, "dim2");
|
|
Packit |
a4aae4 |
tg.add_var(&map2, maps);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
tg.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// Check the values in the array
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(tg.get_array()->length() == arr->length());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
dods_byte fdb[tg.get_array()->length() * sizeof(dods_byte)];
|
|
Packit |
a4aae4 |
tg.get_array()->value(fdb);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(!memcmp((void *) fdb, (void *) &db[0], tg.get_array()->length() * sizeof(dods_byte)));
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// Should test the map values here, but skip that for now...
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void sequence_file_serialize_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
FILE *f = fopen("seq_test.file", "w");
|
|
Packit |
a4aae4 |
XDRFileMarshaller fm(f);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestSequence seq("seq");
|
|
Packit |
a4aae4 |
seq.add_var(f64);
|
|
Packit |
a4aae4 |
seq.add_var(arr);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestSequence seq2("seq2");
|
|
Packit |
a4aae4 |
seq2.add_var(ui16);
|
|
Packit |
a4aae4 |
seq2.add_var(url);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
seq.add_var(&seq2);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
seq.set_send_p(true);
|
|
Packit |
a4aae4 |
seq.set_leaf_sequence();
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
seq.serialize(eval, dds, fm, false);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void sequence_file_deserialize_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
FILE *ff = fopen("seq_test.file", "r");
|
|
Packit |
a4aae4 |
XDRFileUnMarshaller um(ff);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
dods_byte fdb[arr->length() * sizeof(dods_byte)];
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestSequence seq("seq");
|
|
Packit |
a4aae4 |
seq.add_var(f64);
|
|
Packit |
a4aae4 |
seq.add_var(arr);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestSequence seq2("seq2");
|
|
Packit |
a4aae4 |
seq2.add_var(ui16);
|
|
Packit |
a4aae4 |
seq2.add_var(url);
|
|
Packit |
a4aae4 |
seq2.set_send_p(true);
|
|
Packit |
a4aae4 |
seq.add_var(&seq2);
|
|
Packit |
a4aae4 |
seq.set_leaf_sequence();
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
seq.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
unsigned int num_rows = seq.number_of_rows();
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(num_rows == 4);
|
|
Packit |
a4aae4 |
for (unsigned int i = 0; i < num_rows; i++) {
|
|
Packit |
a4aae4 |
BaseTypeRow *row = seq.row_value(i);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(row);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(row->size() == 3);
|
|
Packit |
a4aae4 |
Float64 *f64_p = dynamic_cast<Float64 *>((*row)[0]);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(f64_p);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(f64_p->value() == f64->value());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
Array *arr_p = dynamic_cast<Array *>((*row)[1]);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(arr_p);
|
|
Packit |
a4aae4 |
arr_p->value(fdb);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(arr_p->length() == arr->length());
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(!memcmp((void *) fdb, (void *) &db[0], arr_p->length() * sizeof(dods_byte)));
|
|
Packit |
a4aae4 |
Sequence *seq_p = dynamic_cast<Sequence *>((*row)[2]);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(seq_p);
|
|
Packit |
a4aae4 |
unsigned int num_rows_sub = seq_p->number_of_rows();
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(num_rows == 4);
|
|
Packit |
a4aae4 |
for (unsigned int j = 0; j < num_rows_sub; j++) {
|
|
Packit |
a4aae4 |
BaseTypeRow *row_sub = seq_p->row_value(j);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(row_sub);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(row_sub->size() == 2);
|
|
Packit |
a4aae4 |
UInt16 *ui16_p = dynamic_cast<UInt16 *>((*row_sub)[0]);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(ui16_p);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(ui16_p->value() == ui16->value());
|
|
Packit |
a4aae4 |
Url *url_p = dynamic_cast<Url *>((*row_sub)[1]);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(url_p);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(url_p->value() == url->value());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// Stream tests from here on
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void simple_types_stream_serialize_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
ofstream strm("st_test.strm", ios::out | ios::trunc);
|
|
Packit |
a4aae4 |
XDRStreamMarshaller sm(strm);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
b->serialize(eval, dds, sm, false);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
i16->serialize(eval, dds, sm, false);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
i32->serialize(eval, dds, sm, false);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
ui16->serialize(eval, dds, sm, false);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
ui32->serialize(eval, dds, sm, false);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
f32->serialize(eval, dds, sm, false);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
f64->serialize(eval, dds, sm, false);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
str->serialize(eval, dds, sm, false);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
url->serialize(eval, dds, sm, false);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void simple_types_stream_deserialize_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
#if 0
|
|
Packit |
a4aae4 |
ifstream strm( "st_test.strm", ios::in );
|
|
Packit |
a4aae4 |
XDRStreamUnMarshaller um( strm );
|
|
Packit |
a4aae4 |
#else
|
|
Packit |
a4aae4 |
FILE *sf = fopen("st_test.strm", "r");
|
|
Packit |
a4aae4 |
XDRFileUnMarshaller um(sf);
|
|
Packit |
a4aae4 |
#endif
|
|
Packit |
a4aae4 |
Byte fb("fb");
|
|
Packit |
a4aae4 |
fb.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fb.value() == b->value());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
Int16 fi16("i16");
|
|
Packit |
a4aae4 |
fi16.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fi16.value() == i16->value());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
Int32 fi32("i32");
|
|
Packit |
a4aae4 |
fi32.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fi32.value() == i32->value());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
UInt16 fui16("ui16");
|
|
Packit |
a4aae4 |
fui16.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fui16.value() == ui16->value());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
UInt32 fui32("ui32");
|
|
Packit |
a4aae4 |
fui32.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fui32.value() == ui32->value());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
Float32 ff32("f32");
|
|
Packit |
a4aae4 |
ff32.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(ff32.value() == f32->value());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
Float64 ff64("f64");
|
|
Packit |
a4aae4 |
ff64.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(ff64.value() == f64->value());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
Str fstr("str");
|
|
Packit |
a4aae4 |
fstr.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
DBG(cerr << "fstr.value(): " << fstr.value() << endl);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fstr.value().find("Silly test string:") != string::npos);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
Url furl("url");
|
|
Packit |
a4aae4 |
furl.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(furl.value() == url_value);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void array_stream_serialize_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
ofstream strm("a_test.strm", ios::out | ios::trunc);
|
|
Packit |
a4aae4 |
XDRStreamMarshaller sm(strm);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
arr->serialize(eval, dds, sm, false);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void array_stream_deserialize_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
#if 0
|
|
Packit |
a4aae4 |
ifstream strm( "a_test.strm", ios::in );
|
|
Packit |
a4aae4 |
XDRStreamUnMarshaller um( strm );
|
|
Packit |
a4aae4 |
#else
|
|
Packit |
a4aae4 |
FILE *sf = fopen("a_test.strm", "r");
|
|
Packit |
a4aae4 |
XDRFileUnMarshaller um(sf);
|
|
Packit |
a4aae4 |
#endif
|
|
Packit |
a4aae4 |
TestByte fab("ab");
|
|
Packit |
a4aae4 |
TestArray farr("arr", &fab;;
|
|
Packit |
a4aae4 |
farr.append_dim(5, "dim1");
|
|
Packit |
a4aae4 |
farr.append_dim(3, "dim2");
|
|
Packit |
a4aae4 |
farr.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(farr.length() == arr->length());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
dods_byte fdb[arr->length() * sizeof(dods_byte)];
|
|
Packit |
a4aae4 |
farr.value(fdb);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(!memcmp((void *) fdb, (void *) &db[0], farr.length() * sizeof(dods_byte)));
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// This version of array_file_serialize_test tests the new code in Vector and
|
|
Packit |
a4aae4 |
// Marshaller that enables an Array's serialization to be split over two or more calls.
|
|
Packit |
a4aae4 |
void array_stream_serialize_test_2()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
fstream f("a_test_2.file", fstream::out);
|
|
Packit |
a4aae4 |
XDRStreamMarshaller fm(f);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
DBG(cerr << "arr->length(): " << arr->length() << endl);
|
|
Packit |
a4aae4 |
fm.put_vector_start(arr->length());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
DBG(cerr << "arr->var()->width(): " << arr->var()->width() << endl);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
switch (arr->var()->type()) {
|
|
Packit |
a4aae4 |
case dods_byte_c:
|
|
Packit |
a4aae4 |
case dods_int16_c:
|
|
Packit |
a4aae4 |
case dods_uint16_c:
|
|
Packit |
a4aae4 |
case dods_int32_c:
|
|
Packit |
a4aae4 |
case dods_uint32_c:
|
|
Packit |
a4aae4 |
case dods_float32_c:
|
|
Packit |
a4aae4 |
case dods_float64_c:
|
|
Packit |
a4aae4 |
fm.put_vector_part(arr->get_buf(), arr->length(), arr->var()->width(), arr->var()->type());
|
|
Packit |
a4aae4 |
fm.put_vector_end();
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
default:
|
|
Packit |
a4aae4 |
throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// now test the file contents to see if the correct stuff was serialized.
|
|
Packit |
a4aae4 |
// Given that this test runs after the first array serialize test, just
|
|
Packit |
a4aae4 |
// use system("cmp ...").
|
|
Packit |
a4aae4 |
//int status = system("cmp a_test.file a_test_2.file >/dev/null 2>&1");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(0 == system("cmp a_test.file a_test_2.file >/dev/null 2>&1"));
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void array_stream_serialize_test_3()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
fstream f("a_test_3.file", fstream::out);
|
|
Packit |
a4aae4 |
XDRStreamMarshaller fm(f);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
DBG(cerr << "arr->length(): " << arr->length() << endl);
|
|
Packit |
a4aae4 |
fm.put_vector_start(arr->length());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
DBG(cerr << "arr->var()->width(): " << arr->var()->width() << endl);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
const int size_of_first_part = 4;
|
|
Packit |
a4aae4 |
switch (arr->var()->type()) {
|
|
Packit |
a4aae4 |
case dods_byte_c:
|
|
Packit |
a4aae4 |
case dods_int16_c:
|
|
Packit |
a4aae4 |
case dods_uint16_c:
|
|
Packit |
a4aae4 |
case dods_int32_c:
|
|
Packit |
a4aae4 |
case dods_uint32_c:
|
|
Packit |
a4aae4 |
case dods_float32_c:
|
|
Packit |
a4aae4 |
case dods_float64_c:
|
|
Packit |
a4aae4 |
fm.put_vector_part(arr->get_buf(), size_of_first_part, arr->var()->width(), arr->var()->type());
|
|
Packit |
a4aae4 |
fm.put_vector_part(arr->get_buf() + size_of_first_part, arr->length() - size_of_first_part,
|
|
Packit |
a4aae4 |
arr->var()->width(), arr->var()->type());
|
|
Packit |
a4aae4 |
fm.put_vector_end();
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
default:
|
|
Packit |
a4aae4 |
throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// now test the file contents to see if the correct stuff was serialized.
|
|
Packit |
a4aae4 |
// Given that this test runs after the first array serialize test, just
|
|
Packit |
a4aae4 |
// use system("cmp ...").
|
|
Packit |
a4aae4 |
//int status = system("cmp a_test.file a_test_2.file >/dev/null 2>&1");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(0 == system("cmp a_test.file a_test_3.file >/dev/null 2>&1"));
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void array_stream_serialize_test_4()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
fstream f("a_test_4.file", fstream::out);
|
|
Packit |
a4aae4 |
XDRStreamMarshaller fm(f);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
DBG(cerr << "arr->length(): " << arr->length() << endl);
|
|
Packit |
a4aae4 |
fm.put_vector_start(arr->length());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
DBG(cerr << "arr->var()->width(): " << arr->var()->width() << endl);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
const int size_of_first_part = 5;
|
|
Packit |
a4aae4 |
switch (arr->var()->type()) {
|
|
Packit |
a4aae4 |
case dods_byte_c:
|
|
Packit |
a4aae4 |
case dods_int16_c:
|
|
Packit |
a4aae4 |
case dods_uint16_c:
|
|
Packit |
a4aae4 |
case dods_int32_c:
|
|
Packit |
a4aae4 |
case dods_uint32_c:
|
|
Packit |
a4aae4 |
case dods_float32_c:
|
|
Packit |
a4aae4 |
case dods_float64_c:
|
|
Packit |
a4aae4 |
fm.put_vector_part(arr->get_buf(), size_of_first_part, arr->var()->width(), arr->var()->type());
|
|
Packit |
a4aae4 |
fm.put_vector_part(arr->get_buf() + size_of_first_part, arr->length() - size_of_first_part,
|
|
Packit |
a4aae4 |
arr->var()->width(), arr->var()->type());
|
|
Packit |
a4aae4 |
fm.put_vector_end();
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
default:
|
|
Packit |
a4aae4 |
throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// now test the file contents to see if the correct stuff was serialized.
|
|
Packit |
a4aae4 |
// Given that this test runs after the first array serialize test, just
|
|
Packit |
a4aae4 |
// use system("cmp ...").
|
|
Packit |
a4aae4 |
//int status = system("cmp a_test.file a_test_2.file >/dev/null 2>&1");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(0 == system("cmp a_test.file a_test_4.file >/dev/null 2>&1"));
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void array_f32_stream_serialize_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
ofstream strm("a_f32_test.file", ios::out | ios::trunc);
|
|
Packit |
a4aae4 |
XDRStreamMarshaller sm(strm);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
arr_f32->serialize(eval, dds, sm, false);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void array_f32_stream_deserialize_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
#if 0
|
|
Packit |
a4aae4 |
ifstream strm( "a_test.strm", ios::in );
|
|
Packit |
a4aae4 |
XDRStreamUnMarshaller um( strm );
|
|
Packit |
a4aae4 |
#else
|
|
Packit |
a4aae4 |
FILE *sf = fopen("a_f32_test.file", "r");
|
|
Packit |
a4aae4 |
XDRFileUnMarshaller um(sf);
|
|
Packit |
a4aae4 |
#endif
|
|
Packit |
a4aae4 |
TestFloat32 fa_f32("a_f32");
|
|
Packit |
a4aae4 |
TestArray farr("arr_f32", &fa_f32);
|
|
Packit |
a4aae4 |
farr.append_dim(5, "dim1");
|
|
Packit |
a4aae4 |
farr.append_dim(3, "dim2");
|
|
Packit |
a4aae4 |
farr.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(farr.length() == arr->length());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
vector<dods_float32> fd_f32(arr->length());
|
|
Packit |
a4aae4 |
farr.value(&fd_f32[0]);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(!memcmp((void *) &fd_f32[0], (void *) &d_f32[0], farr.length() * sizeof(dods_float32)));
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void array_f32_stream_serialize_test_2()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
fstream f("a_f32_test_2.file", fstream::out);
|
|
Packit |
a4aae4 |
XDRStreamMarshaller fm(f);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
DBG(cerr << "arr_f32->length(): " << arr_f32->length() << endl);
|
|
Packit |
a4aae4 |
fm.put_vector_start(arr_f32->length());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
DBG(cerr << "&arr_f32->get_buf(): " << hex << (void * )arr_f32->get_buf() << dec << endl);
|
|
Packit |
a4aae4 |
DBG(cerr << "arr_f32->var()->width(): " << arr_f32->var()->width() << endl);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
const int size_of_first_part = 5;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
switch (arr_f32->var()->type()) {
|
|
Packit |
a4aae4 |
case dods_byte_c:
|
|
Packit |
a4aae4 |
case dods_int16_c:
|
|
Packit |
a4aae4 |
case dods_uint16_c:
|
|
Packit |
a4aae4 |
case dods_int32_c:
|
|
Packit |
a4aae4 |
case dods_uint32_c:
|
|
Packit |
a4aae4 |
case dods_float32_c:
|
|
Packit |
a4aae4 |
case dods_float64_c:
|
|
Packit |
a4aae4 |
fm.put_vector_part(arr_f32->get_buf(), size_of_first_part, arr_f32->var()->width(),
|
|
Packit |
a4aae4 |
arr_f32->var()->type());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// For this call, we have to pass the memory location of the rest of the array,
|
|
Packit |
a4aae4 |
// so we do a little calculation since get_buf() returns a char *. Actual code
|
|
Packit |
a4aae4 |
// would not need to do that.
|
|
Packit |
a4aae4 |
fm.put_vector_part(arr_f32->get_buf() + (size_of_first_part * arr_f32->var()->width()),
|
|
Packit |
a4aae4 |
arr_f32->length() - size_of_first_part, arr_f32->var()->width(), arr_f32->var()->type());
|
|
Packit |
a4aae4 |
fm.put_vector_end();
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
default:
|
|
Packit |
a4aae4 |
throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// now test the file contents to see if the correct stuff was serialized.
|
|
Packit |
a4aae4 |
// Given that this test runs after the first array serialize test, just
|
|
Packit |
a4aae4 |
// use system("cmp ...").
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(0 == system("cmp a_f32_test.file a_f32_test_2.file >/dev/null 2>&1"));
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void array_f64_stream_serialize_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
ofstream strm("a_f64_test.file", ios::out | ios::trunc);
|
|
Packit |
a4aae4 |
XDRStreamMarshaller sm(strm);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
arr_f64->serialize(eval, dds, sm, false);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void array_f64_stream_deserialize_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
#if 0
|
|
Packit |
a4aae4 |
ifstream strm( "a_test.strm", ios::in );
|
|
Packit |
a4aae4 |
XDRStreamUnMarshaller um( strm );
|
|
Packit |
a4aae4 |
#else
|
|
Packit |
a4aae4 |
FILE *sf = fopen("a_f64_test.file", "r");
|
|
Packit |
a4aae4 |
XDRFileUnMarshaller um(sf);
|
|
Packit |
a4aae4 |
#endif
|
|
Packit |
a4aae4 |
TestFloat64 fa_f64("a_f64");
|
|
Packit |
a4aae4 |
TestArray farr("arr_f64", &fa_f64);
|
|
Packit |
a4aae4 |
farr.append_dim(5, "dim1");
|
|
Packit |
a4aae4 |
farr.append_dim(3, "dim2");
|
|
Packit |
a4aae4 |
farr.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(farr.length() == arr->length());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
vector<dods_float64> fd_f64(arr->length());
|
|
Packit |
a4aae4 |
farr.value(&fd_f64[0]);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(!memcmp((void *) &fd_f64[0], (void *) &d_f64[0], farr.length() * sizeof(dods_float64)));
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void array_f64_stream_serialize_test_2()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
fstream f("a_f64_test_2.file", fstream::out);
|
|
Packit |
a4aae4 |
XDRStreamMarshaller fm(f);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
DBG(cerr << "arr_f64->length(): " << arr_f64->length() << endl);
|
|
Packit |
a4aae4 |
fm.put_vector_start(arr_f64->length());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
DBG(cerr << "&arr_f64->get_buf(): " << hex << (void * )arr_f64->get_buf() << dec << endl);
|
|
Packit |
a4aae4 |
DBG(cerr << "arr_f64->var()->width(): " << arr_f64->var()->width() << endl);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
const int size_of_first_part = 5;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
switch (arr_f64->var()->type()) {
|
|
Packit |
a4aae4 |
case dods_byte_c:
|
|
Packit |
a4aae4 |
case dods_int16_c:
|
|
Packit |
a4aae4 |
case dods_uint16_c:
|
|
Packit |
a4aae4 |
case dods_int32_c:
|
|
Packit |
a4aae4 |
case dods_uint32_c:
|
|
Packit |
a4aae4 |
case dods_float32_c:
|
|
Packit |
a4aae4 |
case dods_float64_c:
|
|
Packit |
a4aae4 |
fm.put_vector_part(arr_f64->get_buf(), size_of_first_part, arr_f64->var()->width(),
|
|
Packit |
a4aae4 |
arr_f64->var()->type());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// For this call, we have to pass the memory location of the rest of the array,
|
|
Packit |
a4aae4 |
// so we do a little calculation since get_buf() returns a char *. Actual code
|
|
Packit |
a4aae4 |
// would not need to do that.
|
|
Packit |
a4aae4 |
fm.put_vector_part(arr_f64->get_buf() + (size_of_first_part * arr_f64->var()->width()),
|
|
Packit |
a4aae4 |
arr_f64->length() - size_of_first_part, arr_f64->var()->width(), arr_f64->var()->type());
|
|
Packit |
a4aae4 |
fm.put_vector_end();
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
default:
|
|
Packit |
a4aae4 |
throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// now test the file contents to see if the correct stuff was serialized.
|
|
Packit |
a4aae4 |
// Given that this test runs after the first array serialize test, just
|
|
Packit |
a4aae4 |
// use system("cmp ...").
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(0 == system("cmp a_f64_test.file a_f64_test_2.file >/dev/null 2>&1"));
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void structure_stream_serialize_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
ofstream strm("struct_test.strm", ios::out | ios::trunc);
|
|
Packit |
a4aae4 |
XDRStreamMarshaller sm(strm);
|
|
Packit |
a4aae4 |
s->serialize(eval, dds, sm, false);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void structure_stream_deserialize_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
#if 0
|
|
Packit |
a4aae4 |
ifstream strm( "struct_test.strm", ios::in );
|
|
Packit |
a4aae4 |
XDRStreamUnMarshaller um( strm );
|
|
Packit |
a4aae4 |
#else
|
|
Packit |
a4aae4 |
FILE *sf = fopen("struct_test.strm", "r");
|
|
Packit |
a4aae4 |
XDRFileUnMarshaller um(sf);
|
|
Packit |
a4aae4 |
#endif
|
|
Packit |
a4aae4 |
TestStructure fs("fs");
|
|
Packit |
a4aae4 |
TestInt32 fsi32("fsi32");
|
|
Packit |
a4aae4 |
fs.add_var(&fsi32);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestStr fsstr("fsstr");
|
|
Packit |
a4aae4 |
fs.add_var(&fsstr);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestByte fsab("fsab");
|
|
Packit |
a4aae4 |
TestArray fsarr("fsarr", &fsab);
|
|
Packit |
a4aae4 |
fsarr.append_dim(5, "dim1");
|
|
Packit |
a4aae4 |
fsarr.append_dim(3, "dim2");
|
|
Packit |
a4aae4 |
fs.add_var(&fsarr);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
fs.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
Int32 *fsi32_p = dynamic_cast<Int32 *>(fs.var("fsi32"));
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fsi32_p);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fsi32_p->value() == i32->value());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
Str *fsstr_p = dynamic_cast<Str *>(fs.var("fsstr"));
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fsstr_p);
|
|
Packit |
a4aae4 |
DBG(cerr << "fsstr_p->value(): " << fsstr_p->value() << endl);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fsstr_p->value().find("Silly test string:") != string::npos);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
BaseType *bt = fs.var("fsab");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(bt);
|
|
Packit |
a4aae4 |
Array *fsarr_p = dynamic_cast<Array *>(bt);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fsarr_p);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(fsarr_p->length() == arr->length());
|
|
Packit |
a4aae4 |
dods_byte fdb[fsarr_p->length() * sizeof(dods_byte)];
|
|
Packit |
a4aae4 |
fsarr_p->value(fdb);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(!memcmp((void *) fdb, (void *) &db[0], fsarr_p->length() * sizeof(dods_byte)));
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void grid_stream_serialize_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
ofstream strm("g_test.strm", ios::out | ios::trunc);
|
|
Packit |
a4aae4 |
XDRStreamMarshaller sm(strm);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestGrid tg("grid1");
|
|
Packit |
a4aae4 |
TestArray arr2("arr2", ab);
|
|
Packit |
a4aae4 |
arr2.append_dim(5, "dim1");
|
|
Packit |
a4aae4 |
arr2.append_dim(3, "dim2");
|
|
Packit |
a4aae4 |
tg.add_var(&arr2, array);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestArray map1("map1", f32);
|
|
Packit |
a4aae4 |
map1.append_dim(5, "dim1");
|
|
Packit |
a4aae4 |
tg.add_var(&map1, maps);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestArray map2("map2", f32);
|
|
Packit |
a4aae4 |
map2.append_dim(3, "dim2");
|
|
Packit |
a4aae4 |
tg.add_var(&map2, maps);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
tg.set_send_p(true);
|
|
Packit |
a4aae4 |
tg.read();
|
|
Packit |
a4aae4 |
tg.set_read_p(true);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
tg.serialize(eval, dds, sm, false);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void grid_stream_deserialize_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
#if 0
|
|
Packit |
a4aae4 |
ifstream strm( "g_test.strm", ios::in );
|
|
Packit |
a4aae4 |
XDRStreamUnMarshaller um( strm );
|
|
Packit |
a4aae4 |
#else
|
|
Packit |
a4aae4 |
FILE *sf = fopen("g_test.strm", "r");
|
|
Packit |
a4aae4 |
XDRFileUnMarshaller um(sf);
|
|
Packit |
a4aae4 |
#endif
|
|
Packit |
a4aae4 |
TestGrid tg("grid1");
|
|
Packit |
a4aae4 |
TestArray arr2("arr2", ab);
|
|
Packit |
a4aae4 |
arr2.append_dim(5, "dim1");
|
|
Packit |
a4aae4 |
arr2.append_dim(3, "dim2");
|
|
Packit |
a4aae4 |
tg.add_var(&arr2, array);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestArray map1("map1", f32);
|
|
Packit |
a4aae4 |
map1.append_dim(5, "dim1");
|
|
Packit |
a4aae4 |
tg.add_var(&map1, maps);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestArray map2("map2", f32);
|
|
Packit |
a4aae4 |
map2.append_dim(3, "dim2");
|
|
Packit |
a4aae4 |
tg.add_var(&map2, maps);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
tg.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// Check the values in the array
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(tg.get_array()->length() == arr->length());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
dods_byte fdb[tg.get_array()->length() * sizeof(dods_byte)];
|
|
Packit |
a4aae4 |
tg.get_array()->value(fdb);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(!memcmp((void *) fdb, (void *) &db[0], tg.get_array()->length() * sizeof(dods_byte)));
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void sequence_stream_serialize_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
ofstream strm("seq_test.strm", ios::out | ios::trunc);
|
|
Packit |
a4aae4 |
XDRStreamMarshaller sm(strm);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestSequence seq("seq");
|
|
Packit |
a4aae4 |
seq.add_var(f64);
|
|
Packit |
a4aae4 |
seq.add_var(arr);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestSequence seq2("seq2");
|
|
Packit |
a4aae4 |
seq2.add_var(ui16);
|
|
Packit |
a4aae4 |
seq2.add_var(url);
|
|
Packit |
a4aae4 |
seq.add_var(&seq2);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
seq.set_send_p(true);
|
|
Packit |
a4aae4 |
seq.set_leaf_sequence();
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
seq.serialize(eval, dds, sm, false);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void sequence_stream_deserialize_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
#if 0
|
|
Packit |
a4aae4 |
ifstream strm( "seq_test.strm", ios::in );
|
|
Packit |
a4aae4 |
XDRStreamUnMarshaller um( strm );
|
|
Packit |
a4aae4 |
#else
|
|
Packit |
a4aae4 |
FILE *sf = fopen("seq_test.strm", "r");
|
|
Packit |
a4aae4 |
XDRFileUnMarshaller um(sf);
|
|
Packit |
a4aae4 |
#endif
|
|
Packit |
a4aae4 |
dods_byte fdb[arr->length() * sizeof(dods_byte)];
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestSequence seq("seq");
|
|
Packit |
a4aae4 |
seq.add_var(f64);
|
|
Packit |
a4aae4 |
seq.add_var(arr);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestSequence seq2("seq2");
|
|
Packit |
a4aae4 |
seq2.add_var(ui16);
|
|
Packit |
a4aae4 |
seq2.add_var(url);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
seq.add_var(&seq2);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
seq.set_leaf_sequence();
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
seq.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
unsigned int num_rows = seq.number_of_rows();
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(num_rows == 4);
|
|
Packit |
a4aae4 |
for (unsigned int i = 0; i < num_rows; i++) {
|
|
Packit |
a4aae4 |
BaseTypeRow *row = seq.row_value(i);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(row);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(row->size() == 3);
|
|
Packit |
a4aae4 |
Float64 *f64_p = dynamic_cast<Float64 *>((*row)[0]);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(f64_p);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(f64_p->value() == f64->value());
|
|
Packit |
a4aae4 |
Array *arr_p = dynamic_cast<Array *>((*row)[1]);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(arr_p);
|
|
Packit |
a4aae4 |
arr_p->value(fdb);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(arr_p->length() == arr->length());
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(!memcmp((void *) fdb, (void *) &db[0], arr_p->length() * sizeof(dods_byte)));
|
|
Packit |
a4aae4 |
Sequence *seq_p = dynamic_cast<Sequence *>((*row)[2]);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(seq_p);
|
|
Packit |
a4aae4 |
unsigned int num_rows_sub = seq_p->number_of_rows();
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(num_rows == 4);
|
|
Packit |
a4aae4 |
for (unsigned int j = 0; j < num_rows_sub; j++) {
|
|
Packit |
a4aae4 |
BaseTypeRow *row_sub = seq_p->row_value(j);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(row_sub);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(row_sub->size() == 2);
|
|
Packit |
a4aae4 |
UInt16 *ui16_p = dynamic_cast<UInt16 *>((*row_sub)[0]);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(ui16_p);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(ui16_p->value() == ui16->value());
|
|
Packit |
a4aae4 |
Url *url_p = dynamic_cast<Url *>((*row_sub)[1]);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(url_p);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(url_p->value() == url->value());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// Test put_vector and its operation, both with and without using
|
|
Packit |
a4aae4 |
// pthreads
|
|
Packit |
a4aae4 |
void array_stream_put_vector_thread_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
fstream f("a_test_pv.file", fstream::out);
|
|
Packit |
a4aae4 |
XDRStreamMarshaller fm(f);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
switch (arr->var()->type()) {
|
|
Packit |
a4aae4 |
case dods_byte_c: {
|
|
Packit |
a4aae4 |
fm.put_vector/*_thread*/(arr->get_buf(), arr->length(), *arr);
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
case dods_int16_c:
|
|
Packit |
a4aae4 |
case dods_uint16_c:
|
|
Packit |
a4aae4 |
case dods_int32_c:
|
|
Packit |
a4aae4 |
case dods_uint32_c:
|
|
Packit |
a4aae4 |
case dods_float32_c:
|
|
Packit |
a4aae4 |
case dods_float64_c:
|
|
Packit |
a4aae4 |
throw InternalErr(__FILE__, __LINE__, "Unit test fail; array is a byte array.");
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
default:
|
|
Packit |
a4aae4 |
throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
//int status = system("cmp a_test.file a_test_2.file >/dev/null 2>&1");
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(0 == system("cmp a_test.file a_test_pv.file >/dev/null 2>&1"));
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// This test doesn't actually check its result - fix or replace
|
|
Packit |
a4aae4 |
void array_stream_put_vector_thread_test_2()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
fstream f("a_test_pv_2.file", fstream::out);
|
|
Packit |
a4aae4 |
XDRStreamMarshaller fm(f);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
switch (arr->var()->type()) {
|
|
Packit |
a4aae4 |
case dods_byte_c: {
|
|
Packit |
a4aae4 |
DBG(cerr << "arr->get_buf(): " << hex << (void* )arr->get_buf() << dec << endl);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
fm.put_vector(arr->get_buf(), arr->length(), *arr);
|
|
Packit |
a4aae4 |
fm.put_vector(arr->get_buf(), arr->length(), *arr);
|
|
Packit |
a4aae4 |
fm.put_vector(arr->get_buf(), arr->length(), *arr);
|
|
Packit |
a4aae4 |
fm.put_vector(arr->get_buf(), arr->length(), *arr);
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
case dods_int16_c:
|
|
Packit |
a4aae4 |
case dods_uint16_c:
|
|
Packit |
a4aae4 |
case dods_int32_c:
|
|
Packit |
a4aae4 |
case dods_uint32_c:
|
|
Packit |
a4aae4 |
case dods_float32_c:
|
|
Packit |
a4aae4 |
case dods_float64_c:
|
|
Packit |
a4aae4 |
throw InternalErr(__FILE__, __LINE__, "Unit test fail; array is a byte array.");
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
default:
|
|
Packit |
a4aae4 |
throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
FILE *sf = fopen("a_test_pv_2.file", "r");
|
|
Packit |
a4aae4 |
XDRFileUnMarshaller um(sf);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestByte fab("ab");
|
|
Packit |
a4aae4 |
TestArray farr("farr", &fab;;
|
|
Packit |
a4aae4 |
farr.append_dim(5, "dim1");
|
|
Packit |
a4aae4 |
farr.append_dim(3, "dim2");
|
|
Packit |
a4aae4 |
farr.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(farr.length() == arr->length());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
dods_byte fdb[arr->length() * sizeof(dods_byte)];
|
|
Packit |
a4aae4 |
farr.value(fdb);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(!memcmp((void *) fdb, (void *) &db[0], farr.length() * sizeof(dods_byte)));
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// now get three more arrays of the same size
|
|
Packit |
a4aae4 |
farr.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
farr.value(fdb);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(!memcmp((void *) fdb, (void *) &db[0], farr.length() * sizeof(dods_byte)));
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
farr.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
farr.value(fdb);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(!memcmp((void *) fdb, (void *) &db[0], farr.length() * sizeof(dods_byte)));
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
farr.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
farr.value(fdb);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(!memcmp((void *) fdb, (void *) &db[0], farr.length() * sizeof(dods_byte)));
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void array_stream_put_vector_thread_test_3()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
fstream f("a_test_pv_3.file", fstream::out);
|
|
Packit |
a4aae4 |
XDRStreamMarshaller fm(f);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
switch (arr->var()->type()) {
|
|
Packit |
a4aae4 |
case dods_byte_c: {
|
|
Packit |
a4aae4 |
DBG(cerr << "arr->get_buf(): " << hex << (void* )arr->get_buf() << dec << endl);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// test sequencing of threads and non-threaded calls. Note that for the
|
|
Packit |
a4aae4 |
// non-threaded calls, we pass a _reference_ to the object and it's an
|
|
Packit |
a4aae4 |
// ignored parameter (left over cruft...).
|
|
Packit |
a4aae4 |
fm.put_vector(arr->get_buf(), arr->length(), *arr);
|
|
Packit |
a4aae4 |
fm.put_vector(arr->get_buf(), arr->length(), *arr);
|
|
Packit |
a4aae4 |
fm.put_vector(arr->get_buf(), arr->length(), *arr);
|
|
Packit |
a4aae4 |
fm.put_vector(arr->get_buf(), arr->length(), *arr);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// No need to wait since put_vector() should be doing that
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
case dods_int16_c:
|
|
Packit |
a4aae4 |
case dods_uint16_c:
|
|
Packit |
a4aae4 |
case dods_int32_c:
|
|
Packit |
a4aae4 |
case dods_uint32_c:
|
|
Packit |
a4aae4 |
case dods_float32_c:
|
|
Packit |
a4aae4 |
case dods_float64_c:
|
|
Packit |
a4aae4 |
throw InternalErr(__FILE__, __LINE__, "Unit test fail; array is a byte array.");
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
default:
|
|
Packit |
a4aae4 |
throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// this should be identical to the output from pv_2 (the previous test).
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(0 == system("cmp a_test_pv_2.file a_test_pv_3.file >/dev/null 2>&1"));
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void array_stream_put_vector_thread_test_4()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
fstream f("a_f32_test_pv.file", fstream::out);
|
|
Packit |
a4aae4 |
XDRStreamMarshaller fm(f);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
switch (arr_f32->var()->type()) {
|
|
Packit |
a4aae4 |
case dods_byte_c:
|
|
Packit |
a4aae4 |
throw InternalErr(__FILE__, __LINE__, "Unit test fail; array is not a byte array.");
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
case dods_int16_c:
|
|
Packit |
a4aae4 |
case dods_uint16_c:
|
|
Packit |
a4aae4 |
case dods_int32_c:
|
|
Packit |
a4aae4 |
case dods_uint32_c:
|
|
Packit |
a4aae4 |
case dods_float32_c:
|
|
Packit |
a4aae4 |
case dods_float64_c: {
|
|
Packit |
a4aae4 |
DBG(cerr << "arr_f32->get_buf(): " << hex << (void* )arr_f32->get_buf() << dec << endl);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
fm.put_vector(arr_f32->get_buf(), arr_f32->length(), arr_f32->var()->width(), *arr_f32);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
default:
|
|
Packit |
a4aae4 |
throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(0 == system("cmp a_f32_test.file a_f32_test_pv.file >/dev/null 2>&1"));
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void array_stream_put_vector_thread_test_5()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
fstream f("a_f32_test_pv_2.file", fstream::out);
|
|
Packit |
a4aae4 |
XDRStreamMarshaller fm(f);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
switch (arr_f32->var()->type()) {
|
|
Packit |
a4aae4 |
case dods_byte_c:
|
|
Packit |
a4aae4 |
throw InternalErr(__FILE__, __LINE__, "Unit test fail; array is not a byte array.");
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
case dods_int16_c:
|
|
Packit |
a4aae4 |
case dods_uint16_c:
|
|
Packit |
a4aae4 |
case dods_int32_c:
|
|
Packit |
a4aae4 |
case dods_uint32_c:
|
|
Packit |
a4aae4 |
case dods_float32_c:
|
|
Packit |
a4aae4 |
case dods_float64_c: {
|
|
Packit |
a4aae4 |
DBG(cerr << "arr_f32->get_buf(): " << hex << (void* )arr_f32->get_buf() << dec << endl);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
fm.put_vector(arr_f32->get_buf(), arr_f32->length(), arr_f32->var()->width(), *arr_f32);
|
|
Packit |
a4aae4 |
fm.put_vector(arr_f32->get_buf(), arr_f32->length(), arr_f32->var()->width(), *arr_f32);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
default:
|
|
Packit |
a4aae4 |
throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
FILE *sf = fopen("a_f32_test_pv_2.file", "r");
|
|
Packit |
a4aae4 |
XDRFileUnMarshaller um(sf);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
TestFloat32 fa_32("fa_32");
|
|
Packit |
a4aae4 |
TestArray farr("farr", &fa_32);
|
|
Packit |
a4aae4 |
farr.append_dim(5, "dim1");
|
|
Packit |
a4aae4 |
farr.append_dim(3, "dim2");
|
|
Packit |
a4aae4 |
farr.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(farr.length() == arr->length());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
dods_float32 fd_32[arr->length() * sizeof(dods_float32)];
|
|
Packit |
a4aae4 |
farr.value(fd_32);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(!memcmp((void *) fd_32, (void *) &d_f32[0], farr.length() * sizeof(dods_float32)));
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// now get three more arrays of the same size
|
|
Packit |
a4aae4 |
farr.deserialize(um, &dds, false);
|
|
Packit |
a4aae4 |
farr.value(fd_32);
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(!memcmp((void *) fd_32, (void *) &d_f32[0], farr.length() * sizeof(dods_byte)));
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void array_stream_serialize_part_thread_test()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
fstream f("a_test_ptv.file", fstream::out);
|
|
Packit |
a4aae4 |
XDRStreamMarshaller fm(f);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
DBG(cerr << "arr->length(): " << arr->length() << endl);
|
|
Packit |
a4aae4 |
fm.put_vector_start(arr->length());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
DBG(cerr << "arr->var()->width(): " << arr->var()->width() << endl);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
const int size_of_first_part = 5;
|
|
Packit |
a4aae4 |
switch (arr->var()->type()) {
|
|
Packit |
a4aae4 |
case dods_byte_c:
|
|
Packit |
a4aae4 |
case dods_int16_c:
|
|
Packit |
a4aae4 |
case dods_uint16_c:
|
|
Packit |
a4aae4 |
case dods_int32_c:
|
|
Packit |
a4aae4 |
case dods_uint32_c:
|
|
Packit |
a4aae4 |
case dods_float32_c:
|
|
Packit |
a4aae4 |
case dods_float64_c: {
|
|
Packit |
a4aae4 |
fm.put_vector_part(arr->get_buf(), size_of_first_part, arr->var()->width(), arr->var()->type());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
fm.put_vector_part(arr->get_buf() + size_of_first_part, arr->length() - size_of_first_part,
|
|
Packit |
a4aae4 |
arr->var()->width(), arr->var()->type());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
fm.put_vector_end(); // forces a wait on the thread
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
default:
|
|
Packit |
a4aae4 |
throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(0 == system("cmp a_test.file a_test_ptv.file >/dev/null 2>&1"));
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void array_stream_serialize_part_thread_test_2()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
fstream f("a_f32_test_ptv.file", fstream::out);
|
|
Packit |
a4aae4 |
XDRStreamMarshaller fm(f);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
DBG(cerr << "arr_f32->length(): " << arr_f32->length() << endl);
|
|
Packit |
a4aae4 |
fm.put_vector_start(arr_f32->length());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
DBG(cerr << "arr_f32->var()->width(): " << arr_f32->var()->width() << endl);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
const int size_of_first_part = 5;
|
|
Packit |
a4aae4 |
switch (arr_f32->var()->type()) {
|
|
Packit |
a4aae4 |
case dods_byte_c:
|
|
Packit |
a4aae4 |
case dods_int16_c:
|
|
Packit |
a4aae4 |
case dods_uint16_c:
|
|
Packit |
a4aae4 |
case dods_int32_c:
|
|
Packit |
a4aae4 |
case dods_uint32_c:
|
|
Packit |
a4aae4 |
case dods_float32_c:
|
|
Packit |
a4aae4 |
case dods_float64_c: {
|
|
Packit |
a4aae4 |
fm.put_vector_part(arr_f32->get_buf(), size_of_first_part, arr_f32->var()->width(),
|
|
Packit |
a4aae4 |
arr_f32->var()->type());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
fm.put_vector_part(arr_f32->get_buf() + (size_of_first_part * arr_f32->var()->width()),
|
|
Packit |
a4aae4 |
arr_f32->length() - size_of_first_part, arr_f32->var()->width(), arr_f32->var()->type());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
fm.put_vector_end(); // forces a wait on the thread
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
default:
|
|
Packit |
a4aae4 |
throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(0 == system("cmp a_f32_test.file a_f32_test_ptv.file >/dev/null 2>&1"));
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void array_stream_serialize_part_thread_test_3()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
fstream f("a_f64_test_ptv.file", fstream::out);
|
|
Packit |
a4aae4 |
XDRStreamMarshaller fm(f);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
DBG(cerr << "arr_f64->length(): " << arr_f64->length() << endl);
|
|
Packit |
a4aae4 |
fm.put_vector_start(arr_f64->length());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
DBG(cerr << "arr_f64->var()->width(): " << arr_f64->var()->width() << endl);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
const int size_of_first_part = 5;
|
|
Packit |
a4aae4 |
switch (arr_f64->var()->type()) {
|
|
Packit |
a4aae4 |
case dods_byte_c:
|
|
Packit |
a4aae4 |
case dods_int16_c:
|
|
Packit |
a4aae4 |
case dods_uint16_c:
|
|
Packit |
a4aae4 |
case dods_int32_c:
|
|
Packit |
a4aae4 |
case dods_uint32_c:
|
|
Packit |
a4aae4 |
case dods_float32_c:
|
|
Packit |
a4aae4 |
case dods_float64_c:
|
|
Packit |
a4aae4 |
fm.put_vector_part(arr_f64->get_buf(), size_of_first_part, arr_f64->var()->width(),
|
|
Packit |
a4aae4 |
arr_f64->var()->type());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
fm.put_vector_part(arr_f64->get_buf() + (size_of_first_part * arr_f64->var()->width()),
|
|
Packit |
a4aae4 |
arr_f64->length() - size_of_first_part, arr_f64->var()->width(), arr_f64->var()->type());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
fm.put_vector_end(); // forces a wait on the thread
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
default:
|
|
Packit |
a4aae4 |
throw InternalErr(__FILE__, __LINE__, "Implemented for numeric simple types only");
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
string err = "failed:" + e.get_error_message();
|
|
Packit |
a4aae4 |
CPPUNIT_FAIL(err.c_str());
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_ASSERT(0 == system("cmp a_f64_test.file a_f64_test_ptv.file >/dev/null 2>&1"));
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
};
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CPPUNIT_TEST_SUITE_REGISTRATION (MarshallerTest);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
} // namepsace libdap
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
int main(int argc, char*argv[])
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
GetOpt getopt(argc, argv, "dh");
|
|
Packit |
a4aae4 |
int option_char;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
while ((option_char = getopt()) != -1)
|
|
Packit |
a4aae4 |
switch (option_char) {
|
|
Packit |
a4aae4 |
case 'd':
|
|
Packit |
a4aae4 |
debug = 1; // debug is a static global
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
case 'h': { // help - show test names
|
|
Packit |
a4aae4 |
cerr << "Usage: MarshallerTest has the following tests:" << endl;
|
|
Packit |
a4aae4 |
const std::vector<Test*> &tests = libdap::MarshallerTest::suite()->getTests();
|
|
Packit |
a4aae4 |
unsigned int prefix_len = libdap::MarshallerTest::suite()->getName().append("::").length();
|
|
Packit |
a4aae4 |
for (std::vector<Test*>::const_iterator i = tests.begin(), e = tests.end(); i != e; ++i) {
|
|
Packit |
a4aae4 |
cerr << (*i)->getName().replace(0, prefix_len, "") << endl;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
default:
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
CppUnit::TextTestRunner runner;
|
|
Packit |
a4aae4 |
runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
bool wasSuccessful = true;
|
|
Packit |
a4aae4 |
string test = "";
|
|
Packit |
a4aae4 |
int i = getopt.optind;
|
|
Packit |
a4aae4 |
if (i == argc) {
|
|
Packit |
a4aae4 |
// run them all
|
|
Packit |
a4aae4 |
wasSuccessful = runner.run("");
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
else {
|
|
Packit |
a4aae4 |
for (; i < argc; ++i) {
|
|
Packit |
a4aae4 |
if (debug) cerr << "Running " << argv[i] << endl;
|
|
Packit |
a4aae4 |
test = libdap::MarshallerTest::suite()->getName().append("::").append(argv[i]);
|
|
Packit |
a4aae4 |
wasSuccessful = wasSuccessful && runner.run(test);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
xmlMemoryDump();
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
return wasSuccessful ? 0 : 1;
|
|
Packit |
a4aae4 |
}
|