aboutsummaryrefslogtreecommitdiffstats
path: root/asn1c
diff options
context:
space:
mode:
authorLev Walkin <vlm@lionet.info>2005-07-03 05:21:52 +0000
committerLev Walkin <vlm@lionet.info>2005-07-03 05:21:52 +0000
commitcf49412b44ad7e96349f9a9a1370217bb096782e (patch)
tree7f0e058ab70355da2d78a0f06628262ec3939801 /asn1c
parent01e8b9f592e6cea50e4ca287e625b6afdd550340 (diff)
tests for CXER encoding
Diffstat (limited to 'asn1c')
-rw-r--r--asn1c/tests/check-70.c30
1 files changed, 28 insertions, 2 deletions
diff --git a/asn1c/tests/check-70.c b/asn1c/tests/check-70.c
index 50ef83fb..403369e7 100644
--- a/asn1c/tests/check-70.c
+++ b/asn1c/tests/check-70.c
@@ -18,6 +18,8 @@
enum expectation {
EXP_OK, /* Encoding/decoding must succeed */
+ EXP_CXER_EXACT, /* Encoding/decoding using CXER must be exact */
+ EXP_CXER_DIFF, /* Encoding/decoding using CXER must be different */
EXP_BROKEN, /* Decoding must fail */
EXP_DIFFERENT, /* Reconstruction will yield different encoding */
};
@@ -44,6 +46,7 @@ _buf_writer(const void *buffer, size_t size, void *app_key) {
enum der_or_xer {
AS_DER,
AS_XER,
+ AS_CXER,
};
static void
@@ -64,6 +67,10 @@ save_object_as(PDU_t *st, enum der_or_xer how) {
rval = xer_encode(&asn_DEF_PDU, st, XER_F_BASIC,
_buf_writer, 0);
break;
+ case AS_CXER:
+ rval = xer_encode(&asn_DEF_PDU, st, XER_F_CANONICAL,
+ _buf_writer, 0);
+ break;
}
if (rval.encoded == -1) {
fprintf(stderr,
@@ -197,7 +204,10 @@ process_XER_data(enum expectation expectation, char *fbuf, int size) {
st = load_object_from(expectation, buf, buf_offset, AS_DER);
assert(st);
- save_object_as(st, AS_XER);
+ save_object_as(st,
+ (expectation == EXP_CXER_EXACT
+ || expectation == EXP_CXER_DIFF)
+ ? AS_CXER : AS_XER);
fprintf(stderr, "=== original ===\n");
fwrite(fbuf, 1, size, stderr);
fprintf(stderr, "=== re-encoded ===\n");
@@ -211,6 +221,16 @@ process_XER_data(enum expectation expectation, char *fbuf, int size) {
case EXP_BROKEN:
assert(!xer_encoding_equal(fbuf, size, buf, buf_offset));
break;
+ case EXP_CXER_EXACT:
+ buf[buf_offset++] = '\n';
+ assert(size == buf_offset);
+ assert(memcmp(fbuf, buf, size) == 0);
+ break;
+ case EXP_CXER_DIFF:
+ buf[buf_offset++] = '\n';
+ assert(size != buf_offset
+ || memcmp(fbuf, buf, size));
+ break;
case EXP_OK:
assert(xer_encoding_equal(fbuf, size, buf, buf_offset));
break;
@@ -239,6 +259,10 @@ process(const char *fname) {
expectation = EXP_BROKEN; break;
case 'D': /* Reconstructing should yield different data */
expectation = EXP_DIFFERENT; break;
+ case 'E': /* Byte to byte exact reconstruction */
+ expectation = EXP_CXER_EXACT; break;
+ case 'X': /* Should fail byte-to-byte comparison */
+ expectation = EXP_CXER_DIFF; break;
default:
expectation = EXP_OK; break;
}
@@ -271,8 +295,10 @@ main() {
/* Process a specific test file */
str = getenv("DATA_70_FILE");
- if(str && strncmp(str, "data-70-", 8) == 0)
+ if(str && strncmp(str, "data-70-", 8) == 0) {
process(str);
+ return 0;
+ }
dir = opendir("../data-70");
assert(dir);