Age | Commit message (Collapse) | Author |
|
* maint:
Teach the ASN.1 compiler the no_ok_wrapper option
Optimize the generated decode/2 function
|
|
Add the no_ok_wrapper option so that the generated M:encode/2 and
M:decode/2 functions will not wrap a successful return value in an
{ok,...} tuple. Errors will cause exceptions.
Eliminating the wrapping tuple allows simpler nesting of calls.
|
|
Use 'try' instead of 'catch', and don't match anything that
cannot actually be returned from the generated encoding code.
|
|
* maint: (24 commits)
No longer compile the X420 specs for plain BER
Combine the testSeqIndefinite/1 and testSetIndefinite/1 test cases
Remove asn1_wrapper
Eliminate the use of asn1_wrapper
Simplify tests of CHOICE with OPTIONAL
asn1_test_lib: Add roundtrip functions and use them everywhere
Makefile: Release Emakefile to ensure warnings are treated as errors
Don't allow unused exported functions in test case helpers
Move out specific tests from asn1_test_lib
testMegaco: Remove unused exported function msg11/0
ASN.1 tests: Don't export functions that are only locally called
Remove unused pem_performance.erl file
asn1_SUITE: Reinstate test of sub-constraint
ASN.1 tests: Remove unused choice_extension.erl
Remove unused compile() functions
asn1_test_lib: Remove unnecessary loading of a compiled ASN.1 spec
Slightly clean up testX420
asn1_SUITE: Combine most tests that use External.asn1
asn1ct_gen: Clean up process dictionary after generating
asn1ct_parser2: Clean the process dictionary after parsing
...
|
|
We used to compile the X420 specs for both DER and PER, but
9ec0a0ba changed that to compile for DER and plain BER (probably
accidentally).
Since the X420 suite contains 99 source files and compilations
takes more than 40 seconds on my computer for one backend, we only
want to do compilations that are likely to find bugs.
Compiling with the BER backend after having compiled for the DER
backend is very unlikely to detect any bugs.
Compiling for PER (as well as DER) is slightly more likely to expose
bugs, but I don't think it is worth the extra running time for the
test suite.
|
|
They use the same ASN.1 spec.
|
|
|
|
The asn1_wrapper made some sense when encode functions
could either produce a list or a binary, depending on the
backend. Now encode functions always produce a binary.
To improve readbility of the test suites, eliminate the asn1_wrapper
functions by replacing them with calls to one of the roundtrip
functions in asn1_test_lib. When it is not possible to use
the roundtrip functions, call the module in question directly.
While at it, also remove ?line macros that are near to the
touched code and use asn1_test_lib:hex_to_bin/1 instead of
home-brewn hex conversion routines.
|
|
Test ChoOptional and ChoOptionalImplicitTag with the same test code
and data.
|
|
Even if the roundtrip functions are very simply, putting them here
makes it possible to change its behavior in one place (e.g. if we
are to change encode and decode not to wrap the result in a ok tuple
in some future release).
|
|
The generated Emakefile was not copied when releasing the test
suites, which meant that the suites were compiled with default
options (without the 'warnings_as_errors' option in the generated
Emakefile).
While at it, eliminate left-over dependecies.
|
|
To keep the test case clean, add an xref test case to ensure that
there are no unused functions in the any of the test case helper
modules. Eliminate 4 functions that were exported just so that
timer:tc/3 could be used (use timer:tc/1 with a fun instead).
|
|
asn1_test_lib is supposed to be a general-purpose helper module for
test cases. Move all specific test cases into asn1_SUITE.
|
|
Also remove records, defines, and request/4 that were only used
by msg11/0.
|
|
|
|
The module tests the performance of the OTP-PUB-KEY module in the
public_key application, so it is off-topic and should not be
reinstated.
|
|
A test of sub-constraints for PER/UPER was lost in commit 9ec0a0babace.
|
|
The testChoExtension module tests the same thing (and more) as
choice_extension.erl.
|
|
|
|
asn1ct:compile/2 calls c:c/2 to invoke the compiler and to load
the compiled code. That means that there is no need load the module
after having invoked the ASN.1 compiler.
To make sure that we'll notice if that behavior changes in the future,
extend the rtUI/1 test case to verify that the loaded module has
the correct encoding rule (if asn1ct:compile/2 would fail to reload
the module, the previous encoding rule would be returned).
While at it, it also makes sense to test calling M:bit_string_format/0
to ensure that it continues working.
|
|
|
|
By combining most tests that use External.asn,
we will only need to compile that spec once instead of 11 times.
While combining the test cases, make sure to remove the redundant code
in testPrimExternal/1 that tests primitive strings in exactly the same
way as testPrimString/1. Removing the redundant code shaves off a few
seconds of testing time.
Keep testSeqExtension/1 as a separate test case, since it is a
complicated test case that does hairy stuff to the source files.
|
|
Cleanliness.
|
|
Apart from cleanliness, the test suite runs many tests cases in
parallel, so it never hurts to reduce the memory pressure.
|
|
It seems that the original purpose is to test encoding by
directly calling the module (as opposed to calling indirectly
using asn1rt). That is tested in many other test cases (such
as testPrimStrings); thus this test case no longer serves any
useful purpose.
|
|
The per_GeneralString/1 test case compiles MULTIMEDIA-SYSTEM-CONTROL
and then does a single decoding. Save some compilation time by folding
the test into the h323test/1 test case.
|
|
|
|
The PER back-end no longer use a driver (or even a NIF),
and the test case would not fail if it didn't work because the
spawned processed were not linked.
|
|
The R16B02 release
Conflicts:
lib/sasl/vsn.mk
|
|
|
|
|
|
* kenneth/doc_to_dtd/OTP-11193:
Corrections so that the documentation confirms to the DTD
Minor correction of xml structure to conform to the DTD
|
|
* maint: (26 commits)
genop.tab: Add documentation for many BEAM instructions
asn1ct_constucted_per: Directly call asn1ct_gen_per
Clean up handling of .asn1db files
PER, UPER: Fix encoding/decoding of open types greater than 16K
PER, UPER: Optimize table constraints
PER, UPER: Optimize encoding using an intermediate format
Refactor decoding of components of SEQUENCE OF / SET OF
PER,UPER: Get rid of unused 'telltype' argument in decoding functions
Optimize the generated encode/2 function
UPER: Optimize complete/1
Clean up checking of objects
Improve tests of deep table constraints
BER: Handle multiple optional SEQUENCE fields with table constraints
Test OPTIONAL and DEFAULT for open types
PER/UPER: Fix encoding of an object set with multiple inlined constructs
Remove broken support for multiple UNIQUE
Extend the test for parameterized information objects
asn1_SUITE: Remove off-topic (and slow) smp/1 test case
SeqOf: Add more tricky SEQUENCE OF tests
Clean up handling of extension addition groups
...
|
|
|
|
There is (differenct) code for reading .asn1db files both in
asn1ct and asn1_db. Consolidate the reading into one routine
in asn1db.
Another problem is that the encoding rule that the .asn1db
file was created for is not in the .asn1db, but only in the
generated Erlang module. It is much easier and safer to put
the encoding rule in the .asn1db file itself. We will also
put the version number of the asn1 application into the file,
to ensure that we don't use an old .asn1db file that could
potentially be incompatible.
|
|
|
|
The generated code for table constraints has several problems:
* For each object set, a function for getting an encoding or decoding
fun is generated, regardless of whether it is actually used. In many
specifications, the object set actually used is the union of several
other object sets. That means that the code can become a lot bulkier
than it would need to be.
* The funs are not necessary. The funs just add to the code bloat
and generate more unnecessary garbage at run-time. Also, one of
the arguments of the fun is the name of the field in the class which
is known at compile-time, and the fun for decoding has unused arguments.
How to fix the problems:
At each call site where an open type should be encoded/decoded, call a
specific generated function specialized for the actual object set and
the name of the field in the class. When generating the specialized
functions, make sure that we re-use a previously generated function if
possible.
|
|
There are some minor incompatibilities for BIT STRING:
{bit,Position} is now only only supported for a named
BIT STRING type.
Values longer than the maximum size for the BIT STRING type
would be truncated silently - they now cause an exception.
|
|
As a preparation for rewriting handling of table constraints,
we must make sure that code for decoding a SEQUENCE OF / SET OF
can be be contained in a single clause of a function; thus, we
must not output the helper function for decoding of each component
directly following the code that follows it. Use asn1ct_func:call_gen/3
to delay outputting the helper function.
|
|
|
|
Use 'try' instead of 'catch', and don't match anything that
cannot actually be returned from the generated encoding code.
|
|
|
|
|
|
|
|
|
|
|
|
Also extend the test suite with more tests of inlined constructs
in object sets.
|
|
According to the ASN.1 standard, having multiple UNIQUE in class
is allowed. For example:
C ::= CLASS {
&id1 INTEGER UNIQUE,
&id2 INTEGER UNIQUE
}
In practice, no one uses multiple UNIQUE.
The ASN.1 compiler will crash if a class with multiple UNIQUE
is used, but the backends have half-hearted support for multiple
UNIQUE in that they generate helper functions similar to:
getenc_OBJECT_SET(id1, 42) ->
fun enc_XXX/3;
...
Since we have no plans to implement support for multiple UNIQUE
(no one seems to have missed it), simplify the helper functions
like this:
getenc_OBJECT_SET(42) ->
fun enc_XXX/3;
...
|
|
|
|
The smp1/1 test case seems test how well the SMP emulator can
parallelize tasks, not any functionality in the asn1 application
that is not tested in other tests.
|