summaryrefslogtreecommitdiff
path: root/TAO/tests/CDR/octet_sequence.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tests/CDR/octet_sequence.cpp')
-rw-r--r--TAO/tests/CDR/octet_sequence.cpp78
1 files changed, 78 insertions, 0 deletions
diff --git a/TAO/tests/CDR/octet_sequence.cpp b/TAO/tests/CDR/octet_sequence.cpp
new file mode 100644
index 00000000000..fd8a8026ab5
--- /dev/null
+++ b/TAO/tests/CDR/octet_sequence.cpp
@@ -0,0 +1,78 @@
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// TAO/tests/CDR
+//
+// = FILENAME
+// octet_sequence.cpp
+//
+// = DESCRIPTION
+// Verifies that reference counting is performed correctly for octet
+// sequence marshaling.
+//
+// = AUTHORS
+// Dave Meyer (dmeyer@std.saic.com)
+// Carlos O'Ryan (coryan@cs.wustl.edu)
+//
+// ============================================================================
+
+#include "ace/Log_Msg.h"
+
+#include "tao/CDR.h"
+#include "ace/OS_NS_string.h"
+
+ACE_Message_Block * m1;
+ACE_Message_Block * m2;
+ACE_Message_Block * m3;
+
+void dump(const char * msg)
+{
+ ACE_DEBUG ((LM_INFO,
+ "%s\n"
+ "m1: %d\n"
+ "m2: %d\n"
+ "m3: %d\n",
+ msg,
+ m1->data_block()->reference_count(),
+ m2->data_block()->reference_count(),
+ m3->data_block()->reference_count()));
+}
+
+int main(int, char*[])
+{
+ // setup mb's
+ char buf[1024];
+ m1=new ACE_Message_Block(1024);
+ ACE_OS::memset(buf,'1',512);
+ m1->copy(buf,512);
+ m2=new ACE_Message_Block(1024);
+ ACE_OS::memset(buf,'2',512);
+ m2->copy(buf,512);
+ m3=new ACE_Message_Block(1024);
+ ACE_OS::memset(buf,'3',512);
+ m3->copy(buf,512);
+
+ m1->cont(m2);
+ m2->cont(m3);
+ dump("expect 1,1,1");
+
+ ACE_Message_Block* m = ACE_Message_Block::duplicate (m1);
+ dump("expect 2,2,2");
+
+ {
+ TAO_OutputCDR cdr;
+ cdr.write_octet_array_mb(m1);
+ dump("expect 3,3,3"); // that's what I expected, anyway
+ ACE_DEBUG ((LM_INFO, "total cdr length is %u\n",
+ static_cast<u_int> (cdr.total_length())));
+ }
+ dump("expect 2,2,2"); // that's what I expected, anyway
+
+ ACE_Message_Block::release (m);
+ dump("expect 1,1,1"); // that's what I expected, anyway
+ ACE_Message_Block::release (m1);
+
+ return 0;
+}