OSSP CVS Repository

ossp - Check-in [4212]
Not logged in
[Honeypot]  [Browse]  [Home]  [Login]  [Reports
[Search]  [Ticket]  [Timeline
  [Patchset]  [Tagging/Branching

Check-in Number: 4212
Date: 2001-Jul-18 21:03:17 (local)
2001-Jul-18 19:03:17 (UTC)
User:simons
Branch:
Comment: Added test suite that will verify that it is okay to call xds_encode() in an encoding engine and xds_decode() in a decoding engine.
Tickets:
Inspections:
Files:
ossp-pkg/xds/regression-tests/Makefile      1.13 -> 1.14     2 inserted, 1 deleted
ossp-pkg/xds/regression-tests/xds-mystruct.c      added-> 1.1

ossp-pkg/xds/regression-tests/Makefile 1.13 -> 1.14

--- Makefile     2001/07/18 17:38:37     1.13
+++ Makefile     2001/07/18 19:03:17     1.14
@@ -12,7 +12,8 @@
 
 TESTS           = xds-core.exe xds-find-engine.exe xds-register.exe xds-encode.exe \
                   xds-getbuffer.exe xds-decode.exe xds-setbuffer.exe xds-engine-restart.exe \
-                  xdr-uint32.exe xdr-int32.exe xdr-uint64.exe xdr-int64.exe
+                  xdr-uint32.exe xdr-int32.exe xdr-uint64.exe xdr-int64.exe \
+                  xds-mystruct.exe
 
 .SUFFIXES:
 .SUFFIXES:      .c .exe


ossp-pkg/xds/regression-tests/xds-mystruct.c -> 1.1

*** /dev/null    Fri May 10 18:30:38 2024
--- -    Fri May 10 18:32:53 2024
***************
*** 0 ****
--- 1,165 ----
+ /*
+    XDS - OSSP Extensible Data Serialization Library
+    Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
+    Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
+ 
+    This file is part of OSSP XDS, an extensible data serialization
+    library which can be found at http://www.ossp.com/pkg/xds/.
+ 
+    Permission to use, copy, modify, and distribute this software for
+    any purpose with or without fee is hereby granted, provided that
+    the above copyright notice and this permission notice appear in all
+    copies.
+ 
+    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+    WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+    IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
+    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+    USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+    OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+ */
+ 
+ #include <stdio.h>
+ #include <string.h>
+ #include <assert.h>
+ #include "../internal.h"
+ 
+ struct mystruct
+     {
+     int32_t   small;
+     int64_t   big;
+     u_int32_t positive;
+     };
+ 
+ static int encode_mystruct_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
+     {
+     int rc;
+     struct mystruct* ms;
+ 
+     assert(xds != NULL);
+     assert(buffer != NULL);
+     assert(buffer_size != 0);
+     assert(args != NULL);
+ 
+     if (buffer_size >= sizeof(struct mystruct))
+        {
+        ms = va_arg(*args, struct mystruct*);
+        rc = xds_encode(xds, "int32 int64 uint32", ms->small, ms->big, ms->positive);
+        if (rc != XDS_OK)
+            return rc;
+        }
+     else
+        return sizeof(struct mystruct);
+ 
+     return 0;
+     }
+ 
+ static int decode_mystruct_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
+     {
+     int rc;
+     struct mystruct* ms;
+ 
+     assert(xds != NULL);
+     assert(buffer != NULL);
+     assert(buffer_size != 0);
+     assert(args != NULL);
+ 
+     if (buffer_size >= sizeof(struct mystruct))
+        {
+        ms = va_arg(*args, struct mystruct*);
+        rc = xds_decode(xds, "int32 int64 uint32", &(ms->small), &(ms->big), &(ms->positive));
+        if (rc != XDS_OK)
+            return rc;
+        }
+     else
+        return XDS_ERR_UNDERFLOW;
+ 
+     return 0;
+     }
+ 
+ int main()
+     {
+     xds_t* xds;
+     char*  buffer;
+     size_t buffer_size;
+ 
+     struct mystruct ms, new_ms;
+     ms.small    = -0x1234567;
+     ms.big      = -0x1234567890abcdeLL;
+     ms.positive = 42;
+ 
+     /* Encode our copy of mystruct using our encoding callback. Then
+        get a the buffer and destroy the context again. */
+ 
+     xds = xds_init(XDS_ENCODE);
+     if (xds == NULL)
+        {
+        printf("Failed to initialize XDS context.\n");
+        return 1;
+        }
+     if (xds_register(xds, "mystruct", &encode_mystruct_engine, NULL) != XDS_OK ||
+        xds_register(xds, "int32", &xdr_encode_int32, NULL) != XDS_OK ||
+        xds_register(xds, "int64", &xdr_encode_int64, NULL) != XDS_OK ||
+        xds_register(xds, "uint32", &xdr_encode_uint32, NULL) != XDS_OK)
+        {
+        printf("Failed to register my encoding engines.\n");
+        return 1;
+        }
+     if (xds_encode(xds, "mystruct", &ms) != XDS_OK)
+        {
+        printf("xds_encode() failed!\n");
+        return 1;
+        }
+     if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK)
+        {
+        printf("xds_setbuffer() failed!\n");
+        return 1;
+        }
+     xds_destroy(xds);
+ 
+     /* Now create a decoding context and decode the whole thing again. */
+ 
+     xds = xds_init(XDS_DECODE);
+     if (xds == NULL)
+        {
+        printf("Failed to initialize XDS context.\n");
+        return 1;
+        }
+     if (xds_register(xds, "mystruct", &decode_mystruct_engine, NULL) != XDS_OK ||
+        xds_register(xds, "int32", &xdr_decode_int32, NULL) != XDS_OK ||
+        xds_register(xds, "int64", &xdr_decode_int64, NULL) != XDS_OK ||
+        xds_register(xds, "uint32", &xdr_decode_uint32, NULL) != XDS_OK)
+        {
+        printf("Failed to register my decoding engines.\n");
+        return 1;
+        }
+     if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK)
+        {
+        printf("xds_setbuffer() failed!\n");
+        return 1;
+        }
+     if (xds_decode(xds, "mystruct", &new_ms) != XDS_OK)
+        {
+        printf("xds_decode() failed!\n");
+        return 1;
+        }
+     xds_destroy(xds);
+ 
+     /* Both structures must be identical. */
+ 
+     if (memcmp(&ms, &new_ms, sizeof(struct mystruct)) != 0)
+        {
+        printf("Decoded data does not match the original!\n");
+        return 1;
+        }
+ 
+     /* Everything went fine. */
+ 
+     return 0;
+     }

CVSTrac 2.0.1