diff options
Diffstat (limited to 'lib/erl_interface')
264 files changed, 2689 insertions, 3091 deletions
diff --git a/lib/erl_interface/Makefile b/lib/erl_interface/Makefile index 56edcdfabc..9471b0df18 100644 --- a/lib/erl_interface/Makefile +++ b/lib/erl_interface/Makefile @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 1996-2009. All Rights Reserved. +# Copyright Ericsson AB 1996-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/configure.in b/lib/erl_interface/configure.in index 7a3b5ce378..0a8fbf513c 100644 --- a/lib/erl_interface/configure.in +++ b/lib/erl_interface/configure.in @@ -1,7 +1,7 @@ # -*- Autoconf -*- # %CopyrightBegin% # -# Copyright Ericsson AB 2000-2012. All Rights Reserved. +# Copyright Ericsson AB 2000-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -100,7 +100,9 @@ AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(void *) AC_CHECK_SIZEOF(long long) -if test $ac_cv_sizeof_void_p = 8; then +dnl We set EI_64BIT mode when long is 8 bytes, this makes things +dnl work on windows and unix correctly +if test $ac_cv_sizeof_long = 8; then CFLAGS="$CFLAGS -DEI_64BIT" fi diff --git a/lib/erl_interface/doc/src/Makefile b/lib/erl_interface/doc/src/Makefile index 53dadec5a3..204a6051b2 100644 --- a/lib/erl_interface/doc/src/Makefile +++ b/lib/erl_interface/doc/src/Makefile @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 1998-2012. All Rights Reserved. +# Copyright Ericsson AB 1998-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/doc/src/book.xml b/lib/erl_interface/doc/src/book.xml index cf7323f3a2..c9194d96ff 100644 --- a/lib/erl_interface/doc/src/book.xml +++ b/lib/erl_interface/doc/src/book.xml @@ -4,7 +4,7 @@ <book xmlns:xi="http://www.w3.org/2001/XInclude"> <header titlestyle="normal"> <copyright> - <year>1998</year><year>2013</year> + <year>1998</year><year>2016</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> diff --git a/lib/erl_interface/doc/src/ei.xml b/lib/erl_interface/doc/src/ei.xml index 8ef433d10f..1177954eb9 100644 --- a/lib/erl_interface/doc/src/ei.xml +++ b/lib/erl_interface/doc/src/ei.xml @@ -4,7 +4,7 @@ <cref> <header> <copyright> - <year>2001</year><year>2014</year> + <year>2001</year><year>2016</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> diff --git a/lib/erl_interface/doc/src/ei_connect.xml b/lib/erl_interface/doc/src/ei_connect.xml index a06013ed6a..516357b6a3 100644 --- a/lib/erl_interface/doc/src/ei_connect.xml +++ b/lib/erl_interface/doc/src/ei_connect.xml @@ -4,7 +4,7 @@ <cref> <header> <copyright> - <year>2001</year><year>2013</year> + <year>2001</year><year>2016</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> diff --git a/lib/erl_interface/doc/src/ei_users_guide.xml b/lib/erl_interface/doc/src/ei_users_guide.xml index cdf3a912bb..4b9809aee4 100644 --- a/lib/erl_interface/doc/src/ei_users_guide.xml +++ b/lib/erl_interface/doc/src/ei_users_guide.xml @@ -4,7 +4,7 @@ <chapter> <header> <copyright> - <year>2002</year><year>2013</year> + <year>2002</year><year>2016</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> diff --git a/lib/erl_interface/doc/src/erl_call.xml b/lib/erl_interface/doc/src/erl_call.xml index e982bf89e1..46015621ac 100644 --- a/lib/erl_interface/doc/src/erl_call.xml +++ b/lib/erl_interface/doc/src/erl_call.xml @@ -4,7 +4,7 @@ <comref> <header> <copyright> - <year>1996</year><year>2013</year> + <year>1996</year><year>2016</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> diff --git a/lib/erl_interface/doc/src/erl_connect.xml b/lib/erl_interface/doc/src/erl_connect.xml index 86b2648918..0fad98cd17 100644 --- a/lib/erl_interface/doc/src/erl_connect.xml +++ b/lib/erl_interface/doc/src/erl_connect.xml @@ -4,7 +4,7 @@ <cref> <header> <copyright> - <year>1996</year><year>2013</year> + <year>1996</year><year>2016</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> diff --git a/lib/erl_interface/doc/src/erl_error.xml b/lib/erl_interface/doc/src/erl_error.xml index 8b8c2e95d8..abe84780e1 100644 --- a/lib/erl_interface/doc/src/erl_error.xml +++ b/lib/erl_interface/doc/src/erl_error.xml @@ -4,7 +4,7 @@ <cref> <header> <copyright> - <year>1996</year><year>2013</year> + <year>1996</year><year>2016</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> diff --git a/lib/erl_interface/doc/src/erl_eterm.xml b/lib/erl_interface/doc/src/erl_eterm.xml index 713a90a390..800f8a3207 100644 --- a/lib/erl_interface/doc/src/erl_eterm.xml +++ b/lib/erl_interface/doc/src/erl_eterm.xml @@ -4,7 +4,7 @@ <cref> <header> <copyright> - <year>1996</year><year>2013</year> + <year>1996</year><year>2016</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> diff --git a/lib/erl_interface/doc/src/erl_format.xml b/lib/erl_interface/doc/src/erl_format.xml index 2918cb8b84..6e3ac4f0c9 100644 --- a/lib/erl_interface/doc/src/erl_format.xml +++ b/lib/erl_interface/doc/src/erl_format.xml @@ -4,7 +4,7 @@ <cref> <header> <copyright> - <year>1996</year><year>2013</year> + <year>1996</year><year>2016</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> diff --git a/lib/erl_interface/doc/src/erl_global.xml b/lib/erl_interface/doc/src/erl_global.xml index ec5e51a0b6..d6bfffc69d 100644 --- a/lib/erl_interface/doc/src/erl_global.xml +++ b/lib/erl_interface/doc/src/erl_global.xml @@ -4,7 +4,7 @@ <cref> <header> <copyright> - <year>1998</year><year>2013</year> + <year>1998</year><year>2016</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> diff --git a/lib/erl_interface/doc/src/erl_interface.xml b/lib/erl_interface/doc/src/erl_interface.xml index 3a01cba74e..a9d421bbeb 100644 --- a/lib/erl_interface/doc/src/erl_interface.xml +++ b/lib/erl_interface/doc/src/erl_interface.xml @@ -4,7 +4,7 @@ <chapter> <header> <copyright> - <year>1996</year><year>2013</year> + <year>1996</year><year>2016</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> diff --git a/lib/erl_interface/doc/src/erl_malloc.xml b/lib/erl_interface/doc/src/erl_malloc.xml index 0a9830f612..799c903b1a 100644 --- a/lib/erl_interface/doc/src/erl_malloc.xml +++ b/lib/erl_interface/doc/src/erl_malloc.xml @@ -4,7 +4,7 @@ <cref> <header> <copyright> - <year>1996</year><year>2013</year> + <year>1996</year><year>2016</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> diff --git a/lib/erl_interface/doc/src/erl_marshal.xml b/lib/erl_interface/doc/src/erl_marshal.xml index 9b9622dcc2..7c56089016 100644 --- a/lib/erl_interface/doc/src/erl_marshal.xml +++ b/lib/erl_interface/doc/src/erl_marshal.xml @@ -4,7 +4,7 @@ <cref> <header> <copyright> - <year>1996</year><year>2013</year> + <year>1996</year><year>2016</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> diff --git a/lib/erl_interface/doc/src/notes.xml b/lib/erl_interface/doc/src/notes.xml index 37266d9354..9420beaf43 100644 --- a/lib/erl_interface/doc/src/notes.xml +++ b/lib/erl_interface/doc/src/notes.xml @@ -4,7 +4,7 @@ <chapter> <header> <copyright> - <year>2004</year><year>2013</year> + <year>2004</year><year>2016</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> diff --git a/lib/erl_interface/doc/src/notes_history.xml b/lib/erl_interface/doc/src/notes_history.xml index f3cf8d01ae..c8cdc8832d 100644 --- a/lib/erl_interface/doc/src/notes_history.xml +++ b/lib/erl_interface/doc/src/notes_history.xml @@ -4,7 +4,7 @@ <chapter> <header> <copyright> - <year>2006</year><year>2013</year> + <year>2006</year><year>2016</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> diff --git a/lib/erl_interface/doc/src/part.xml b/lib/erl_interface/doc/src/part.xml index ec598f0339..d044e2b981 100644 --- a/lib/erl_interface/doc/src/part.xml +++ b/lib/erl_interface/doc/src/part.xml @@ -4,7 +4,7 @@ <part xmlns:xi="http://www.w3.org/2001/XInclude"> <header> <copyright> - <year>2002</year><year>2013</year> + <year>2002</year><year>2016</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> diff --git a/lib/erl_interface/doc/src/part_erl_interface.xml b/lib/erl_interface/doc/src/part_erl_interface.xml index 08225133e0..2abe7ecd60 100644 --- a/lib/erl_interface/doc/src/part_erl_interface.xml +++ b/lib/erl_interface/doc/src/part_erl_interface.xml @@ -4,7 +4,7 @@ <part xmlns:xi="http://www.w3.org/2001/XInclude"> <header> <copyright> - <year>1996</year><year>2013</year> + <year>1996</year><year>2016</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> diff --git a/lib/erl_interface/doc/src/part_notes.xml b/lib/erl_interface/doc/src/part_notes.xml index f2d5bd962b..facdf821ee 100644 --- a/lib/erl_interface/doc/src/part_notes.xml +++ b/lib/erl_interface/doc/src/part_notes.xml @@ -4,7 +4,7 @@ <part xmlns:xi="http://www.w3.org/2001/XInclude"> <header> <copyright> - <year>2004</year><year>2013</year> + <year>2004</year><year>2016</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> diff --git a/lib/erl_interface/doc/src/part_notes_history.xml b/lib/erl_interface/doc/src/part_notes_history.xml index 7cf1b25f54..401fea4dd4 100644 --- a/lib/erl_interface/doc/src/part_notes_history.xml +++ b/lib/erl_interface/doc/src/part_notes_history.xml @@ -4,7 +4,7 @@ <part xmlns:xi="http://www.w3.org/2001/XInclude"> <header> <copyright> - <year>2006</year><year>2013</year> + <year>2006</year><year>2016</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> diff --git a/lib/erl_interface/doc/src/ref_man.xml b/lib/erl_interface/doc/src/ref_man.xml index 2e115dba5b..0cf060829b 100644 --- a/lib/erl_interface/doc/src/ref_man.xml +++ b/lib/erl_interface/doc/src/ref_man.xml @@ -4,7 +4,7 @@ <application xmlns:xi="http://www.w3.org/2001/XInclude"> <header> <copyright> - <year>1998</year><year>2013</year> + <year>1998</year><year>2016</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> diff --git a/lib/erl_interface/doc/src/ref_man_ei.xml b/lib/erl_interface/doc/src/ref_man_ei.xml index bbb2b402cd..d24828c394 100644 --- a/lib/erl_interface/doc/src/ref_man_ei.xml +++ b/lib/erl_interface/doc/src/ref_man_ei.xml @@ -4,7 +4,7 @@ <application xmlns:xi="http://www.w3.org/2001/XInclude"> <header> <copyright> - <year>2002</year><year>2013</year> + <year>2002</year><year>2016</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> diff --git a/lib/erl_interface/doc/src/ref_man_erl_interface.xml b/lib/erl_interface/doc/src/ref_man_erl_interface.xml index c5836c11c3..fb39c5a7e4 100644 --- a/lib/erl_interface/doc/src/ref_man_erl_interface.xml +++ b/lib/erl_interface/doc/src/ref_man_erl_interface.xml @@ -4,7 +4,7 @@ <application xmlns:xi="http://www.w3.org/2001/XInclude"> <header> <copyright> - <year>1996</year><year>2013</year> + <year>1996</year><year>2016</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> diff --git a/lib/erl_interface/doc/src/registry.xml b/lib/erl_interface/doc/src/registry.xml index cd7e5d976d..285a2402b8 100644 --- a/lib/erl_interface/doc/src/registry.xml +++ b/lib/erl_interface/doc/src/registry.xml @@ -4,7 +4,7 @@ <cref> <header> <copyright> - <year>1998</year><year>2013</year> + <year>1998</year><year>2016</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> diff --git a/lib/erl_interface/include/ei.h b/lib/erl_interface/include/ei.h index c1dbc8470d..948f89be85 100644 --- a/lib/erl_interface/include/ei.h +++ b/lib/erl_interface/include/ei.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2014. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -121,8 +121,11 @@ #define ERL_SMALL_ATOM_UTF8_EXT 'w' #define ERL_REFERENCE_EXT 'e' #define ERL_NEW_REFERENCE_EXT 'r' +#define ERL_NEWER_REFERENCE_EXT 'Z' #define ERL_PORT_EXT 'f' +#define ERL_NEW_PORT_EXT 'Y' #define ERL_PID_EXT 'g' +#define ERL_NEW_PID_EXT 'X' #define ERL_SMALL_TUPLE_EXT 'h' #define ERL_LARGE_TUPLE_EXT 'i' #define ERL_NIL_EXT 'j' diff --git a/lib/erl_interface/include/ei_connect.h b/lib/erl_interface/include/ei_connect.h index c8eeba7ae0..825fee0165 100644 --- a/lib/erl_interface/include/ei_connect.h +++ b/lib/erl_interface/include/ei_connect.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2003-2009. All Rights Reserved. + * Copyright Ericsson AB 2003-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/include/eicode.h b/lib/erl_interface/include/eicode.h index 1077528d3c..efba630d13 100644 --- a/lib/erl_interface/include/eicode.h +++ b/lib/erl_interface/include/eicode.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2003-2009. All Rights Reserved. + * Copyright Ericsson AB 2003-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/include/erl_interface.h b/lib/erl_interface/include/erl_interface.h index 3f9804da7d..c22f21af2b 100644 --- a/lib/erl_interface/include/erl_interface.h +++ b/lib/erl_interface/include/erl_interface.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1996-2013. All Rights Reserved. + * Copyright Ericsson AB 1996-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -211,14 +211,14 @@ typedef struct { Erl_Atom_data node; unsigned int number; unsigned int serial; - unsigned char creation; + unsigned int creation; } Erl_Pid; typedef struct { Erl_Header h; Erl_Atom_data node; unsigned int number; - unsigned char creation; + unsigned int creation; } Erl_Port; typedef struct { @@ -226,7 +226,7 @@ typedef struct { Erl_Atom_data node; int len; unsigned int n[3]; - unsigned char creation; + unsigned int creation; } Erl_Ref; typedef struct { diff --git a/lib/erl_interface/src/Makefile b/lib/erl_interface/src/Makefile index 868407a23f..31f34d4bba 100644 --- a/lib/erl_interface/src/Makefile +++ b/lib/erl_interface/src/Makefile @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 1996-2013. All Rights Reserved. +# Copyright Ericsson AB 1996-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/Makefile.in b/lib/erl_interface/src/Makefile.in index 777d709b1e..4f393e952c 100644 --- a/lib/erl_interface/src/Makefile.in +++ b/lib/erl_interface/src/Makefile.in @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 1997-2012. All Rights Reserved. +# Copyright Ericsson AB 1997-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -126,11 +126,7 @@ else WARNFLAGS = @WFLAGS@ endif -ifneq ($(findstring ose,$(TARGET)),ose) CFLAGS = @LIB_CFLAGS@ $(WARNFLAGS) $(INCFLAGS) $(TYPE_FLAGS) -else -CFLAGS = @CFLAGS@ $(INCFLAGS) -endif PROG_CFLAGS = @CFLAGS@ $(WARNFLAGS) $(INCFLAGS) $(TYPE_FLAGS) -Ilegacy ifeq ($(findstring vxworks,$(TARGET)),vxworks) @@ -210,12 +206,8 @@ MDD_ERLLIB = $(OBJDIR)/$(LIBPRE)erl_interface_mdd$(LIBEXT) # Specify targets to build ########################################################################### -ifneq ($(findstring ose,$(TARGET)),ose) EXE_TARGETS = \ $(ERL_CALL) -else -EXE_TARGETS = -endif ifeq ($(USING_VC),yes) @@ -480,44 +472,6 @@ ERLSOURCES = \ SOURCES = $(EISOURCES) $(ERLSOURCES) -OSE_EISOURCES = \ - $(DECODESRC) \ - $(ENCODESRC) \ - misc/ei_decode_term.c \ - misc/ei_format.c \ - misc/ei_locking.c \ - misc/ei_malloc.c \ - misc/ei_printterm.c \ - misc/ei_pthreads.c \ - misc/ei_trace.c \ - misc/ei_x_encode.c \ - misc/eimd5.c \ - misc/get_type.c \ - misc/show_msg.c \ - misc/ei_compat.c \ - registry/hash_dohash.c \ - registry/hash_foreach.c \ - registry/hash_freetab.c \ - registry/hash_insert.c \ - registry/hash_isprime.c \ - registry/hash_lookup.c \ - registry/hash_newtab.c \ - registry/hash_remove.c \ - registry/hash_resize.c \ - registry/hash_rlookup.c - -OSE_ERLSOURCES = \ - legacy/decode_term.c \ - legacy/encode_term.c \ - legacy/erl_error.c \ - legacy/erl_eterm.c \ - legacy/erl_fix_alloc.c \ - legacy/erl_format.c \ - legacy/erl_malloc.c \ - legacy/erl_marshal.c - -OSE_SOURCES = $(OSE_EISOURCES) $(OSE_ERLSOURCES) - NEVERUSED = \ whereis.c \ ei_send.c \ @@ -532,13 +486,8 @@ ERLCALL = \ # Note that encode/decode_term.c defines ei functions that is # located in the erl_interface library, not ei library. -ifneq ($(findstring ose,$(TARGET)),ose) ST_EIOBJECTS = $(addprefix $(ST_OBJDIR)/,$(notdir $(EISOURCES:.c=.o))) ST_ERLOBJECTS = $(addprefix $(ST_OBJDIR)/,$(notdir $(ERLSOURCES:.c=.o))) -else -ST_EIOBJECTS = $(addprefix $(ST_OBJDIR)/,$(notdir $(OSE_EISOURCES:.c=.o))) -ST_ERLOBJECTS = $(addprefix $(ST_OBJDIR)/,$(notdir $(OSE_ERLSOURCES:.c=.o))) -endif MT_EIOBJECTS = $(addprefix $(MT_OBJDIR)/,$(notdir $(EISOURCES:.c=.o))) MT_ERLOBJECTS = $(addprefix $(MT_OBJDIR)/,$(notdir $(ERLSOURCES:.c=.o))) MD_EIOBJECTS = $(addprefix $(MD_OBJDIR)/,$(notdir $(EISOURCES:.c=.o))) @@ -587,14 +536,6 @@ $(TARGET)/config.h: $(V_at)echo "#define HAVE_SOCKLEN_T 1" >> $@ endif -ifeq ($(findstring ose,$(TARGET)),ose) -$(TARGET)/config.h: - $(gen_verbose) - $(V_at)echo "/* Generated by Makefile */" > $@ - $(V_at)echo "#define HAVE_STRERROR 1" >> $@ - $(V_at)echo "#define HAVE_SOCKLEN_T 1" >> $@ -endif - ########################################################################### # Default rules, normal and threaded ########################################################################### @@ -719,9 +660,6 @@ $(ST_OBJDIR)/erl_start.o: prog/erl_start.c $(V_CC) $(CFLAGS) -c $< -o $@ else -ifeq ($(findstring ose,$(TARGET)),ose) -$(ERL_CALL): -else ifdef THR_DEFS $(ERL_CALL): $(ERLCALL) ../include/ei.h $(MT_EILIB) $(ld_verbose)$(PURIFY) $(CC) $(PROG_CFLAGS) $(THR_DEFS) $(LDFLAGS) -o $@ $(ERLCALL) \ @@ -733,7 +671,6 @@ $(ERL_CALL): $(ERLCALL) ../include/ei.h $(ST_EILIB) endif endif endif -endif ########################################################################### # Fake application targets used to test header files and linking diff --git a/lib/erl_interface/src/connect/ei_connect.c b/lib/erl_interface/src/connect/ei_connect.c index 7b1b2810bb..6dc51adee1 100644 --- a/lib/erl_interface/src/connect/ei_connect.c +++ b/lib/erl_interface/src/connect/ei_connect.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2000-2014. All Rights Reserved. + * Copyright Ericsson AB 2000-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -1342,7 +1342,8 @@ static int send_name_or_challenge(int fd, char *nodename, | DFLAG_NEW_FLOATS | DFLAG_SMALL_ATOM_TAGS | DFLAG_UTF8_ATOMS - | DFLAG_MAP_TAG)); + | DFLAG_MAP_TAG + | DFLAG_BIG_CREATION)); if (f_chall) put32be(s, challenge); memcpy(s, nodename, strlen(nodename)); diff --git a/lib/erl_interface/src/connect/ei_connect_int.h b/lib/erl_interface/src/connect/ei_connect_int.h index efb6719a1d..0bcccaa84b 100644 --- a/lib/erl_interface/src/connect/ei_connect_int.h +++ b/lib/erl_interface/src/connect/ei_connect_int.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2001-2014. All Rights Reserved. + * Copyright Ericsson AB 2001-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -106,6 +106,7 @@ extern int h_errno; #define DFLAG_SMALL_ATOM_TAGS 0x4000 #define DFLAG_UTF8_ATOMS 0x10000 #define DFLAG_MAP_TAG 0x20000 +#define DFLAG_BIG_CREATION 0x40000 ei_cnode *ei_fd_to_cnode(int fd); int ei_distversion(int fd); diff --git a/lib/erl_interface/src/connect/ei_resolve.c b/lib/erl_interface/src/connect/ei_resolve.c index 414cb8be3e..fd0c659373 100644 --- a/lib/erl_interface/src/connect/ei_resolve.c +++ b/lib/erl_interface/src/connect/ei_resolve.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1997-2013. All Rights Reserved. + * Copyright Ericsson AB 1997-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/connect/ei_resolve.h b/lib/erl_interface/src/connect/ei_resolve.h index 71ebeab20b..10a49ffbc6 100644 --- a/lib/erl_interface/src/connect/ei_resolve.h +++ b/lib/erl_interface/src/connect/ei_resolve.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1997-2009. All Rights Reserved. + * Copyright Ericsson AB 1997-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/connect/eirecv.c b/lib/erl_interface/src/connect/eirecv.c index b036c8969e..7b9dbfc387 100644 --- a/lib/erl_interface/src/connect/eirecv.c +++ b/lib/erl_interface/src/connect/eirecv.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2013. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/connect/eirecv.h b/lib/erl_interface/src/connect/eirecv.h index d56f36b286..bd40061c07 100644 --- a/lib/erl_interface/src/connect/eirecv.h +++ b/lib/erl_interface/src/connect/eirecv.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2002-2009. All Rights Reserved. + * Copyright Ericsson AB 2002-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/connect/eisend.h b/lib/erl_interface/src/connect/eisend.h index 6762c4cf40..d555208ed0 100644 --- a/lib/erl_interface/src/connect/eisend.h +++ b/lib/erl_interface/src/connect/eisend.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/connect/send.c b/lib/erl_interface/src/connect/send.c index 826bc1f22a..37d7db6d68 100644 --- a/lib/erl_interface/src/connect/send.c +++ b/lib/erl_interface/src/connect/send.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2011. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/connect/send_exit.c b/lib/erl_interface/src/connect/send_exit.c index f71acfa155..2e298e3221 100644 --- a/lib/erl_interface/src/connect/send_exit.c +++ b/lib/erl_interface/src/connect/send_exit.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2011. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/connect/send_reg.c b/lib/erl_interface/src/connect/send_reg.c index dac3877d2a..62478f042d 100644 --- a/lib/erl_interface/src/connect/send_reg.c +++ b/lib/erl_interface/src/connect/send_reg.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2011. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/decode/decode_atom.c b/lib/erl_interface/src/decode/decode_atom.c index df1e5b9350..b3bba82434 100644 --- a/lib/erl_interface/src/decode/decode_atom.c +++ b/lib/erl_interface/src/decode/decode_atom.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2013. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/decode/decode_big.c b/lib/erl_interface/src/decode/decode_big.c index 5739d159bf..cbbbd3f0b7 100644 --- a/lib/erl_interface/src/decode/decode_big.c +++ b/lib/erl_interface/src/decode/decode_big.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2002-2011. All Rights Reserved. + * Copyright Ericsson AB 2002-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/decode/decode_bignum.c b/lib/erl_interface/src/decode/decode_bignum.c index 9d09aefd76..70a86e29c9 100644 --- a/lib/erl_interface/src/decode/decode_bignum.c +++ b/lib/erl_interface/src/decode/decode_bignum.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2002-2009. All Rights Reserved. + * Copyright Ericsson AB 2002-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/decode/decode_binary.c b/lib/erl_interface/src/decode/decode_binary.c index 66014181b5..5b8d234984 100644 --- a/lib/erl_interface/src/decode/decode_binary.c +++ b/lib/erl_interface/src/decode/decode_binary.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/decode/decode_boolean.c b/lib/erl_interface/src/decode/decode_boolean.c index edaf1486d4..23cfd16f77 100644 --- a/lib/erl_interface/src/decode/decode_boolean.c +++ b/lib/erl_interface/src/decode/decode_boolean.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2013. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/decode/decode_char.c b/lib/erl_interface/src/decode/decode_char.c index 0290c71988..babf34c90c 100644 --- a/lib/erl_interface/src/decode/decode_char.c +++ b/lib/erl_interface/src/decode/decode_char.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/decode/decode_double.c b/lib/erl_interface/src/decode/decode_double.c index 413d575b1a..1ce8b2a417 100644 --- a/lib/erl_interface/src/decode/decode_double.c +++ b/lib/erl_interface/src/decode/decode_double.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2010. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/decode/decode_fun.c b/lib/erl_interface/src/decode/decode_fun.c index c2e321c067..f944c028af 100644 --- a/lib/erl_interface/src/decode/decode_fun.c +++ b/lib/erl_interface/src/decode/decode_fun.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2001-2013. All Rights Reserved. + * Copyright Ericsson AB 2001-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/decode/decode_intlist.c b/lib/erl_interface/src/decode/decode_intlist.c index 68f38075e2..494371d778 100644 --- a/lib/erl_interface/src/decode/decode_intlist.c +++ b/lib/erl_interface/src/decode/decode_intlist.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/decode/decode_list_header.c b/lib/erl_interface/src/decode/decode_list_header.c index e198f52d52..4c6ce3859e 100644 --- a/lib/erl_interface/src/decode/decode_list_header.c +++ b/lib/erl_interface/src/decode/decode_list_header.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/decode/decode_long.c b/lib/erl_interface/src/decode/decode_long.c index 15bfb28cf0..b5f36adbb6 100644 --- a/lib/erl_interface/src/decode/decode_long.c +++ b/lib/erl_interface/src/decode/decode_long.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/decode/decode_longlong.c b/lib/erl_interface/src/decode/decode_longlong.c index 22f2a63d2e..e052cb7164 100644 --- a/lib/erl_interface/src/decode/decode_longlong.c +++ b/lib/erl_interface/src/decode/decode_longlong.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2002-2009. All Rights Reserved. + * Copyright Ericsson AB 2002-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/decode/decode_pid.c b/lib/erl_interface/src/decode/decode_pid.c index 7fbb818b31..e1055aa5c9 100644 --- a/lib/erl_interface/src/decode/decode_pid.c +++ b/lib/erl_interface/src/decode/decode_pid.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2013. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,18 +27,22 @@ int ei_decode_pid(const char *buf, int *index, erlang_pid *p) { const char *s = buf + *index; const char *s0 = s; + const char tag = get8(s); - if (get8(s) != ERL_PID_EXT) return -1; + if (tag != ERL_PID_EXT && tag != ERL_NEW_PID_EXT) return -1; if (p) { if (get_atom(&s, p->node, NULL) < 0) return -1; p->num = get32be(s) & 0x7fff; /* 15 bits */ p->serial = get32be(s) & 0x1fff; /* 13 bits */ - p->creation = get8(s) & 0x03; /* 2 bits */ + if (tag == ERL_PID_EXT) + p->creation = get8(s) & 0x03; /* 2 bits */ + else + p->creation = get32be(s); /* 32 bits */ } else { if (get_atom(&s, NULL, NULL) < 0) return -1; - s+= 9; + s+= (tag == ERL_PID_EXT ? 9 : 12); } *index += s-s0; diff --git a/lib/erl_interface/src/decode/decode_port.c b/lib/erl_interface/src/decode/decode_port.c index e039b5b845..337648d803 100644 --- a/lib/erl_interface/src/decode/decode_port.c +++ b/lib/erl_interface/src/decode/decode_port.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2013. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,17 +26,21 @@ int ei_decode_port(const char *buf, int *index, erlang_port *p) { const char *s = buf + *index; const char *s0 = s; + const char tag = get8(s); - if (get8(s) != ERL_PORT_EXT) return -1; + if (tag != ERL_PORT_EXT && tag != ERL_NEW_PORT_EXT) return -1; if (p) { if (get_atom(&s, p->node, NULL) < 0) return -1; p->id = get32be(s) & 0x0fffffff /* 28 bits */; - p->creation = get8(s) & 0x03; + if (tag == ERL_PORT_EXT) + p->creation = get8(s) & 0x03; + else + p->creation = get32be(s); } else { if (get_atom(&s, NULL, NULL) < 0) return -1; - s += 5; + s += (tag == ERL_PORT_EXT ? 5 : 8); } *index += s-s0; diff --git a/lib/erl_interface/src/decode/decode_ref.c b/lib/erl_interface/src/decode/decode_ref.c index a6b87e5a21..c9b38c1c3b 100644 --- a/lib/erl_interface/src/decode/decode_ref.c +++ b/lib/erl_interface/src/decode/decode_ref.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2013. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,8 +28,9 @@ int ei_decode_ref(const char *buf, int *index, erlang_ref *p) const char *s = buf + *index; const char *s0 = s; int count, i; + const char tag = get8(s); - switch (get8(s)) { + switch (tag) { case ERL_REFERENCE_EXT: if (p) { if (get_atom(&s, p->node, NULL) < 0) return -1; @@ -47,18 +48,23 @@ int ei_decode_ref(const char *buf, int *index, erlang_ref *p) return 0; break; - case ERL_NEW_REFERENCE_EXT: + case ERL_NEW_REFERENCE_EXT: + case ERL_NEWER_REFERENCE_EXT: + /* first the integer count */ count = get16be(s); if (p) { p->len = count; if (get_atom(&s, p->node, NULL) < 0) return -1; - p->creation = get8(s) & 0x03; + if (tag == ERL_NEW_REFERENCE_EXT) + p->creation = get8(s) & 0x03; + else + p->creation = get32be(s); } else { if (get_atom(&s, NULL, NULL) < 0) return -1; - s += 1; + s += (tag == ERL_NEW_REFERENCE_EXT ? 1 : 4); } /* finally the id integers */ diff --git a/lib/erl_interface/src/decode/decode_skip.c b/lib/erl_interface/src/decode/decode_skip.c index d49ae0007f..0db315f09b 100644 --- a/lib/erl_interface/src/decode/decode_skip.c +++ b/lib/erl_interface/src/decode/decode_skip.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2002-2014. All Rights Reserved. + * Copyright Ericsson AB 2002-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -35,12 +35,15 @@ int ei_skip_term(const char* buf, int* index) NULL, NULL) < 0) return -1; break; case ERL_PID_EXT: + case ERL_NEW_PID_EXT: if (ei_decode_pid(buf, index, NULL) < 0) return -1; break; case ERL_PORT_EXT: + case ERL_NEW_PORT_EXT: if (ei_decode_port(buf, index, NULL) < 0) return -1; break; case ERL_NEW_REFERENCE_EXT: + case ERL_NEWER_REFERENCE_EXT: case ERL_REFERENCE_EXT: if (ei_decode_ref(buf, index, NULL) < 0) return -1; break; diff --git a/lib/erl_interface/src/decode/decode_skip.h b/lib/erl_interface/src/decode/decode_skip.h index a0934fdf35..be497e8601 100644 --- a/lib/erl_interface/src/decode/decode_skip.h +++ b/lib/erl_interface/src/decode/decode_skip.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2002-2009. All Rights Reserved. + * Copyright Ericsson AB 2002-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/decode/decode_string.c b/lib/erl_interface/src/decode/decode_string.c index 98b7384dc5..3fe4fdd02d 100644 --- a/lib/erl_interface/src/decode/decode_string.c +++ b/lib/erl_interface/src/decode/decode_string.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/decode/decode_trace.c b/lib/erl_interface/src/decode/decode_trace.c index bcc53bce96..738d6f0885 100644 --- a/lib/erl_interface/src/decode/decode_trace.c +++ b/lib/erl_interface/src/decode/decode_trace.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2013. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/decode/decode_tuple_header.c b/lib/erl_interface/src/decode/decode_tuple_header.c index ea60a03ddc..4507edbc8e 100644 --- a/lib/erl_interface/src/decode/decode_tuple_header.c +++ b/lib/erl_interface/src/decode/decode_tuple_header.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2014. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/decode/decode_ulong.c b/lib/erl_interface/src/decode/decode_ulong.c index dbd86f5022..8675ae257f 100644 --- a/lib/erl_interface/src/decode/decode_ulong.c +++ b/lib/erl_interface/src/decode/decode_ulong.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/decode/decode_ulonglong.c b/lib/erl_interface/src/decode/decode_ulonglong.c index e579df41aa..0f0eaeb5da 100644 --- a/lib/erl_interface/src/decode/decode_ulonglong.c +++ b/lib/erl_interface/src/decode/decode_ulonglong.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2002-2009. All Rights Reserved. + * Copyright Ericsson AB 2002-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/decode/decode_version.c b/lib/erl_interface/src/decode/decode_version.c index b2146d3280..00a85bea35 100644 --- a/lib/erl_interface/src/decode/decode_version.c +++ b/lib/erl_interface/src/decode/decode_version.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/eidefs.mk.in b/lib/erl_interface/src/eidefs.mk.in index 4f6c4e5a3c..dc34ad478a 100644 --- a/lib/erl_interface/src/eidefs.mk.in +++ b/lib/erl_interface/src/eidefs.mk.in @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2004-2009. All Rights Reserved. +# Copyright Ericsson AB 2004-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/encode/eicode.h b/lib/erl_interface/src/encode/eicode.h index 351e88cf2b..1db9a0b65a 100644 --- a/lib/erl_interface/src/encode/eicode.h +++ b/lib/erl_interface/src/encode/eicode.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/encode/encode_atom.c b/lib/erl_interface/src/encode/encode_atom.c index 372122f3eb..c1817628e5 100644 --- a/lib/erl_interface/src/encode/encode_atom.c +++ b/lib/erl_interface/src/encode/encode_atom.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2013. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/encode/encode_big.c b/lib/erl_interface/src/encode/encode_big.c index f758070d8c..cf542a5557 100644 --- a/lib/erl_interface/src/encode/encode_big.c +++ b/lib/erl_interface/src/encode/encode_big.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2009. All Rights Reserved. + * Copyright Ericsson AB 2009-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/encode/encode_bignum.c b/lib/erl_interface/src/encode/encode_bignum.c index ebd1853b21..6e418df0c7 100644 --- a/lib/erl_interface/src/encode/encode_bignum.c +++ b/lib/erl_interface/src/encode/encode_bignum.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2002-2009. All Rights Reserved. + * Copyright Ericsson AB 2002-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/encode/encode_binary.c b/lib/erl_interface/src/encode/encode_binary.c index 91dab32c29..4471c51769 100644 --- a/lib/erl_interface/src/encode/encode_binary.c +++ b/lib/erl_interface/src/encode/encode_binary.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/encode/encode_boolean.c b/lib/erl_interface/src/encode/encode_boolean.c index d98cb5ad09..61e7e5e6e7 100644 --- a/lib/erl_interface/src/encode/encode_boolean.c +++ b/lib/erl_interface/src/encode/encode_boolean.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/encode/encode_char.c b/lib/erl_interface/src/encode/encode_char.c index 87fdef7bdd..fab56469aa 100644 --- a/lib/erl_interface/src/encode/encode_char.c +++ b/lib/erl_interface/src/encode/encode_char.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/encode/encode_double.c b/lib/erl_interface/src/encode/encode_double.c index 8943cefa11..cff220639a 100644 --- a/lib/erl_interface/src/encode/encode_double.c +++ b/lib/erl_interface/src/encode/encode_double.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2010. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/encode/encode_fun.c b/lib/erl_interface/src/encode/encode_fun.c index 14f66dcde1..3bfc7530d1 100644 --- a/lib/erl_interface/src/encode/encode_fun.c +++ b/lib/erl_interface/src/encode/encode_fun.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2001-2013. All Rights Reserved. + * Copyright Ericsson AB 2001-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/encode/encode_list_header.c b/lib/erl_interface/src/encode/encode_list_header.c index 0ddca107d7..409bd98ea0 100644 --- a/lib/erl_interface/src/encode/encode_list_header.c +++ b/lib/erl_interface/src/encode/encode_list_header.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/encode/encode_long.c b/lib/erl_interface/src/encode/encode_long.c index cf99a7488c..ef3b92cd9e 100644 --- a/lib/erl_interface/src/encode/encode_long.c +++ b/lib/erl_interface/src/encode/encode_long.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/encode/encode_longlong.c b/lib/erl_interface/src/encode/encode_longlong.c index fff170c32d..2a1cbedce1 100644 --- a/lib/erl_interface/src/encode/encode_longlong.c +++ b/lib/erl_interface/src/encode/encode_longlong.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2002-2009. All Rights Reserved. + * Copyright Ericsson AB 2002-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/encode/encode_pid.c b/lib/erl_interface/src/encode/encode_pid.c index 7b01b7045f..d14746b40f 100644 --- a/lib/erl_interface/src/encode/encode_pid.c +++ b/lib/erl_interface/src/encode/encode_pid.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2013. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,7 +24,8 @@ int ei_encode_pid(char *buf, int *index, const erlang_pid *p) { - char *s = buf + *index; + char* s = buf + *index; + const char tag = (p->creation > 3) ? ERL_NEW_PID_EXT : ERL_PID_EXT; ++(*index); /* skip ERL_PID_EXT */ if (ei_encode_atom_len_as(buf, index, p->node, strlen(p->node), @@ -32,17 +33,21 @@ int ei_encode_pid(char *buf, int *index, const erlang_pid *p) return -1; if (buf) { - put8(s,ERL_PID_EXT); + put8(s, tag); s = buf + *index; /* now the integers */ put32be(s,p->num & 0x7fff); /* 15 bits */ put32be(s,p->serial & 0x1fff); /* 13 bits */ - put8(s,(p->creation & 0x03)); /* 2 bits */ + if (tag == ERL_PID_EXT) { + put8(s,(p->creation & 0x03)); /* 2 bits */ + } else { + put32be(s, p->creation); /* 32 bits */ + } } - *index += 4 + 4 + 1; + *index += 4 + 4 + (tag == ERL_PID_EXT ? 1 : 4); return 0; } diff --git a/lib/erl_interface/src/encode/encode_port.c b/lib/erl_interface/src/encode/encode_port.c index a7468e5917..eb464380c0 100644 --- a/lib/erl_interface/src/encode/encode_port.c +++ b/lib/erl_interface/src/encode/encode_port.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2013. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,6 +25,7 @@ int ei_encode_port(char *buf, int *index, const erlang_port *p) { char *s = buf + *index; + const char tag = p->creation > 3 ? ERL_NEW_PORT_EXT : ERL_PORT_EXT; ++(*index); /* skip ERL_PORT_EXT */ if (ei_encode_atom_len_as(buf, index, p->node, strlen(p->node), ERLANG_UTF8, @@ -32,16 +33,19 @@ int ei_encode_port(char *buf, int *index, const erlang_port *p) return -1; } if (buf) { - put8(s,ERL_PORT_EXT); + put8(s, tag); s = buf + *index; /* now the integers */ put32be(s,p->id & 0x0fffffff /* 28 bits */); - put8(s,(p->creation & 0x03)); + if (tag == ERL_PORT_EXT) { + put8(s,(p->creation & 0x03)); + } else { + put32be(s, p->creation); + } } - - *index += 4 + 1; + *index += 4 + (tag == ERL_PORT_EXT ? 1 : 4); return 0; } diff --git a/lib/erl_interface/src/encode/encode_ref.c b/lib/erl_interface/src/encode/encode_ref.c index 0f27a086f0..5ccfc32c6d 100644 --- a/lib/erl_interface/src/encode/encode_ref.c +++ b/lib/erl_interface/src/encode/encode_ref.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2013. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,6 +24,7 @@ int ei_encode_ref(char *buf, int *index, const erlang_ref *p) { + const char tag = (p->creation > 3) ? ERL_NEWER_REFERENCE_EXT : ERL_NEW_REFERENCE_EXT; char *s = buf + *index; int i; @@ -36,7 +37,7 @@ int ei_encode_ref(char *buf, int *index, const erlang_ref *p) /* Always encode as an extended reference; all participating parties are now expected to be able to decode extended references. */ if (buf) { - put8(s,ERL_NEW_REFERENCE_EXT); + put8(s, tag); /* first, number of integers */ put16be(s, p->len); @@ -45,12 +46,15 @@ int ei_encode_ref(char *buf, int *index, const erlang_ref *p) s = buf + *index; /* now the integers */ - put8(s,(p->creation & 0x03)); + if (tag == ERL_NEW_REFERENCE_EXT) + put8(s,(p->creation & 0x03)); + else + put32be(s, p->creation); for (i = 0; i < p->len; i++) put32be(s,p->n[i]); } - *index += p->len*4 + 1; + *index += p->len*4 + (tag == ERL_NEW_REFERENCE_EXT ? 1 : 4); return 0; } diff --git a/lib/erl_interface/src/encode/encode_string.c b/lib/erl_interface/src/encode/encode_string.c index 180fe3f1da..a45eae934d 100644 --- a/lib/erl_interface/src/encode/encode_string.c +++ b/lib/erl_interface/src/encode/encode_string.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2011. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/encode/encode_trace.c b/lib/erl_interface/src/encode/encode_trace.c index 95b49a04e6..d0e6aec474 100644 --- a/lib/erl_interface/src/encode/encode_trace.c +++ b/lib/erl_interface/src/encode/encode_trace.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/encode/encode_tuple_header.c b/lib/erl_interface/src/encode/encode_tuple_header.c index 254840a3d1..e75df57bed 100644 --- a/lib/erl_interface/src/encode/encode_tuple_header.c +++ b/lib/erl_interface/src/encode/encode_tuple_header.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2014. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/encode/encode_ulong.c b/lib/erl_interface/src/encode/encode_ulong.c index 98b26fed40..94b45b2dd4 100644 --- a/lib/erl_interface/src/encode/encode_ulong.c +++ b/lib/erl_interface/src/encode/encode_ulong.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/encode/encode_ulonglong.c b/lib/erl_interface/src/encode/encode_ulonglong.c index 069138a458..e16acc10ef 100644 --- a/lib/erl_interface/src/encode/encode_ulonglong.c +++ b/lib/erl_interface/src/encode/encode_ulonglong.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2002-2009. All Rights Reserved. + * Copyright Ericsson AB 2002-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/encode/encode_version.c b/lib/erl_interface/src/encode/encode_version.c index 1694697260..41a2deda12 100644 --- a/lib/erl_interface/src/encode/encode_version.c +++ b/lib/erl_interface/src/encode/encode_version.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/epmd/ei_epmd.h b/lib/erl_interface/src/epmd/ei_epmd.h index 50974b89c5..ac153b6e66 100644 --- a/lib/erl_interface/src/epmd/ei_epmd.h +++ b/lib/erl_interface/src/epmd/ei_epmd.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2010. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/epmd/epmd_port.c b/lib/erl_interface/src/epmd/epmd_port.c index dedc21e679..2ec418b24a 100644 --- a/lib/erl_interface/src/epmd/epmd_port.c +++ b/lib/erl_interface/src/epmd/epmd_port.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2011. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/epmd/epmd_publish.c b/lib/erl_interface/src/epmd/epmd_publish.c index 6370a5ab37..47d68a6db0 100644 --- a/lib/erl_interface/src/epmd/epmd_publish.c +++ b/lib/erl_interface/src/epmd/epmd_publish.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2010. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/epmd/epmd_unpublish.c b/lib/erl_interface/src/epmd/epmd_unpublish.c index ef84938e5b..255d0ffb59 100644 --- a/lib/erl_interface/src/epmd/epmd_unpublish.c +++ b/lib/erl_interface/src/epmd/epmd_unpublish.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2011. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/erl_interface.app.src b/lib/erl_interface/src/erl_interface.app.src index 8ab3e1012f..f00cdfba88 100644 --- a/lib/erl_interface/src/erl_interface.app.src +++ b/lib/erl_interface/src/erl_interface.app.src @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2014. All Rights Reserved. +%% Copyright Ericsson AB 2014-2016. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/erl_interface.appup.src b/lib/erl_interface/src/erl_interface.appup.src index eee7be1540..eb9854d22d 100644 --- a/lib/erl_interface/src/erl_interface.appup.src +++ b/lib/erl_interface/src/erl_interface.appup.src @@ -1,7 +1,7 @@ %% -*- erlang -*- %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2014. All Rights Reserved. +%% Copyright Ericsson AB 2014-2016. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/legacy/decode_term.c b/lib/erl_interface/src/legacy/decode_term.c index fabbee19a9..72bacc3123 100644 --- a/lib/erl_interface/src/legacy/decode_term.c +++ b/lib/erl_interface/src/legacy/decode_term.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2010. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/legacy/encode_term.c b/lib/erl_interface/src/legacy/encode_term.c index 47837214e8..df740ab487 100644 --- a/lib/erl_interface/src/legacy/encode_term.c +++ b/lib/erl_interface/src/legacy/encode_term.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/legacy/erl_config.h b/lib/erl_interface/src/legacy/erl_config.h index 1da150bdbd..fb72169f23 100644 --- a/lib/erl_interface/src/legacy/erl_config.h +++ b/lib/erl_interface/src/legacy/erl_config.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/legacy/erl_connect.c b/lib/erl_interface/src/legacy/erl_connect.c index 4b1004ae2b..7ffd545d3e 100644 --- a/lib/erl_interface/src/legacy/erl_connect.c +++ b/lib/erl_interface/src/legacy/erl_connect.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1996-2013. All Rights Reserved. + * Copyright Ericsson AB 1996-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/legacy/erl_connect.h b/lib/erl_interface/src/legacy/erl_connect.h index eb3292b679..6cb5d5cd1b 100644 --- a/lib/erl_interface/src/legacy/erl_connect.h +++ b/lib/erl_interface/src/legacy/erl_connect.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1996-2009. All Rights Reserved. + * Copyright Ericsson AB 1996-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/legacy/erl_error.c b/lib/erl_interface/src/legacy/erl_error.c index d3309d2863..a3bbfbc58f 100644 --- a/lib/erl_interface/src/legacy/erl_error.c +++ b/lib/erl_interface/src/legacy/erl_error.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1996-2009. All Rights Reserved. + * Copyright Ericsson AB 1996-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/legacy/erl_error.h b/lib/erl_interface/src/legacy/erl_error.h index 27a8d13d0f..0cce083ae7 100644 --- a/lib/erl_interface/src/legacy/erl_error.h +++ b/lib/erl_interface/src/legacy/erl_error.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1996-2009. All Rights Reserved. + * Copyright Ericsson AB 1996-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/legacy/erl_eterm.c b/lib/erl_interface/src/legacy/erl_eterm.c index f2f35ab693..e4b3b49c7d 100644 --- a/lib/erl_interface/src/legacy/erl_eterm.c +++ b/lib/erl_interface/src/legacy/erl_eterm.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1996-2013. All Rights Reserved. + * Copyright Ericsson AB 1996-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -285,12 +285,12 @@ ETERM *erl_mk_pid(const char *node, erl_errno = ENOMEM; return NULL; } - erl_mk_pid_helper(ep, number, serial, creation); + erl_mk_pid_helper(ep, number, serial, creation & 0x03); return ep; } void erl_mk_pid_helper(ETERM *ep, unsigned int number, - unsigned int serial, unsigned char creation) + unsigned int serial, unsigned int creation) { ERL_PID_NUMBER(ep) = number & 0x7fff; /* 15 bits */ if (ei_internal_use_r9_pids_ports()) { @@ -299,7 +299,7 @@ void erl_mk_pid_helper(ETERM *ep, unsigned int number, else { ERL_PID_SERIAL(ep) = serial & 0x1fff; /* 13 bits */ } - ERL_PID_CREATION(ep) = creation & 0x03; /* 2 bits */ + ERL_PID_CREATION(ep) = creation; /* 32 bits */ } /* @@ -326,7 +326,7 @@ ETERM *erl_mk_port(const char *node, return ep; } -void erl_mk_port_helper(ETERM* ep, unsigned number, unsigned char creation) +void erl_mk_port_helper(ETERM* ep, unsigned number, unsigned int creation) { if (ei_internal_use_r9_pids_ports()) { ERL_PORT_NUMBER(ep) = number & 0x3ffff; /* 18 bits */ @@ -334,7 +334,7 @@ void erl_mk_port_helper(ETERM* ep, unsigned number, unsigned char creation) else { ERL_PORT_NUMBER(ep) = number & 0x0fffffff; /* 18 bits */ } - ERL_PORT_CREATION(ep) = creation & 0x03; /* 2 bits */ + ERL_PORT_CREATION(ep) = creation; /* 32 bits */ } /* @@ -344,7 +344,7 @@ ETERM *__erl_mk_reference (ETERM* t, const char *node, size_t len, unsigned int n[], - unsigned char creation) + unsigned int creation) { if (t == NULL) { if (node == NULL) return NULL; @@ -363,7 +363,7 @@ ETERM *__erl_mk_reference (ETERM* t, ERL_REF_NUMBERS(t)[0] = n[0] & 0x3ffff; /* 18 bits */ ERL_REF_NUMBERS(t)[1] = n[1]; ERL_REF_NUMBERS(t)[2] = n[2]; - ERL_REF_CREATION(t) = creation & 0x03; /* 2 bits */ + ERL_REF_CREATION(t) = creation; /* 32 bits */ return t; } diff --git a/lib/erl_interface/src/legacy/erl_eterm.h b/lib/erl_interface/src/legacy/erl_eterm.h index d9a26b2541..e2f3a90531 100644 --- a/lib/erl_interface/src/legacy/erl_eterm.h +++ b/lib/erl_interface/src/legacy/erl_eterm.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1996-2013. All Rights Reserved. + * Copyright Ericsson AB 1996-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -56,9 +56,9 @@ typedef struct _heapmark { } Erl_HeapMark; -void erl_mk_port_helper(ETERM* ep, unsigned number, unsigned char creation); -void erl_mk_pid_helper(ETERM*, unsigned,unsigned, unsigned char); -ETERM * __erl_mk_reference(ETERM*, const char *, size_t, unsigned int n[], unsigned char); +void erl_mk_port_helper(ETERM* ep, unsigned number, unsigned int creation); +void erl_mk_pid_helper(ETERM*, unsigned,unsigned, unsigned int); +ETERM * __erl_mk_reference(ETERM*, const char *, size_t, unsigned int n[], unsigned int); int erl_current_fix_desc(void); #endif /* _ERL_ETERM_H */ diff --git a/lib/erl_interface/src/legacy/erl_fix_alloc.c b/lib/erl_interface/src/legacy/erl_fix_alloc.c index 70d592bfe1..890a9ce291 100644 --- a/lib/erl_interface/src/legacy/erl_fix_alloc.c +++ b/lib/erl_interface/src/legacy/erl_fix_alloc.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1996-2011. All Rights Reserved. + * Copyright Ericsson AB 1996-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/legacy/erl_fix_alloc.h b/lib/erl_interface/src/legacy/erl_fix_alloc.h index af86202ae7..50d1368e34 100644 --- a/lib/erl_interface/src/legacy/erl_fix_alloc.h +++ b/lib/erl_interface/src/legacy/erl_fix_alloc.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1996-2009. All Rights Reserved. + * Copyright Ericsson AB 1996-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/legacy/erl_format.c b/lib/erl_interface/src/legacy/erl_format.c index c5ef47236d..45f5489e54 100644 --- a/lib/erl_interface/src/legacy/erl_format.c +++ b/lib/erl_interface/src/legacy/erl_format.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1996-2013. All Rights Reserved. + * Copyright Ericsson AB 1996-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/legacy/erl_format.h b/lib/erl_interface/src/legacy/erl_format.h index 388267f859..92fa068206 100644 --- a/lib/erl_interface/src/legacy/erl_format.h +++ b/lib/erl_interface/src/legacy/erl_format.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1996-2009. All Rights Reserved. + * Copyright Ericsson AB 1996-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/legacy/erl_global.h b/lib/erl_interface/src/legacy/erl_global.h index 3c99b2fe40..d2eec08b35 100644 --- a/lib/erl_interface/src/legacy/erl_global.h +++ b/lib/erl_interface/src/legacy/erl_global.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/legacy/erl_internal.h b/lib/erl_interface/src/legacy/erl_internal.h index 22160d8911..25cf3e4f42 100644 --- a/lib/erl_interface/src/legacy/erl_internal.h +++ b/lib/erl_interface/src/legacy/erl_internal.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1996-2009. All Rights Reserved. + * Copyright Ericsson AB 1996-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/legacy/erl_malloc.c b/lib/erl_interface/src/legacy/erl_malloc.c index cad7f75261..27ef8c4b32 100644 --- a/lib/erl_interface/src/legacy/erl_malloc.c +++ b/lib/erl_interface/src/legacy/erl_malloc.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1996-2013. All Rights Reserved. + * Copyright Ericsson AB 1996-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/legacy/erl_malloc.h b/lib/erl_interface/src/legacy/erl_malloc.h index cfbd190b61..6cbc01faba 100644 --- a/lib/erl_interface/src/legacy/erl_malloc.h +++ b/lib/erl_interface/src/legacy/erl_malloc.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1996-2009. All Rights Reserved. + * Copyright Ericsson AB 1996-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/legacy/erl_marshal.c b/lib/erl_interface/src/legacy/erl_marshal.c index a4216c9541..2bdf5f2134 100644 --- a/lib/erl_interface/src/legacy/erl_marshal.c +++ b/lib/erl_interface/src/legacy/erl_marshal.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1996-2013. All Rights Reserved. + * Copyright Ericsson AB 1996-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -120,10 +120,13 @@ void erl_init_marshal(void) cmp_array[ERL_SMALL_ATOM_UTF8_EXT] = ERL_ATOM_CMP; cmp_array[ERL_REFERENCE_EXT] = ERL_REF_CMP; cmp_array[ERL_NEW_REFERENCE_EXT] = ERL_REF_CMP; + cmp_array[ERL_NEWER_REFERENCE_EXT]=ERL_REF_CMP; cmp_array[ERL_FUN_EXT] = ERL_FUN_CMP; cmp_array[ERL_NEW_FUN_EXT] = ERL_FUN_CMP; cmp_array[ERL_PORT_EXT] = ERL_PORT_CMP; + cmp_array[ERL_NEW_PORT_EXT] = ERL_PORT_CMP; cmp_array[ERL_PID_EXT] = ERL_PID_CMP; + cmp_array[ERL_NEW_PID_EXT] = ERL_PID_CMP; cmp_array[ERL_SMALL_TUPLE_EXT] = ERL_TUPLE_CMP; cmp_array[ERL_LARGE_TUPLE_EXT] = ERL_TUPLE_CMP; cmp_array[ERL_NIL_EXT] = ERL_NIL_CMP; @@ -304,8 +307,8 @@ int erl_encode_it(ETERM *ep, unsigned char **ext, int dist) *(*ext)++ = ul & 0xff; return 0; - case ERL_PID: - *(*ext)++ = ERL_PID_EXT; + case ERL_PID: { + unsigned char* tagp = (*ext)++; /* First poke in node as an atom */ encode_atom(&ep->uval.pidval.node, ext); /* And then fill in the integer fields */ @@ -319,17 +322,29 @@ int erl_encode_it(ETERM *ep, unsigned char **ext, int dist) *(*ext)++ = (i >> 16) &0xff; *(*ext)++ = (i >> 8) &0xff; *(*ext)++ = i &0xff; - *(*ext)++ = ERL_PID_CREATION(ep); + + i = ERL_PID_CREATION(ep); + if ((unsigned int)i <= 3) { + *tagp = ERL_PID_EXT; + *(*ext)++ = i; + } else { + *tagp = ERL_NEW_PID_EXT; + *(*ext)++ = (i >> 24) &0xff; + *(*ext)++ = (i >> 16) &0xff; + *(*ext)++ = (i >> 8) &0xff; + *(*ext)++ = i &0xff; + } return 0; + } case ERL_REF: { + unsigned char* tagp = (*ext)++; + int len, j; /* Always encode as an extended reference; all participating parties are now expected to be able to decode extended references. */ - *(*ext)++ = ERL_NEW_REFERENCE_EXT; - i = strlen((char *)ERL_REF_NODE(ep)); len = ERL_REF_LEN(ep); *(*ext)++ = (len >> 8) &0xff; @@ -337,7 +352,18 @@ int erl_encode_it(ETERM *ep, unsigned char **ext, int dist) encode_atom(&ep->uval.refval.node, ext); - *(*ext)++ = ERL_REF_CREATION(ep); + i = ERL_REF_CREATION(ep); + if ((unsigned int)i <= 3) { + *tagp = ERL_NEW_REFERENCE_EXT; + *(*ext)++ = i; + } else { + *tagp = ERL_NEWER_REFERENCE_EXT; + *(*ext)++ = (i >> 24) &0xff; + *(*ext)++ = (i >> 16) &0xff; + *(*ext)++ = (i >> 8) &0xff; + *(*ext)++ = i &0xff; + } + /* Then the integer fields */ for (j = 0; j < ERL_REF_LEN(ep); j++) { i = ERL_REF_NUMBERS(ep)[j]; @@ -348,8 +374,8 @@ int erl_encode_it(ETERM *ep, unsigned char **ext, int dist) } } return 0; - case ERL_PORT: - *(*ext)++ = ERL_PORT_EXT; + case ERL_PORT: { + unsigned char* tagp = (*ext)++; /* First poke in node as an atom */ encode_atom(&ep->uval.portval.node, ext); /* Then the integer fields */ @@ -358,8 +384,20 @@ int erl_encode_it(ETERM *ep, unsigned char **ext, int dist) *(*ext)++ = (i >> 16) &0xff; *(*ext)++ = (i >> 8) &0xff; *(*ext)++ = i &0xff; - *(*ext)++ = ERL_PORT_CREATION(ep); + + i = ERL_PORT_CREATION(ep); + if ((unsigned int)i <= 3) { + *tagp = ERL_PORT_EXT; + *(*ext)++ = i; + } else { + *tagp = ERL_NEW_PORT_EXT; + *(*ext)++ = (i >> 24) &0xff; + *(*ext)++ = (i >> 16) &0xff; + *(*ext)++ = (i >> 8) &0xff; + *(*ext)++ = i &0xff; + } return 0; + } case ERL_EMPTY_LIST: *(*ext)++ = ERL_NIL_EXT; break; @@ -698,12 +736,14 @@ static ETERM *erl_decode_it(unsigned char **ext) unsigned int u,sign; int i,j,arity; double ff; + unsigned char tag; /* Assume we are going to decode an integer */ ep = erl_alloc_eterm(ERL_INTEGER); ERL_COUNT(ep) = 1; - switch (*(*ext)++) + tag = *(*ext)++; + switch (tag) { case ERL_INTEGER_EXT: i = (int) (**ext << 24) | ((*ext)[1] << 16) | @@ -727,6 +767,13 @@ static ETERM *erl_decode_it(unsigned char **ext) ((*ext)[2]) << 8 |((*ext)[3]); *ext += 4; big_cont: + +#ifdef _MSC_VER +#define MAX_TO_NEGATE 0x8000000000000000Ui64 +#else +#define MAX_TO_NEGATE 0x8000000000000000ULL +#endif + sign = *(*ext)++; if (arity > 8) goto big_truncate; @@ -763,23 +810,28 @@ static ETERM *erl_decode_it(unsigned char **ext) *ext += arity; return ep; } else { - /* Fits in a long long */ - int x; - long long l = 0LL; - - for(x = 0 ; x < arity ; x++) { - l |= ((long long)(*ext)[x]) << ((long long)(8*x)); - } - if (sign) { - l = -l; - if (l > 0) goto big_truncate; - } - - ERL_TYPE(ep) = ERL_LONGLONG; - ep->uval.llval.i = l; - *ext += arity; - return ep; + /* Fits in a signed long long */ + int x; + unsigned long long l = 0LL; + long long sl; + + for(x = 0 ; x < arity ; x++) { + l |= ((unsigned long long)(*ext)[x]) << ((unsigned long long)(8*x)); + } + + sl = (long long)l; + + if (sign && l != MAX_TO_NEGATE) { + sl = -sl; + if (sl > 0) goto big_truncate; + } + + ERL_TYPE(ep) = ERL_LONGLONG; + ep->uval.llval.i = sl; + *ext += arity; + return ep; } +#undef MAX_TO_NEGATE big_truncate: /* truncate to: (+/-) 1 */ #ifdef DEBUG @@ -801,9 +853,10 @@ static ETERM *erl_decode_it(unsigned char **ext) return ep; case ERL_PID_EXT: + case ERL_NEW_PID_EXT: { unsigned int number, serial; - unsigned char creation; + unsigned int creation; ERL_TYPE(ep) = ERL_PID; if (read_atom(ext, &ep->uval.pidval.node) < 0) return NULL; @@ -815,7 +868,13 @@ static ETERM *erl_decode_it(unsigned char **ext) serial = ((*ext)[0] << 24) | ((*ext)[1]) << 16 | ((*ext)[2]) << 8 | ((*ext)[3]); *ext += 4; - creation = *(*ext)++; + if (tag == ERL_PID_EXT) + creation = *(*ext)++; + else { + creation = ((*ext)[0] << 24) | ((*ext)[1]) << 16 | + ((*ext)[2]) << 8 | ((*ext)[3]); + *ext += 4; + } erl_mk_pid_helper(ep, number, serial, creation); return ep; } @@ -836,11 +895,12 @@ static ETERM *erl_decode_it(unsigned char **ext) return ep; } - case ERL_NEW_REFERENCE_EXT: + case ERL_NEW_REFERENCE_EXT: + case ERL_NEWER_REFERENCE_EXT: { size_t cnt, i; unsigned int n[3]; - unsigned char creation; + unsigned int creation; ERL_TYPE(ep) = ERL_REF; cnt = ((*ext)[0] << 8) | (*ext)[1]; @@ -849,7 +909,13 @@ static ETERM *erl_decode_it(unsigned char **ext) if (read_atom(ext, &ep->uval.refval.node) < 0) return NULL; /* get the integers */ - creation = *(*ext)++; + if (tag == ERL_NEW_REFERENCE_EXT) + creation = *(*ext)++; + else { + creation = ((*ext)[0] << 24) | ((*ext)[1]) << 16 | + ((*ext)[2]) << 8 | ((*ext)[3]); + *ext += 4; + } for(i = 0; i < cnt; i++) { n[i] = ((*ext)[0] << 24) | ((*ext)[1]) << 16 | @@ -861,9 +927,10 @@ static ETERM *erl_decode_it(unsigned char **ext) } case ERL_PORT_EXT: + case ERL_NEW_PORT_EXT: { unsigned int number; - unsigned char creation; + unsigned int creation; ERL_TYPE(ep) = ERL_PORT; if (read_atom(ext, &ep->uval.portval.node) < 0) return NULL; @@ -872,7 +939,13 @@ static ETERM *erl_decode_it(unsigned char **ext) number = ((*ext)[0] << 24) | ((*ext)[1]) << 16 | ((*ext)[2]) << 8 | ((*ext)[3]); *ext += 4; - creation = *(*ext)++; + if (tag == ERL_PORT_EXT) + creation = *(*ext)++; + else { + creation = (((*ext)[0] << 24) | ((*ext)[1]) << 16 | + ((*ext)[2]) << 8 | ((*ext)[3])); + *ext += 4; + } erl_mk_port_helper(ep, number, creation); return ep; } @@ -1114,11 +1187,14 @@ unsigned char erl_ext_type(unsigned char *ext) case ERL_SMALL_ATOM_UTF8_EXT: return ERL_ATOM; case ERL_PID_EXT: + case ERL_NEW_PID_EXT: return ERL_PID; case ERL_PORT_EXT: + case ERL_NEW_PORT_EXT: return ERL_PORT; case ERL_REFERENCE_EXT: case ERL_NEW_REFERENCE_EXT: + case ERL_NEWER_REFERENCE_EXT: return ERL_REF; case ERL_NIL_EXT: return ERL_EMPTY_LIST; @@ -1167,9 +1243,12 @@ int erl_ext_size(unsigned char *t) case ERL_SMALL_ATOM_EXT: case ERL_SMALL_ATOM_UTF8_EXT: case ERL_PID_EXT: + case ERL_NEW_PID_EXT: case ERL_PORT_EXT: + case ERL_NEW_PORT_EXT: case ERL_REFERENCE_EXT: case ERL_NEW_REFERENCE_EXT: + case ERL_NEWER_REFERENCE_EXT: case ERL_NIL_EXT: case ERL_BINARY_EXT: case ERL_STRING_EXT: @@ -1240,8 +1319,9 @@ static int jump(unsigned char **ext) { int j,k,i=0; int n; + const int tag = *(*ext)++; - switch (*(*ext)++) { + switch (tag) { case ERL_VERSION_MAGIC: return jump(ext); case ERL_INTEGER_EXT: @@ -1257,22 +1337,29 @@ static int jump(unsigned char **ext) jump_atom(ext); break; case ERL_PID_EXT: - /* eat first atom */ if (!jump_atom(ext)) return 0; - *ext += 9; /* Two int's and the creation field */ + *ext += 4 + 4 + 1; break; + case ERL_NEW_PID_EXT: + if (!jump_atom(ext)) return 0; + *ext += 4 + 4 + 4; + break; case ERL_REFERENCE_EXT: case ERL_PORT_EXT: - /* first field is an atom */ if (!jump_atom(ext)) return 0; - *ext += 5; /* One int and the creation field */ + *ext += 4 + 1; break; + case ERL_NEW_PORT_EXT: + if (!jump_atom(ext)) return 0; + *ext += 4 + 4; + break; case ERL_NEW_REFERENCE_EXT: + case ERL_NEWER_REFERENCE_EXT: n = (**ext << 8) | (*ext)[1]; *ext += 2; /* first field is an atom */ if (!jump_atom(ext)) return 0; - *ext += 4*n+1; + *ext += 4*n + (tag == ERL_NEW_REFERENCE_EXT ? 1 : 4); break; case ERL_NIL_EXT: /* We just passed it... */ @@ -1605,7 +1692,6 @@ static int cmp_exe2(unsigned char **e1, unsigned char **e2) { int min, ret,i,j,k; double ff1, ff2; - unsigned char *tmp1, *tmp2; unsigned char tag1, tag2; if ( ((*e1)[0] == ERL_STRING_EXT) && ((*e2)[0] == ERL_LIST_EXT) ) { @@ -1649,47 +1735,68 @@ static int cmp_exe2(unsigned char **e1, unsigned char **e2) *e1 += i; *e2 += j; return ret; - case ERL_PID_EXT: { - unsigned char *n1 = *e1; - unsigned char *n2 = *e2; - CMP_EXT_SKIP_ATOM(*e1); CMP_EXT_SKIP_ATOM(*e2); - *e1 += 9; *e2 += 9; + case ERL_PID_EXT: + case ERL_NEW_PID_EXT: { + erlang_pid pid1, pid2; + unsigned char* buf1 = *e1 - 1; + unsigned char* buf2 = *e2 - 1; + int ix1 = 0, ix2 = 0; + + if (ei_decode_pid((char*)buf1, &ix1, &pid1) || + ei_decode_pid((char*)buf2, &ix2, &pid2)) + return CMP_EXT_ERROR_CODE; + + *e1 = buf1 + ix1; + *e2 = buf2 + ix2; /* First compare serials ... */ - tmp1 = *e1 - 5; tmp2 = *e2 - 5; - CMP_EXT_INT32_BE(tmp1, tmp2); + if (pid1.serial < pid2.serial) return -1; + else if (pid1.serial > pid2.serial) return 1; /* ... then ids ... */ - tmp1 -= 4; tmp2 -= 4; - CMP_EXT_INT32_BE(tmp1, tmp2); + if (pid1.num < pid2.num) return -1; + else if (pid1.num > pid2.num) return 1; /* ... then node names ... */ - ret = cmp_exe2(&n1, &n2); - if (ret != 0) - return ret; + j = strcmp(pid1.node, pid2.node); + if (j < 0) return -1; + else if (j > 0) return 1; /* ... and then finaly creations. */ - tmp1 += 8; tmp2 += 8; - if (*tmp1 != *tmp2) - return *tmp1 < *tmp2 ? -1 : 1; + if (pid1.creation < pid2.creation) return -1; + else if (pid1.creation > pid2.creation) return 1; + return 0; } case ERL_PORT_EXT: - /* First compare node names ... */ - if (!IS_ERL_ATOM(**e1) || !IS_ERL_ATOM(**e2)) - return CMP_EXT_ERROR_CODE; - ret = cmp_exe2(e1, e2); - *e1 += 5; *e2 += 5; - if (ret != 0) - return ret; + case ERL_NEW_PORT_EXT: { + erlang_port port1, port2; + unsigned char* buf1 = *e1 - 1; + unsigned char* buf2 = *e2 - 1; + int ix1 = 0, ix2 = 0; + + if (ei_decode_port((char*)buf1, &ix1, &port1) || + ei_decode_port((char*)buf2, &ix2, &port2)) + return CMP_EXT_ERROR_CODE; + + *e1 = buf1 + ix1; + *e2 = buf2 + ix2; + + /* First compare node names ... */ + j = strcmp(port1.node, port2.node); + if (j < 0) return -1; + else if (j > 0) return 1; + /* ... then creations ... */ - tmp1 = *e1 - 1; tmp2 = *e2 - 1; - if (*tmp1 != *tmp2) - return *tmp1 < *tmp2 ? -1 : 1; + if (port1.creation < port2.creation) return -1; + else if (port1.creation > port2.creation) return 1; + /* ... and then finaly ids. */ - tmp1 -= 4; tmp2 -= 4; - CMP_EXT_INT32_BE(tmp1, tmp2); - return 0; + if (port1.id < port2.id) return -1; + else if (port1.id > port2.id) return 1; + + return 0; + } case ERL_NIL_EXT: return 0; case ERL_LIST_EXT: i = (**e1 << 24) | ((*e1)[1] << 16) |((*e1)[2] << 8) | (*e1)[3]; diff --git a/lib/erl_interface/src/legacy/erl_marshal.h b/lib/erl_interface/src/legacy/erl_marshal.h index c7fe2139a6..c1963b832d 100644 --- a/lib/erl_interface/src/legacy/erl_marshal.h +++ b/lib/erl_interface/src/legacy/erl_marshal.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1996-2009. All Rights Reserved. + * Copyright Ericsson AB 1996-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/legacy/erl_resolve.c b/lib/erl_interface/src/legacy/erl_resolve.c index cc6558471a..bb09caec85 100644 --- a/lib/erl_interface/src/legacy/erl_resolve.c +++ b/lib/erl_interface/src/legacy/erl_resolve.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2003-2009. All Rights Reserved. + * Copyright Ericsson AB 2003-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/legacy/erl_timeout.c b/lib/erl_interface/src/legacy/erl_timeout.c index 1651131dff..e36ea0e250 100644 --- a/lib/erl_interface/src/legacy/erl_timeout.c +++ b/lib/erl_interface/src/legacy/erl_timeout.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1997-2011. All Rights Reserved. + * Copyright Ericsson AB 1997-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/legacy/erl_timeout.h b/lib/erl_interface/src/legacy/erl_timeout.h index 17d45915f5..6bcfa5ecbb 100644 --- a/lib/erl_interface/src/legacy/erl_timeout.h +++ b/lib/erl_interface/src/legacy/erl_timeout.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1997-2009. All Rights Reserved. + * Copyright Ericsson AB 1997-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/legacy/global_names.c b/lib/erl_interface/src/legacy/global_names.c index bf717bb32b..ee808620fb 100644 --- a/lib/erl_interface/src/legacy/global_names.c +++ b/lib/erl_interface/src/legacy/global_names.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2011. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/legacy/global_register.c b/lib/erl_interface/src/legacy/global_register.c index 9905977514..4cb6d8071f 100644 --- a/lib/erl_interface/src/legacy/global_register.c +++ b/lib/erl_interface/src/legacy/global_register.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2011. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/legacy/global_unregister.c b/lib/erl_interface/src/legacy/global_unregister.c index ace7343503..27f68670ca 100644 --- a/lib/erl_interface/src/legacy/global_unregister.c +++ b/lib/erl_interface/src/legacy/global_unregister.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2011. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/legacy/global_whereis.c b/lib/erl_interface/src/legacy/global_whereis.c index 23be4a1055..13c4c93ca7 100644 --- a/lib/erl_interface/src/legacy/global_whereis.c +++ b/lib/erl_interface/src/legacy/global_whereis.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2013. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/legacy/portability.h b/lib/erl_interface/src/legacy/portability.h index d544c63c99..42a78662d5 100644 --- a/lib/erl_interface/src/legacy/portability.h +++ b/lib/erl_interface/src/legacy/portability.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2000-2009. All Rights Reserved. + * Copyright Ericsson AB 2000-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/misc/ei_compat.c b/lib/erl_interface/src/misc/ei_compat.c index ceb597e970..93d7dbfb83 100644 --- a/lib/erl_interface/src/misc/ei_compat.c +++ b/lib/erl_interface/src/misc/ei_compat.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2004-2009. All Rights Reserved. + * Copyright Ericsson AB 2004-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/misc/ei_decode_term.c b/lib/erl_interface/src/misc/ei_decode_term.c index 0ec67dde09..63a7034508 100644 --- a/lib/erl_interface/src/misc/ei_decode_term.c +++ b/lib/erl_interface/src/misc/ei_decode_term.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2001-2014. All Rights Reserved. + * Copyright Ericsson AB 2001-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,7 +33,7 @@ int ei_decode_ei_term(const char* buf, int* index, ei_term* term) { const char* s = buf + *index, * s0 = s; - int i, n, sign; + int n, sign; char c; if (term == NULL) return -1; @@ -47,47 +47,27 @@ int ei_decode_ei_term(const char* buf, int* index, ei_term* term) break; case ERL_FLOAT_EXT: case NEW_FLOAT_EXT: - return ei_decode_double(buf, index, &term->value.d_val); + return (ei_decode_double(buf, index, &term->value.d_val) < 0 + ? -1 : 1); case ERL_ATOM_EXT: case ERL_ATOM_UTF8_EXT: case ERL_SMALL_ATOM_EXT: case ERL_SMALL_ATOM_UTF8_EXT: - return ei_decode_atom(buf, index, term->value.atom_name); + return (ei_decode_atom(buf, index, term->value.atom_name) < 0 + ? -1 : 1); case ERL_REFERENCE_EXT: - /* first the nodename */ - if (get_atom(&s, term->value.ref.node, NULL) < 0) return -1; - /* now the numbers: num (4), creation (1) */ - term->value.ref.n[0] = get32be(s); - term->value.ref.len = 1; - term->value.ref.creation = get8(s) & 0x03; - break; case ERL_NEW_REFERENCE_EXT: - /* first the integer count */ - term->value.ref.len = get16be(s); - /* then the nodename */ - if (get_atom(&s, term->value.ref.node, NULL) < 0) return -1; - /* creation */ - term->value.ref.creation = get8(s) & 0x03; - /* finally the id integers */ - for (i = 0; (i<term->value.ref.len) && (i<3); i++) { - term->value.ref.n[i] = get32be(s); - } - if (term->value.ref.len > 3) { - s += 4 * (term->value.ref.len - 3); - } - break; + case ERL_NEWER_REFERENCE_EXT: + return (ei_decode_ref(buf, index, &term->value.ref) < 0 + ? -1 : 1); case ERL_PORT_EXT: - if (get_atom(&s, term->value.port.node, NULL) < 0) return -1; - term->value.port.id = get32be(s) & 0x0fffffff; /* 28 bits */; - term->value.port.creation = get8(s) & 0x03; - break; + case ERL_NEW_PORT_EXT: + return (ei_decode_port(buf, index, &term->value.port) < 0 + ? -1 : 1); case ERL_PID_EXT: - if (get_atom(&s, term->value.pid.node, NULL) < 0) return -1; - /* now the numbers: num (4), serial (4), creation (1) */ - term->value.pid.num = get32be(s) & 0x7fff; /* 15 bits */ - term->value.pid.serial = get32be(s) & 0x1fff; /* 13 bits */ - term->value.pid.creation = get8(s) & 0x03; /* 2 bits */ - break; + case ERL_NEW_PID_EXT: + return (ei_decode_pid(buf, index, &term->value.pid) < 0 + ? -1 : 1); case ERL_SMALL_TUPLE_EXT: term->arity = get8(s); break; diff --git a/lib/erl_interface/src/misc/ei_decode_term.h b/lib/erl_interface/src/misc/ei_decode_term.h index 1f7cedff02..cf2b8f7e86 100644 --- a/lib/erl_interface/src/misc/ei_decode_term.h +++ b/lib/erl_interface/src/misc/ei_decode_term.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2001-2009. All Rights Reserved. + * Copyright Ericsson AB 2001-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/misc/ei_format.c b/lib/erl_interface/src/misc/ei_format.c index 191f4ec7b5..a188171f40 100644 --- a/lib/erl_interface/src/misc/ei_format.c +++ b/lib/erl_interface/src/misc/ei_format.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2001-2013. All Rights Reserved. + * Copyright Ericsson AB 2001-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/misc/ei_format.h b/lib/erl_interface/src/misc/ei_format.h index 5fa3247d60..7a418008a1 100644 --- a/lib/erl_interface/src/misc/ei_format.h +++ b/lib/erl_interface/src/misc/ei_format.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2001-2009. All Rights Reserved. + * Copyright Ericsson AB 2001-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/misc/ei_internal.h b/lib/erl_interface/src/misc/ei_internal.h index 56cdb53fbf..aa6aacd703 100644 --- a/lib/erl_interface/src/misc/ei_internal.h +++ b/lib/erl_interface/src/misc/ei_internal.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2002-2009. All Rights Reserved. + * Copyright Ericsson AB 2002-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/misc/ei_locking.c b/lib/erl_interface/src/misc/ei_locking.c index c4c4a8e735..85b2a5fd8b 100644 --- a/lib/erl_interface/src/misc/ei_locking.c +++ b/lib/erl_interface/src/misc/ei_locking.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1997-2009. All Rights Reserved. + * Copyright Ericsson AB 1997-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/misc/ei_locking.h b/lib/erl_interface/src/misc/ei_locking.h index 99b88ead3b..1bbee2d499 100644 --- a/lib/erl_interface/src/misc/ei_locking.h +++ b/lib/erl_interface/src/misc/ei_locking.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1997-2009. All Rights Reserved. + * Copyright Ericsson AB 1997-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/misc/ei_malloc.c b/lib/erl_interface/src/misc/ei_malloc.c index 347973bbd6..a8921bc5b5 100644 --- a/lib/erl_interface/src/misc/ei_malloc.c +++ b/lib/erl_interface/src/misc/ei_malloc.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2001-2009. All Rights Reserved. + * Copyright Ericsson AB 2001-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/misc/ei_malloc.h b/lib/erl_interface/src/misc/ei_malloc.h index b02811101b..b62a3cf4d7 100644 --- a/lib/erl_interface/src/misc/ei_malloc.h +++ b/lib/erl_interface/src/misc/ei_malloc.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2002-2009. All Rights Reserved. + * Copyright Ericsson AB 2002-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/misc/ei_portio.c b/lib/erl_interface/src/misc/ei_portio.c index d4fa2c30e7..8cd35bf2e5 100644 --- a/lib/erl_interface/src/misc/ei_portio.c +++ b/lib/erl_interface/src/misc/ei_portio.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1996-2011. All Rights Reserved. + * Copyright Ericsson AB 1996-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/misc/ei_portio.h b/lib/erl_interface/src/misc/ei_portio.h index 24dcee4780..fbb61b0ccf 100644 --- a/lib/erl_interface/src/misc/ei_portio.h +++ b/lib/erl_interface/src/misc/ei_portio.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1996-2009. All Rights Reserved. + * Copyright Ericsson AB 1996-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,6 +21,12 @@ */ #ifndef _EI_PORTIO_H #define _EI_PORTIO_H +#if !defined(__WIN32__) || !defined(VXWORKS) +#ifdef HAVE_WRITEV +/* Declaration of struct iovec *iov should be visible in this scope. */ +#include <sys/uio.h> +#endif +#endif int ei_accept_t(int fd, void *addr, void *addrlen, unsigned ms); int ei_connect_t(int fd, void *sinp, int sin_siz, unsigned ms); @@ -29,8 +35,7 @@ int ei_write_fill(int fd, const char *buf, int len); int ei_read_fill_t(int fd, char* buf, int len, unsigned ms); int ei_write_fill_t(int fd, const char *buf, int len, unsigned ms); #ifdef HAVE_WRITEV -int ei_writev_fill_t(int fd, const struct iovec *iov, int iovcnt, - unsigned ms); +int ei_writev_fill_t(int fd, const struct iovec *iov, int iovcnt, unsigned ms); #endif #endif /* _EI_PORTIO_H */ diff --git a/lib/erl_interface/src/misc/ei_printterm.c b/lib/erl_interface/src/misc/ei_printterm.c index 702ee9566d..058de00de5 100644 --- a/lib/erl_interface/src/misc/ei_printterm.c +++ b/lib/erl_interface/src/misc/ei_printterm.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2001-2013. All Rights Reserved. + * Copyright Ericsson AB 2001-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -151,15 +151,18 @@ static int print_term(FILE* fp, ei_x_buff* x, } break; case ERL_PID_EXT: + case ERL_NEW_PID_EXT: if (ei_decode_pid(buf, index, &pid) < 0) goto err; ch_written += xprintf(fp, x, "<%s.%d.%d>", pid.node, pid.num, pid.serial); break; case ERL_PORT_EXT: + case ERL_NEW_PORT_EXT: if (ei_decode_port(buf, index, &port) < 0) goto err; ch_written += xprintf(fp, x, "#Port<%d.%d>", port.id, port.creation); break; case ERL_NEW_REFERENCE_EXT: + case ERL_NEWER_REFERENCE_EXT: case ERL_REFERENCE_EXT: if (ei_decode_ref(buf, index, &ref) < 0) goto err; ch_written += xprintf(fp, x, "#Ref<"); diff --git a/lib/erl_interface/src/misc/ei_printterm.h b/lib/erl_interface/src/misc/ei_printterm.h index cb9e12c2dd..953ea00744 100644 --- a/lib/erl_interface/src/misc/ei_printterm.h +++ b/lib/erl_interface/src/misc/ei_printterm.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2001-2009. All Rights Reserved. + * Copyright Ericsson AB 2001-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/misc/ei_pthreads.c b/lib/erl_interface/src/misc/ei_pthreads.c index 1d86fdb736..25608edeec 100644 --- a/lib/erl_interface/src/misc/ei_pthreads.c +++ b/lib/erl_interface/src/misc/ei_pthreads.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2001-2009. All Rights Reserved. + * Copyright Ericsson AB 2001-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/misc/ei_trace.c b/lib/erl_interface/src/misc/ei_trace.c index b341f38105..53d90a9c51 100644 --- a/lib/erl_interface/src/misc/ei_trace.c +++ b/lib/erl_interface/src/misc/ei_trace.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/misc/ei_trace.h b/lib/erl_interface/src/misc/ei_trace.h index 0105a0c1f1..a0988ca8ae 100644 --- a/lib/erl_interface/src/misc/ei_trace.h +++ b/lib/erl_interface/src/misc/ei_trace.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2002-2009. All Rights Reserved. + * Copyright Ericsson AB 2002-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/misc/ei_x_encode.c b/lib/erl_interface/src/misc/ei_x_encode.c index 4cd882235f..4ff5974663 100644 --- a/lib/erl_interface/src/misc/ei_x_encode.c +++ b/lib/erl_interface/src/misc/ei_x_encode.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2001-2014. All Rights Reserved. + * Copyright Ericsson AB 2001-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/misc/ei_x_encode.h b/lib/erl_interface/src/misc/ei_x_encode.h index f11d750b28..2c8e362caa 100644 --- a/lib/erl_interface/src/misc/ei_x_encode.h +++ b/lib/erl_interface/src/misc/ei_x_encode.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2001-2009. All Rights Reserved. + * Copyright Ericsson AB 2001-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/misc/eidef.h b/lib/erl_interface/src/misc/eidef.h index 9ac49434e6..f38824d826 100644 --- a/lib/erl_interface/src/misc/eidef.h +++ b/lib/erl_interface/src/misc/eidef.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2002-2009. All Rights Reserved. + * Copyright Ericsson AB 2002-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/misc/eiext.h b/lib/erl_interface/src/misc/eiext.h index caf98c8e70..ac60d73821 100644 --- a/lib/erl_interface/src/misc/eiext.h +++ b/lib/erl_interface/src/misc/eiext.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/misc/get_type.c b/lib/erl_interface/src/misc/get_type.c index 6b95c1f470..aa69cd4d60 100644 --- a/lib/erl_interface/src/misc/get_type.c +++ b/lib/erl_interface/src/misc/get_type.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2013. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -76,6 +76,15 @@ int ei_get_type_internal(const char *buf, const int *index, *len = get32be(s); /* #digit_bytes */ break; + case ERL_NEW_PID_EXT: + *type = ERL_PID_EXT; + break; + case ERL_NEW_PORT_EXT: + *type = ERL_PORT_EXT; + break; + case ERL_NEWER_REFERENCE_EXT: + *type = ERL_NEW_REFERENCE_EXT; + break; default: *len = 0; break; diff --git a/lib/erl_interface/src/misc/putget.h b/lib/erl_interface/src/misc/putget.h index f7b42b6efa..afc04e32f9 100644 --- a/lib/erl_interface/src/misc/putget.h +++ b/lib/erl_interface/src/misc/putget.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2013. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/misc/show_msg.c b/lib/erl_interface/src/misc/show_msg.c index b08b17aea4..5868cccba6 100644 --- a/lib/erl_interface/src/misc/show_msg.c +++ b/lib/erl_interface/src/misc/show_msg.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2013. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -40,6 +40,8 @@ # include <time.h> # endif # endif +#else +# include <time.h> #endif #include "eiext.h" @@ -398,6 +400,7 @@ static void show_term(const char *termbuf, int *index, FILE *stream) break; case ERL_PID_EXT: + case ERL_NEW_PID_EXT: ei_decode_pid(termbuf,index,&pid); show_pid(stream,&pid); break; @@ -432,6 +435,7 @@ static void show_term(const char *termbuf, int *index, FILE *stream) case ERL_REFERENCE_EXT: case ERL_NEW_REFERENCE_EXT: + case ERL_NEWER_REFERENCE_EXT: ei_decode_ref(termbuf,index,&ref); fprintf(stream,"#Ref<%s",ref.node); for (i = 0; i < ref.len; i++) { @@ -441,6 +445,7 @@ static void show_term(const char *termbuf, int *index, FILE *stream) break; case ERL_PORT_EXT: + case ERL_NEW_PORT_EXT: ei_decode_port(termbuf,index,&port); fprintf(stream,"#Port<%s.%u.%u>",port.node,port.id,port.creation); break; diff --git a/lib/erl_interface/src/misc/show_msg.h b/lib/erl_interface/src/misc/show_msg.h index 1f1bd9cb17..de0f8fcdcd 100644 --- a/lib/erl_interface/src/misc/show_msg.h +++ b/lib/erl_interface/src/misc/show_msg.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2002-2009. All Rights Reserved. + * Copyright Ericsson AB 2002-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/not_used/ei_send.c b/lib/erl_interface/src/not_used/ei_send.c index 437b62cc5d..8071876677 100644 --- a/lib/erl_interface/src/not_used/ei_send.c +++ b/lib/erl_interface/src/not_used/ei_send.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2001-2009. All Rights Reserved. + * Copyright Ericsson AB 2001-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/not_used/ei_send_reg.c b/lib/erl_interface/src/not_used/ei_send_reg.c index f6b66e155c..ba9c7348f9 100644 --- a/lib/erl_interface/src/not_used/ei_send_reg.c +++ b/lib/erl_interface/src/not_used/ei_send_reg.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2001-2009. All Rights Reserved. + * Copyright Ericsson AB 2001-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/not_used/send_link.c b/lib/erl_interface/src/not_used/send_link.c index 3c907897e0..7be476fd93 100644 --- a/lib/erl_interface/src/not_used/send_link.c +++ b/lib/erl_interface/src/not_used/send_link.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/not_used/whereis.c b/lib/erl_interface/src/not_used/whereis.c index 3b7cfb0ee7..4072fa7b33 100644 --- a/lib/erl_interface/src/not_used/whereis.c +++ b/lib/erl_interface/src/not_used/whereis.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/prog/ei_fake_prog.c b/lib/erl_interface/src/prog/ei_fake_prog.c index 2d149aec0c..c7a16dc7c4 100644 --- a/lib/erl_interface/src/prog/ei_fake_prog.c +++ b/lib/erl_interface/src/prog/ei_fake_prog.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2002-2013. All Rights Reserved. + * Copyright Ericsson AB 2002-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/prog/erl_call.c b/lib/erl_interface/src/prog/erl_call.c index d36742c4f6..d233ed26a2 100644 --- a/lib/erl_interface/src/prog/erl_call.c +++ b/lib/erl_interface/src/prog/erl_call.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1996-2011. All Rights Reserved. + * Copyright Ericsson AB 1996-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/prog/erl_fake_prog.c b/lib/erl_interface/src/prog/erl_fake_prog.c index 80d72eb933..093bad8d7c 100644 --- a/lib/erl_interface/src/prog/erl_fake_prog.c +++ b/lib/erl_interface/src/prog/erl_fake_prog.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2002-2009. All Rights Reserved. + * Copyright Ericsson AB 2002-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/prog/erl_start.c b/lib/erl_interface/src/prog/erl_start.c index b7816f3ad4..d8f0632341 100644 --- a/lib/erl_interface/src/prog/erl_start.c +++ b/lib/erl_interface/src/prog/erl_start.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1997-2009. All Rights Reserved. + * Copyright Ericsson AB 1997-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/prog/erl_start.h b/lib/erl_interface/src/prog/erl_start.h index a78dd16edb..1d0d584c45 100644 --- a/lib/erl_interface/src/prog/erl_start.h +++ b/lib/erl_interface/src/prog/erl_start.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1997-2009. All Rights Reserved. + * Copyright Ericsson AB 1997-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/hash.h b/lib/erl_interface/src/registry/hash.h index 69882a79d9..7fcaced319 100644 --- a/lib/erl_interface/src/registry/hash.h +++ b/lib/erl_interface/src/registry/hash.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/hash_dohash.c b/lib/erl_interface/src/registry/hash_dohash.c index 0be54e0d3d..6f859cef2e 100644 --- a/lib/erl_interface/src/registry/hash_dohash.c +++ b/lib/erl_interface/src/registry/hash_dohash.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/hash_foreach.c b/lib/erl_interface/src/registry/hash_foreach.c index 2fe8eebfbc..b58df27e8e 100644 --- a/lib/erl_interface/src/registry/hash_foreach.c +++ b/lib/erl_interface/src/registry/hash_foreach.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/hash_freetab.c b/lib/erl_interface/src/registry/hash_freetab.c index e509af4a69..0a2c0dcfe6 100644 --- a/lib/erl_interface/src/registry/hash_freetab.c +++ b/lib/erl_interface/src/registry/hash_freetab.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/hash_insert.c b/lib/erl_interface/src/registry/hash_insert.c index d1b27ee6fe..0002cb64df 100644 --- a/lib/erl_interface/src/registry/hash_insert.c +++ b/lib/erl_interface/src/registry/hash_insert.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/hash_isprime.c b/lib/erl_interface/src/registry/hash_isprime.c index 18fd74fbc7..58166c6957 100644 --- a/lib/erl_interface/src/registry/hash_isprime.c +++ b/lib/erl_interface/src/registry/hash_isprime.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/hash_lookup.c b/lib/erl_interface/src/registry/hash_lookup.c index 3a6643ad69..31c30179df 100644 --- a/lib/erl_interface/src/registry/hash_lookup.c +++ b/lib/erl_interface/src/registry/hash_lookup.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/hash_newtab.c b/lib/erl_interface/src/registry/hash_newtab.c index 08ecc60f8a..4baa5a7b41 100644 --- a/lib/erl_interface/src/registry/hash_newtab.c +++ b/lib/erl_interface/src/registry/hash_newtab.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/hash_remove.c b/lib/erl_interface/src/registry/hash_remove.c index 63484daff6..080f15889e 100644 --- a/lib/erl_interface/src/registry/hash_remove.c +++ b/lib/erl_interface/src/registry/hash_remove.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/hash_resize.c b/lib/erl_interface/src/registry/hash_resize.c index c556ab7b68..031d8bfbf6 100644 --- a/lib/erl_interface/src/registry/hash_resize.c +++ b/lib/erl_interface/src/registry/hash_resize.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/hash_rlookup.c b/lib/erl_interface/src/registry/hash_rlookup.c index d774089e36..b0a948673a 100644 --- a/lib/erl_interface/src/registry/hash_rlookup.c +++ b/lib/erl_interface/src/registry/hash_rlookup.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/reg.h b/lib/erl_interface/src/registry/reg.h index 92798f02c8..261e36ac06 100644 --- a/lib/erl_interface/src/registry/reg.h +++ b/lib/erl_interface/src/registry/reg.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/reg_close.c b/lib/erl_interface/src/registry/reg_close.c index 1ac9e623a7..c1475383e1 100644 --- a/lib/erl_interface/src/registry/reg_close.c +++ b/lib/erl_interface/src/registry/reg_close.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/reg_delete.c b/lib/erl_interface/src/registry/reg_delete.c index b1fb7a1fac..8882f611bc 100644 --- a/lib/erl_interface/src/registry/reg_delete.c +++ b/lib/erl_interface/src/registry/reg_delete.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/reg_dirty.c b/lib/erl_interface/src/registry/reg_dirty.c index a128136054..00f19482c2 100644 --- a/lib/erl_interface/src/registry/reg_dirty.c +++ b/lib/erl_interface/src/registry/reg_dirty.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/reg_dump.c b/lib/erl_interface/src/registry/reg_dump.c index d1347491e5..43c9824433 100644 --- a/lib/erl_interface/src/registry/reg_dump.c +++ b/lib/erl_interface/src/registry/reg_dump.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2011. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/reg_free.c b/lib/erl_interface/src/registry/reg_free.c index aff6782925..d835520e76 100644 --- a/lib/erl_interface/src/registry/reg_free.c +++ b/lib/erl_interface/src/registry/reg_free.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/reg_get.c b/lib/erl_interface/src/registry/reg_get.c index e3f111e746..67d99e231e 100644 --- a/lib/erl_interface/src/registry/reg_get.c +++ b/lib/erl_interface/src/registry/reg_get.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/reg_getf.c b/lib/erl_interface/src/registry/reg_getf.c index 20071d6d95..35956c3d79 100644 --- a/lib/erl_interface/src/registry/reg_getf.c +++ b/lib/erl_interface/src/registry/reg_getf.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/reg_geti.c b/lib/erl_interface/src/registry/reg_geti.c index 14c8a17b51..09709fdf3d 100644 --- a/lib/erl_interface/src/registry/reg_geti.c +++ b/lib/erl_interface/src/registry/reg_geti.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/reg_getp.c b/lib/erl_interface/src/registry/reg_getp.c index b60aa9d37f..faff00bcb0 100644 --- a/lib/erl_interface/src/registry/reg_getp.c +++ b/lib/erl_interface/src/registry/reg_getp.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/reg_gets.c b/lib/erl_interface/src/registry/reg_gets.c index 32d34197c2..27fd83ac03 100644 --- a/lib/erl_interface/src/registry/reg_gets.c +++ b/lib/erl_interface/src/registry/reg_gets.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/reg_make.c b/lib/erl_interface/src/registry/reg_make.c index 11373afab9..ed77a740b6 100644 --- a/lib/erl_interface/src/registry/reg_make.c +++ b/lib/erl_interface/src/registry/reg_make.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/reg_open.c b/lib/erl_interface/src/registry/reg_open.c index 9965416599..73c2140145 100644 --- a/lib/erl_interface/src/registry/reg_open.c +++ b/lib/erl_interface/src/registry/reg_open.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/reg_purge.c b/lib/erl_interface/src/registry/reg_purge.c index b585a43a64..08483e32f5 100644 --- a/lib/erl_interface/src/registry/reg_purge.c +++ b/lib/erl_interface/src/registry/reg_purge.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/reg_resize.c b/lib/erl_interface/src/registry/reg_resize.c index 18a2c2670e..b451a28348 100644 --- a/lib/erl_interface/src/registry/reg_resize.c +++ b/lib/erl_interface/src/registry/reg_resize.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/reg_restore.c b/lib/erl_interface/src/registry/reg_restore.c index 49e8f2740d..75d073303f 100644 --- a/lib/erl_interface/src/registry/reg_restore.c +++ b/lib/erl_interface/src/registry/reg_restore.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2011. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/reg_set.c b/lib/erl_interface/src/registry/reg_set.c index 0519246a7f..95b90adb87 100644 --- a/lib/erl_interface/src/registry/reg_set.c +++ b/lib/erl_interface/src/registry/reg_set.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/reg_setf.c b/lib/erl_interface/src/registry/reg_setf.c index abbe409f10..e0879cb3d5 100644 --- a/lib/erl_interface/src/registry/reg_setf.c +++ b/lib/erl_interface/src/registry/reg_setf.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/reg_seti.c b/lib/erl_interface/src/registry/reg_seti.c index afb3b1fee7..507ed9907e 100644 --- a/lib/erl_interface/src/registry/reg_seti.c +++ b/lib/erl_interface/src/registry/reg_seti.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/reg_setp.c b/lib/erl_interface/src/registry/reg_setp.c index dd8038a811..1dd158778a 100644 --- a/lib/erl_interface/src/registry/reg_setp.c +++ b/lib/erl_interface/src/registry/reg_setp.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/reg_sets.c b/lib/erl_interface/src/registry/reg_sets.c index 7f0e64162f..d281d732b7 100644 --- a/lib/erl_interface/src/registry/reg_sets.c +++ b/lib/erl_interface/src/registry/reg_sets.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/reg_stat.c b/lib/erl_interface/src/registry/reg_stat.c index e876aa566c..e946199f4a 100644 --- a/lib/erl_interface/src/registry/reg_stat.c +++ b/lib/erl_interface/src/registry/reg_stat.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/src/registry/reg_tabstat.c b/lib/erl_interface/src/registry/reg_tabstat.c index 2c5d185ec1..1a3e654090 100644 --- a/lib/erl_interface/src/registry/reg_tabstat.c +++ b/lib/erl_interface/src/registry/reg_tabstat.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2009. All Rights Reserved. + * Copyright Ericsson AB 1998-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/Makefile b/lib/erl_interface/test/Makefile index 800573e8e4..94f4b422d6 100644 --- a/lib/erl_interface/test/Makefile +++ b/lib/erl_interface/test/Makefile @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 1997-2012. All Rights Reserved. +# Copyright Ericsson AB 1997-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/Makefile.src b/lib/erl_interface/test/Makefile.src index f105a1a3d1..8cf2ea0933 100644 --- a/lib/erl_interface/test/Makefile.src +++ b/lib/erl_interface/test/Makefile.src @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 1997-2009. All Rights Reserved. +# Copyright Ericsson AB 1997-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/all_SUITE_data/Makefile.first b/lib/erl_interface/test/all_SUITE_data/Makefile.first index fe295b5e5c..b83fa6ff5c 100644 --- a/lib/erl_interface/test/all_SUITE_data/Makefile.first +++ b/lib/erl_interface/test/all_SUITE_data/Makefile.first @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2003-2009. All Rights Reserved. +# Copyright Ericsson AB 2003-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/all_SUITE_data/Makefile.src b/lib/erl_interface/test/all_SUITE_data/Makefile.src index 476784230b..4f27b097c8 100644 --- a/lib/erl_interface/test/all_SUITE_data/Makefile.src +++ b/lib/erl_interface/test/all_SUITE_data/Makefile.src @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2003-2012. All Rights Reserved. +# Copyright Ericsson AB 2003-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/all_SUITE_data/ei_runner.c b/lib/erl_interface/test/all_SUITE_data/ei_runner.c index 3a0de22df4..cd7a67c57c 100644 --- a/lib/erl_interface/test/all_SUITE_data/ei_runner.c +++ b/lib/erl_interface/test/all_SUITE_data/ei_runner.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2001-2014. All Rights Reserved. + * Copyright Ericsson AB 2001-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -198,8 +198,8 @@ void free_packet(char* packet) * ----- ---------------------------- * [$b|Bytes] {bytes, Bytes} * [$e] eot - * [$f] test_server:fail() - * [$f|Reason] test_server:fail(Reason) + * [$f] ct:fail() + * [$f|Reason] ct:fail(Reason) * [$t|EncodedTerm] {term, Term} * [$N] 'NULL' * [$m|Message] io:format("~s", [Message]) (otherwise ignored) @@ -211,7 +211,7 @@ void free_packet(char* packet) * you implement a test case entirely in C code. * * If the ok argument is zero, a [$f] reply will be sent to the - * Erlang side (causing test_server:fail() to be called); otherwise, + * Erlang side (causing ct:fail() to be called); otherwise, * the atom 'eot' will be sent to Erlang. * * If you need to provide more details on a failure, use the fail() function. @@ -251,16 +251,21 @@ do_report(file, line, ok) /* - * This function causes a call to test_server:fail(Reason) on the + * This function causes a call to ct:fail(Reason) on the * Erlang side. */ -void do_fail(char* file, int line, char* reason) +void do_fail(const char* file, int line, const char* reason, ...) { + va_list ap; char sbuf[2048]; + char* sp = sbuf; - sbuf[0] = 'f'; - sprintf(sbuf+1, "%s, line %d: %s", file, line, reason); + *sp++ = 'f'; + sp += sprintf(sp, "%s, line %d: ", file, line); + va_start(ap, reason); + sp += vsprintf(sp, reason, ap); + va_end(ap); reply(sbuf, 1+strlen(sbuf+1)); } diff --git a/lib/erl_interface/test/all_SUITE_data/ei_runner.h b/lib/erl_interface/test/all_SUITE_data/ei_runner.h index 62997d00a0..2608661303 100644 --- a/lib/erl_interface/test/all_SUITE_data/ei_runner.h +++ b/lib/erl_interface/test/all_SUITE_data/ei_runner.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2001-2014. All Rights Reserved. + * Copyright Ericsson AB 2001-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -52,10 +52,11 @@ void free_packet(char*); */ #define fail(reason) do_fail(__FILE__, __LINE__, reason) +#define fail1(reason, a1) do_fail(__FILE__, __LINE__, reason, a1) #define report(ok) do_report(__FILE__, __LINE__, ok) void do_report(char* file, int line, int ok); -void do_fail(char* file, int line, char* reason); +void do_fail(const char* file, int line, const char* reason, ...); void send_buffer(char* buf, int size); void message(char* format, ...); diff --git a/lib/erl_interface/test/all_SUITE_data/gccifier.c b/lib/erl_interface/test/all_SUITE_data/gccifier.c index ca022eb390..0c3ef915fb 100644 --- a/lib/erl_interface/test/all_SUITE_data/gccifier.c +++ b/lib/erl_interface/test/all_SUITE_data/gccifier.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2004-2012. All Rights Reserved. + * Copyright Ericsson AB 2004-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/all_SUITE_data/gccifier.sh b/lib/erl_interface/test/all_SUITE_data/gccifier.sh index 594608df9f..179394bb4e 100755 --- a/lib/erl_interface/test/all_SUITE_data/gccifier.sh +++ b/lib/erl_interface/test/all_SUITE_data/gccifier.sh @@ -2,7 +2,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2005-2009. All Rights Reserved. +# Copyright Ericsson AB 2005-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/all_SUITE_data/init_tc.erl b/lib/erl_interface/test/all_SUITE_data/init_tc.erl index 74d32d9ea4..d9ad291f3d 100644 --- a/lib/erl_interface/test/all_SUITE_data/init_tc.erl +++ b/lib/erl_interface/test/all_SUITE_data/init_tc.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1997-2013. All Rights Reserved. +%% Copyright Ericsson AB 1997-2016. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/all_SUITE_data/reclaim.h b/lib/erl_interface/test/all_SUITE_data/reclaim.h index eb0f7ce9fa..fe99bb0afc 100644 --- a/lib/erl_interface/test/all_SUITE_data/reclaim.h +++ b/lib/erl_interface/test/all_SUITE_data/reclaim.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2001-2009. All Rights Reserved. + * Copyright Ericsson AB 2001-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/all_SUITE_data/runner.c b/lib/erl_interface/test/all_SUITE_data/runner.c index 47d918308d..42e8bb03e5 100644 --- a/lib/erl_interface/test/all_SUITE_data/runner.c +++ b/lib/erl_interface/test/all_SUITE_data/runner.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1997-2013. All Rights Reserved. + * Copyright Ericsson AB 1997-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -200,8 +200,8 @@ char *read_packet(int *len) * ----- ---------------------------- * [$b|Bytes] {bytes, Bytes} * [$e] eot - * [$f] test_server:fail() - * [$f|Reason] test_server:fail(Reason) + * [$f] ct:fail() + * [$f|Reason] ct:fail(Reason) * [$t|EncodedTerm] {term, Term} * [$N] 'NULL' * [$m|Message] io:format("~s", [Message]) (otherwise ignored) @@ -213,7 +213,7 @@ char *read_packet(int *len) * you implement a test case entirely in C code. * * If the ok argument is zero, a [$f] reply will be sent to the - * Erlang side (causing test_server:fail() to be called); otherwise, + * Erlang side (causing ct:fail() to be called); otherwise, * the atom 'eot' will be sent to Erlang. * * If you need to provide more details on a failure, use the fail() function. @@ -253,7 +253,7 @@ do_report(file, line, ok) /* - * This function causes a call to test_server:fail(Reason) on the + * This function causes a call to ct:fail(Reason) on the * Erlang side. */ diff --git a/lib/erl_interface/test/all_SUITE_data/runner.h b/lib/erl_interface/test/all_SUITE_data/runner.h index 2af267ecb9..493602869f 100644 --- a/lib/erl_interface/test/all_SUITE_data/runner.h +++ b/lib/erl_interface/test/all_SUITE_data/runner.h @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1997-2009. All Rights Reserved. + * Copyright Ericsson AB 1997-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/ei_accept_SUITE.erl b/lib/erl_interface/test/ei_accept_SUITE.erl index 144ec99e0a..e06ee762d7 100644 --- a/lib/erl_interface/test/ei_accept_SUITE.erl +++ b/lib/erl_interface/test/ei_accept_SUITE.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2001-2011. All Rights Reserved. +%% Copyright Ericsson AB 2001-2016. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -21,97 +21,70 @@ %% -module(ei_accept_SUITE). --include_lib("test_server/include/test_server.hrl"). +-include_lib("common_test/include/ct.hrl"). -include("ei_accept_SUITE_data/ei_accept_test_cases.hrl"). --export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, - init_per_group/2,end_per_group/2, - init_per_testcase/2, end_per_testcase/2, - ei_accept/1, ei_threaded_accept/1]). +-export([all/0, suite/0, + ei_accept/1, ei_threaded_accept/1]). -import(runner, [get_term/1,send_term/2]). -suite() -> [{ct_hooks,[ts_install_cth]}]. +suite() -> + [{ct_hooks,[ts_install_cth]}, + {timetrap, {seconds, 30}}]. all() -> [ei_accept, ei_threaded_accept]. -groups() -> - []. - -init_per_suite(Config) -> - Config. - -end_per_suite(Config) -> - ok. - -init_per_group(_GroupName, Config) -> - Config. - -end_per_group(_GroupName, Config) -> - Config. - - -init_per_testcase(_Case, Config) -> - Dog = ?t:timetrap(?t:seconds(30)), - [{watchdog, Dog}|Config]. - -end_per_testcase(_Case, Config) -> - Dog = ?config(watchdog, Config), - test_server:timetrap_cancel(Dog), - ok. - ei_accept(Config) when is_list(Config) -> - ?line P = runner:start(?interpret), - ?line 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0), - - ?line Myname= hd(tl(string:tokens(atom_to_list(node()), "@"))), - ?line io:format("Myname ~p ~n", [Myname]), - ?line EINode= list_to_atom("c42@"++Myname), - ?line io:format("EINode ~p ~n", [EINode]), - ?line Self= self(), - ?line TermToSend= {call, Self, "Test"}, - ?line F= fun() -> - case waitfornode("c42",20) of - true -> - {any, EINode} ! TermToSend, - Self ! sent_ok; - false -> - Self ! never_published - end, - ok - end, - - ?line spawn(F), - ?line Port = 6543, - ?line {ok, Fd, _Node} = ei_accept(P, Port), - ?line TermReceived= ei_receive(P, Fd), - ?line io:format("Sent ~p received ~p ~n", [TermToSend, TermReceived]), - ?line TermToSend= TermReceived, - ?line receive - sent_ok -> - ok; - Unknown -> - io:format("~p ~n", [Unknown]) - after 1000 -> - io:format("timeout ~n") - end, - ?line runner:finish(P), + P = runner:start(?interpret), + 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0), + + Myname = hd(tl(string:tokens(atom_to_list(node()), "@"))), + io:format("Myname ~p ~n", [Myname]), + EINode = list_to_atom("c42@"++Myname), + io:format("EINode ~p ~n", [EINode]), + Self = self(), + TermToSend= {call, Self, "Test"}, + F= fun() -> + case waitfornode("c42",20) of + true -> + {any, EINode} ! TermToSend, + Self ! sent_ok; + false -> + Self ! never_published + end, + ok + end, + + spawn(F), + Port = 6543, + {ok, Fd, _Node} = ei_accept(P, Port), + TermReceived= ei_receive(P, Fd), + io:format("Sent ~p received ~p ~n", [TermToSend, TermReceived]), + TermToSend= TermReceived, + receive + sent_ok -> + ok; + Unknown -> + io:format("~p ~n", [Unknown]) + after 1000 -> + io:format("timeout ~n") + end, + runner:finish(P), ok. ei_threaded_accept(Config) when is_list(Config) -> - ?line Einode = filename:join(?config(data_dir, Config), "eiaccnode"), - ?line N = 1, % 3, - ?line Host = atom_to_list(node()), - ?line Port = 6767, - ?line start_einode(Einode, N, Host, Port), - ?line io:format("started eiaccnode"), - %%?line spawn_link(fun() -> start_einode(Einode, N, Host, Port) end), - ?line TestServerPid = self(), - ?line [ spawn_link(fun() -> send_rec_einode(I, TestServerPid) end) - || I <- lists:seq(0, N-1) ], - ?line [ receive I -> ok end - || I <- lists:seq(0, N-1) ], + Einode = filename:join(proplists:get_value(data_dir, Config), "eiaccnode"), + N = 1, % 3, + Host = atom_to_list(node()), + Port = 6767, + start_einode(Einode, N, Host, Port), + io:format("started eiaccnode"), + %%spawn_link(fun() -> start_einode(Einode, N, Host, Port) end), + TestServerPid = self(), + [spawn_link(fun() -> send_rec_einode(I, TestServerPid) end) || I <- lists:seq(0, N-1)], + [receive I -> ok end || I <- lists:seq(0, N-1) ], ok. waitfornode(String,0) -> @@ -120,66 +93,61 @@ waitfornode(String,0) -> waitfornode(String,N) -> Registered = [X || {X,_} <- element(2,erl_epmd:names())], case lists:member(String,Registered) of - true -> - true; - false -> - timer:sleep(1000), - waitfornode(String,N-1) + true -> + true; + false -> + timer:sleep(1000), + waitfornode(String,N-1) end. send_rec_einode(N, TestServerPid) -> - ?line Myname= hd(tl(string:tokens(atom_to_list(node()), "@"))), - ?line FirstPart = "eiacc" ++ integer_to_list(N), - ?line EINode= list_to_atom(FirstPart ++ "@" ++ Myname), - ?line io:format("EINode ~p ~n", [EINode]), - ?line Self= self(), - ?line case waitfornode(FirstPart,20) of - true -> ok; - false -> test_server:fail({never_published,EINode}) - end, - ?line {any, EINode} ! Self, - ?line receive - {N,_}=X -> - ?line io:format("Received by ~s ~p~n", [EINode, X]), - ?line TestServerPid ! N, - ?line X - after 10000 -> - ?line test_server:fail(EINode) - end. + Myname= hd(tl(string:tokens(atom_to_list(node()), "@"))), + FirstPart = "eiacc" ++ integer_to_list(N), + EINode= list_to_atom(FirstPart ++ "@" ++ Myname), + io:format("EINode ~p ~n", [EINode]), + Self= self(), + case waitfornode(FirstPart,20) of + true -> ok; + false -> ct:fail({never_published,EINode}) + end, + {any, EINode} ! Self, + receive + {N,_}=X -> + io:format("Received by ~s ~p~n", [EINode, X]), + TestServerPid ! N, + X + after 10000 -> + ct:fail(EINode) + end. start_einode(Einode, N, Host, Port) -> Einodecmd = Einode ++ " " ++ atom_to_list(erlang:get_cookie()) - ++ " " ++ integer_to_list(N) ++ " " ++ Host ++ " " - ++ integer_to_list(Port) ++ " nothreads", + ++ " " ++ integer_to_list(N) ++ " " ++ Host ++ " " + ++ integer_to_list(Port) ++ " nothreads", io:format("Einodecmd ~p ~n", [Einodecmd]), - ?line open_port({spawn, Einodecmd}, []), + open_port({spawn, Einodecmd}, []), ok. - %%% Interface functions for ei (erl_interface) functions. ei_connect_init(P, Num, Cookie, Creation) -> send_command(P, ei_connect_init, [Num,Cookie,Creation]), case get_term(P) of - {term,Int} when is_integer(Int) -> Int + {term,Int} when is_integer(Int) -> Int end. ei_accept(P, PortNo) -> send_command(P, ei_accept, [PortNo]), case get_term(P) of - {term,{Fd, _, Node}} when Fd >= 0 -> {ok, Fd, Node}; - {term,{_Fd, Errno, _Node}} -> {error,Errno} + {term,{Fd, _, Node}} when Fd >= 0 -> {ok, Fd, Node}; + {term,{_Fd, Errno, _Node}} -> {error,Errno} end. ei_receive(P, Fd) -> send_command(P, ei_receive, [Fd]), - {term, T}= get_term(P), + {term, T} = get_term(P), T. send_command(P, Name, Args) -> runner:send_term(P, {Name,list_to_tuple(Args)}). - - - - diff --git a/lib/erl_interface/test/ei_accept_SUITE_data/Makefile.first b/lib/erl_interface/test/ei_accept_SUITE_data/Makefile.first index 8153368870..6e89cc5a78 100644 --- a/lib/erl_interface/test/ei_accept_SUITE_data/Makefile.first +++ b/lib/erl_interface/test/ei_accept_SUITE_data/Makefile.first @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2001-2009. All Rights Reserved. +# Copyright Ericsson AB 2001-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/ei_accept_SUITE_data/Makefile.src b/lib/erl_interface/test/ei_accept_SUITE_data/Makefile.src index d900b4aa8f..10ef437f8b 100644 --- a/lib/erl_interface/test/ei_accept_SUITE_data/Makefile.src +++ b/lib/erl_interface/test/ei_accept_SUITE_data/Makefile.src @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2001-2009. All Rights Reserved. +# Copyright Ericsson AB 2001-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/ei_accept_SUITE_data/ei_accept_test.c b/lib/erl_interface/test/ei_accept_SUITE_data/ei_accept_test.c index ad68ba9bb5..7b81ee5491 100644 --- a/lib/erl_interface/test/ei_accept_SUITE_data/ei_accept_test.c +++ b/lib/erl_interface/test/ei_accept_SUITE_data/ei_accept_test.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2001-2009. All Rights Reserved. + * Copyright Ericsson AB 2001-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/ei_accept_SUITE_data/eiaccnode.c b/lib/erl_interface/test/ei_accept_SUITE_data/eiaccnode.c index 6a3d2bc157..308f843530 100644 --- a/lib/erl_interface/test/ei_accept_SUITE_data/eiaccnode.c +++ b/lib/erl_interface/test/ei_accept_SUITE_data/eiaccnode.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2001-2009. All Rights Reserved. + * Copyright Ericsson AB 2001-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/ei_connect_SUITE.erl b/lib/erl_interface/test/ei_connect_SUITE.erl index 3385d1eb6c..66498deadc 100644 --- a/lib/erl_interface/test/ei_connect_SUITE.erl +++ b/lib/erl_interface/test/ei_connect_SUITE.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2001-2011. All Rights Reserved. +%% Copyright Ericsson AB 2001-2016. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -21,176 +21,148 @@ %% -module(ei_connect_SUITE). --include_lib("test_server/include/test_server.hrl"). +-include_lib("common_test/include/ct.hrl"). -include("ei_connect_SUITE_data/ei_connect_test_cases.hrl"). --export([ - all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, - init_per_group/2,end_per_group/2, - init_per_testcase/2, - end_per_testcase/2, - - ei_send/1, - ei_reg_send/1, - ei_format_pid/1, - ei_rpc/1, - rpc_test/1, - ei_send_funs/1, - ei_threaded_send/1, - ei_set_get_tracelevel/1 - ]). +-export([all/0, suite/0, + ei_send/1, + ei_reg_send/1, + ei_format_pid/1, + ei_rpc/1, + rpc_test/1, + ei_send_funs/1, + ei_threaded_send/1, + ei_set_get_tracelevel/1]). -import(runner, [get_term/1,send_term/2]). -suite() -> [{ct_hooks,[ts_install_cth]}]. +suite() -> + [{ct_hooks,[ts_install_cth]}, + {timetrap, {seconds, 30}}]. all() -> [ei_send, ei_reg_send, ei_rpc, ei_format_pid, ei_send_funs, ei_threaded_send, ei_set_get_tracelevel]. -groups() -> - []. - -init_per_suite(Config) -> - Config. - -end_per_suite(_Config) -> - ok. - -init_per_group(_GroupName, Config) -> - Config. - -end_per_group(_GroupName, Config) -> - Config. - -init_per_testcase(_Case, Config) -> - Dog = ?t:timetrap(?t:minutes(0.25)), - [{watchdog, Dog}|Config]. - -end_per_testcase(_Case, Config) -> - Dog = ?config(watchdog, Config), - test_server:timetrap_cancel(Dog), - ok. - ei_send(Config) when is_list(Config) -> - ?line P = runner:start(?interpret), - ?line 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0), - ?line {ok,Fd} = ei_connect(P, node()), + P = runner:start(?interpret), + 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0), + {ok,Fd} = ei_connect(P, node()), - ?line ok = ei_send(P, Fd, self(), AMsg={a,message}), - ?line receive AMsg -> ok end, + ok = ei_send(P, Fd, self(), AMsg={a,message}), + receive AMsg -> ok end, - ?line runner:send_eot(P), - ?line runner:recv_eot(P), + runner:send_eot(P), + runner:recv_eot(P), ok. ei_format_pid(Config) when is_list(Config) -> - ?line S = self(), - ?line P = runner:start(?interpret), - ?line 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0), - ?line {ok,Fd} = ei_connect(P, node()), + S = self(), + P = runner:start(?interpret), + 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0), + {ok,Fd} = ei_connect(P, node()), - ?line ok = ei_format_pid(P, Fd, S), - ?line receive S -> ok end, + ok = ei_format_pid(P, Fd, S), + receive S -> ok end, - ?line runner:send_eot(P), - ?line runner:recv_eot(P), + runner:send_eot(P), + runner:recv_eot(P), ok. ei_send_funs(Config) when is_list(Config) -> - ?line P = runner:start(?interpret), - ?line 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0), - ?line {ok,Fd} = ei_connect(P, node()), - - ?line Fun1 = fun ei_send/1, - ?line Fun2 = fun(X) -> P, X, Fd, Fun1 end, - - ?line AMsg={Fun1,Fun2}, + P = runner:start(?interpret), + 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0), + {ok,Fd} = ei_connect(P, node()), + + Fun1 = fun ei_send/1, + Fun2 = fun(X) -> P, X, Fd, Fun1 end, + + AMsg={Fun1,Fun2}, %%AMsg={wait_with_funs, new_dist_format}, - ?line ok = ei_send_funs(P, Fd, self(), AMsg), - ?line EIMsg = receive M -> M end, - ?line EIMsg = AMsg, + ok = ei_send_funs(P, Fd, self(), AMsg), + EIMsg = receive M -> M end, + EIMsg = AMsg, - ?line runner:send_eot(P), - ?line runner:recv_eot(P), + runner:send_eot(P), + runner:recv_eot(P), ok. ei_reg_send(Config) when is_list(Config) -> - ?line P = runner:start(?interpret), - ?line 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0), - ?line {ok,Fd} = ei_connect(P, node()), + P = runner:start(?interpret), + 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0), + {ok,Fd} = ei_connect(P, node()), ARegName = a_strange_registred_name, - ?line register(ARegName, self()), - ?line ok = ei_reg_send(P, Fd, ARegName, AMsg={another,[strange],message}), - ?line receive AMsg -> ok end, + register(ARegName, self()), + ok = ei_reg_send(P, Fd, ARegName, AMsg={another,[strange],message}), + receive AMsg -> ok end, - ?line runner:send_eot(P), - ?line runner:recv_eot(P), + runner:send_eot(P), + runner:recv_eot(P), ok. ei_threaded_send(Config) when is_list(Config) -> - ?line Einode = filename:join(?config(data_dir, Config), "einode"), - ?line N = 15, - ?line Host = atom_to_list(node()), - ?line TestServerPid = self(), - ?line [ spawn_link(fun() -> rec_einode(I, TestServerPid) end) - || I <- lists:seq(0, N-1) ], - ?line [ receive {I,registered} -> ok end - || I <- lists:seq(0, N-1) ], - ?line spawn_link(fun() -> start_einode(Einode, N, Host) end), - ?line [ receive I -> ok end - || I <- lists:seq(0, N-1) ], + Einode = filename:join(proplists:get_value(data_dir, Config), "einode"), + N = 15, + Host = atom_to_list(node()), + TestServerPid = self(), + [ spawn_link(fun() -> rec_einode(I, TestServerPid) end) + || I <- lists:seq(0, N-1) ], + [ receive {I,registered} -> ok end + || I <- lists:seq(0, N-1) ], + spawn_link(fun() -> start_einode(Einode, N, Host) end), + [ receive I -> ok end + || I <- lists:seq(0, N-1) ], ok. rec_einode(N, TestServerPid) -> - ?line Regname = list_to_atom("mth"++integer_to_list(N)), - ?line register(Regname, self()), - ?line TestServerPid ! {N, registered}, - ?line io:format("~p waiting~n", [Regname]), - ?line receive - X -> - ?line io:format("Received by ~s ~p~n", [Regname, X]), - ?line TestServerPid ! N, - ?line X - after 10000 -> - ?line test_server:fail(Regname) - end. + Regname = list_to_atom("mth"++integer_to_list(N)), + register(Regname, self()), + TestServerPid ! {N, registered}, + io:format("~p waiting~n", [Regname]), + receive + X -> + io:format("Received by ~s ~p~n", [Regname, X]), + TestServerPid ! N, + X + after 10000 -> + ct:fail(Regname) + end. start_einode(Einode, N, Host) -> Einodecmd = Einode ++ " " ++ atom_to_list(erlang:get_cookie()) - ++ " " ++ integer_to_list(N) ++ " " ++ Host, + ++ " " ++ integer_to_list(N) ++ " " ++ Host, io:format("Einodecmd ~p ~n", [Einodecmd]), - ?line open_port({spawn, Einodecmd}, []), + open_port({spawn, Einodecmd}, []), ok. ei_rpc(Config) when is_list(Config) -> - ?line P = runner:start(?interpret), - ?line 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0), - ?line {ok,Fd} = ei_connect(P, node()), + P = runner:start(?interpret), + 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0), + {ok,Fd} = ei_connect(P, node()), - ?line S= "Hej du glade!", SRev = lists:reverse(S), - ?line X = ei_rpc(P, Fd, self(), {?MODULE, rpc_test}, [SRev]), - ?line {term, S}= X, + S= "Hej du glade!", SRev = lists:reverse(S), + X = ei_rpc(P, Fd, self(), {?MODULE, rpc_test}, [SRev]), + {term, S}= X, - ?line runner:send_eot(P), - ?line runner:recv_eot(P), + runner:send_eot(P), + runner:recv_eot(P), ok. ei_set_get_tracelevel(Config) when is_list(Config) -> - ?line P = runner:start(?interpret), - ?line 5 = ei_set_get_tracelevel(P, 5), - ?line 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0), - ?line {ok,Fd} = ei_connect(P, node()), + P = runner:start(?interpret), + 5 = ei_set_get_tracelevel(P, 5), + 0 = ei_connect_init(P, 42, erlang:get_cookie(), 0), + {ok,Fd} = ei_connect(P, node()), - ?line S= "Hej du glade!", SRev = lists:reverse(S), - ?line X = ei_rpc(P, Fd, self(), {?MODULE, rpc_test}, [SRev]), - ?line {term, S}= X, + S= "Hej du glade!", SRev = lists:reverse(S), + X = ei_rpc(P, Fd, self(), {?MODULE, rpc_test}, [SRev]), + {term, S}= X, - ?line 0 = ei_set_get_tracelevel(P, 0), + 0 = ei_set_get_tracelevel(P, 0), - ?line runner:send_eot(P), - ?line runner:recv_eot(P), + runner:send_eot(P), + runner:recv_eot(P), ok. @@ -199,20 +171,20 @@ ei_set_get_tracelevel(Config) when is_list(Config) -> ei_connect_init(P, Num, Cookie, Creation) -> send_command(P, ei_connect_init, [Num,Cookie,Creation]), case get_term(P) of - {term,Int} when is_integer(Int) -> Int + {term,Int} when is_integer(Int) -> Int end. ei_connect(P, Node) -> send_command(P, ei_connect, [Node]), case get_term(P) of - {term,{Fd,_}} when Fd >= 0 -> {ok,Fd}; - {term,{-1,Errno}} -> {error,Errno} + {term,{Fd,_}} when Fd >= 0 -> {ok,Fd}; + {term,{-1,Errno}} -> {error,Errno} end. ei_set_get_tracelevel(P, Tracelevel) -> send_command(P, ei_set_get_tracelevel, [Tracelevel]), case get_term(P) of - {term,{tracelevel, Level}} when is_integer(Level) -> Level + {term,{tracelevel, Level}} when is_integer(Level) -> Level end. ei_send(P, Fd, To, Msg) -> @@ -238,12 +210,12 @@ ei_rpc(P, Fd, To, Func, Msg) -> get_send_result(P) -> case get_term(P) of - {term,{0,_}} -> ok; - {term,{1,_}} -> ok; - {term,{-1,Errno}} -> {error,Errno}; - {term,{Res,Errno}}-> - io:format("Return value: ~p\nerl_errno: ~p", [Res,Errno]), - ?t:fail(bad_return_value) + {term,{0,_}} -> ok; + {term,{1,_}} -> ok; + {term,{-1,Errno}} -> {error,Errno}; + {term,{Res,Errno}}-> + io:format("Return value: ~p\nerl_errno: ~p", [Res,Errno]), + ct:fail(bad_return_value) end. send_command(P, Name, Args) -> diff --git a/lib/erl_interface/test/ei_connect_SUITE_data/Makefile.first b/lib/erl_interface/test/ei_connect_SUITE_data/Makefile.first index feee049795..1a9b4dbcea 100644 --- a/lib/erl_interface/test/ei_connect_SUITE_data/Makefile.first +++ b/lib/erl_interface/test/ei_connect_SUITE_data/Makefile.first @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2001-2009. All Rights Reserved. +# Copyright Ericsson AB 2001-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/ei_connect_SUITE_data/Makefile.src b/lib/erl_interface/test/ei_connect_SUITE_data/Makefile.src index 49e5e8f8e2..c2d8261dd8 100644 --- a/lib/erl_interface/test/ei_connect_SUITE_data/Makefile.src +++ b/lib/erl_interface/test/ei_connect_SUITE_data/Makefile.src @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2001-2009. All Rights Reserved. +# Copyright Ericsson AB 2001-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -23,9 +23,10 @@ include @erl_interface_mk_include@ CC0 = @CC@ CC = ..@DS@all_SUITE_data@DS@gccifier@exe@ -CC"$(CC0)" LD = @LD@ +LIBERL = @erl_interface_lib@ LIBEI = @erl_interface_eilib@ LIBFLAGS = ../all_SUITE_data/ei_runner@obj@ \ - $(LIBEI) @LIBS@ @erl_interface_sock_libs@ \ + $(LIBERL) $(LIBEI) @LIBS@ @erl_interface_sock_libs@ \ @erl_interface_threadlib@ CFLAGS = @EI_CFLAGS@ $(THR_DEFS) -I@erl_interface_include@ -I../all_SUITE_data EI_CONNECT_OBJS = ei_connect_test@obj@ ei_connect_test_decl@obj@ diff --git a/lib/erl_interface/test/ei_connect_SUITE_data/ei_connect_test.c b/lib/erl_interface/test/ei_connect_SUITE_data/ei_connect_test.c index cfad73fd07..6a3796dd24 100644 --- a/lib/erl_interface/test/ei_connect_SUITE_data/ei_connect_test.c +++ b/lib/erl_interface/test/ei_connect_SUITE_data/ei_connect_test.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2001-2011. All Rights Reserved. + * Copyright Ericsson AB 2001-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/ei_connect_SUITE_data/einode.c b/lib/erl_interface/test/ei_connect_SUITE_data/einode.c index f151f6d2d6..bb71575740 100644 --- a/lib/erl_interface/test/ei_connect_SUITE_data/einode.c +++ b/lib/erl_interface/test/ei_connect_SUITE_data/einode.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2001-2009. All Rights Reserved. + * Copyright Ericsson AB 2001-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -35,6 +35,7 @@ #endif #include "ei.h" +#include "erl_interface.h" #ifdef VXWORKS #define MAIN cnode @@ -115,6 +116,8 @@ MAIN(int argc, char *argv[]) if (argc < 3) exit(1); + erl_init(NULL, 0); + cookie = argv[1]; n = atoi(argv[2]); if (n > 100) diff --git a/lib/erl_interface/test/ei_decode_SUITE.erl b/lib/erl_interface/test/ei_decode_SUITE.erl index 0abcf50fb5..1495a0d5d9 100644 --- a/lib/erl_interface/test/ei_decode_SUITE.erl +++ b/lib/erl_interface/test/ei_decode_SUITE.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2004-2013. All Rights Reserved. +%% Copyright Ericsson AB 2004-2016. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -21,23 +21,18 @@ %% -module(ei_decode_SUITE). --include_lib("test_server/include/test_server.hrl"). +-include_lib("common_test/include/ct.hrl"). -include("ei_decode_SUITE_data/ei_decode_test_cases.hrl"). --export( - [ - all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, - init_per_group/2,end_per_group/2, init_per_testcase/2, - end_per_testcase/2, - test_ei_decode_long/1, - test_ei_decode_ulong/1, - test_ei_decode_longlong/1, - test_ei_decode_ulonglong/1, - test_ei_decode_char/1, - test_ei_decode_nonoptimal/1, - test_ei_decode_misc/1, - test_ei_decode_utf8_atom/1 - ]). +-export([all/0, suite/0, + test_ei_decode_long/1, + test_ei_decode_ulong/1, + test_ei_decode_longlong/1, + test_ei_decode_ulonglong/1, + test_ei_decode_char/1, + test_ei_decode_nonoptimal/1, + test_ei_decode_misc/1, + test_ei_decode_utf8_atom/1]). suite() -> [{ct_hooks,[ts_install_cth]}]. @@ -47,27 +42,6 @@ all() -> test_ei_decode_char, test_ei_decode_nonoptimal, test_ei_decode_misc, test_ei_decode_utf8_atom]. -groups() -> - []. - -init_per_suite(Config) -> - Config. - -end_per_suite(_Config) -> - ok. - -init_per_group(_GroupName, Config) -> - Config. - -end_per_group(_GroupName, Config) -> - Config. - -init_per_testcase(_TC, Config) -> - Config. - -end_per_testcase(_RC, Config) -> - Config. - %% --------------------------------------------------------------------------- % NOTE: for historical reasons we don't pach as tight as we can, @@ -76,55 +50,51 @@ end_per_testcase(_RC, Config) -> %% ######################################################################## %% -test_ei_decode_long(suite) -> []; test_ei_decode_long(Config) when is_list(Config) -> - ?line P = runner:start(?test_ei_decode_long), + P = runner:start(?test_ei_decode_long), send_integers(P), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. %% ######################################################################## %% -test_ei_decode_ulong(suite) -> []; test_ei_decode_ulong(Config) when is_list(Config) -> - ?line P = runner:start(?test_ei_decode_ulong), + P = runner:start(?test_ei_decode_ulong), send_integers(P), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. % (*) In practical terms, other values may fit into the ext format % i32 is signed 32 bit on C side % u32 is unsigned 32 bit on C side - + %% ######################################################################## %% -test_ei_decode_longlong(suite) -> []; test_ei_decode_longlong(Config) when is_list(Config) -> case os:type() of - vxworks -> - {skip,"Skipped on VxWorks"}; - _ -> - ?line P = runner:start(?test_ei_decode_longlong), - send_integers2(P), - ?line runner:recv_eot(P), - ok + vxworks -> + {skip,"Skipped on VxWorks"}; + _ -> + P = runner:start(?test_ei_decode_longlong), + send_integers2(P), + runner:recv_eot(P), + ok end. %% ######################################################################## %% -test_ei_decode_ulonglong(suite) -> []; test_ei_decode_ulonglong(Config) when is_list(Config) -> case os:type() of - vxworks -> - {skip,"Skipped on VxWorks"}; - _ -> - ?line P = runner:start(?test_ei_decode_ulonglong), - send_integers2(P), - ?line runner:recv_eot(P), - ok + vxworks -> + {skip,"Skipped on VxWorks"}; + _ -> + P = runner:start(?test_ei_decode_ulonglong), + send_integers2(P), + runner:recv_eot(P), + ok end. @@ -133,38 +103,36 @@ test_ei_decode_ulonglong(Config) when is_list(Config) -> %% it is unsigned. %% FIXME maybe the API should change to use "unsigned char" to be clear?! -test_ei_decode_char(suite) -> []; test_ei_decode_char(Config) when is_list(Config) -> - ?line P = runner:start(?test_ei_decode_char), + P = runner:start(?test_ei_decode_char), - ?line send_term_as_binary(P,0), - ?line send_term_as_binary(P,16#7f), - ?line send_term_as_binary(P,16#ff), + send_term_as_binary(P,0), + send_term_as_binary(P,16#7f), + send_term_as_binary(P,16#ff), - ?line send_term_as_binary(P, []), % illegal type + send_term_as_binary(P, []), % illegal type - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. %% ######################################################################## %% -test_ei_decode_nonoptimal(suite) -> []; test_ei_decode_nonoptimal(Config) when is_list(Config) -> - ?line P = runner:start(?test_ei_decode_nonoptimal), + P = runner:start(?test_ei_decode_nonoptimal), send_non_optimal_pos(P), % decode_char send_non_optimal(P), % decode_long send_non_optimal_pos(P), % decode_ulong case os:type() of - vxworks -> - ok; - _ -> - send_non_optimal(P), % decode_longlong - send_non_optimal_pos(P) % decode_ulonglong + vxworks -> + ok; + _ -> + send_non_optimal(P), % decode_longlong + send_non_optimal_pos(P) % decode_ulonglong end, - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. @@ -173,82 +141,81 @@ send_non_optimal(P) -> send_non_optimal_neg(P). send_non_optimal_pos(P) -> - ?line send_raw(P, <<131,97,42>>), - ?line send_raw(P, <<131,98,42:32>>), - ?line send_raw(P, <<131,110,1,0,42>>), - ?line send_raw(P, <<131,110,2,0,42,0>>), - ?line send_raw(P, <<131,110,4,0,42,0,0,0>>), - ?line send_raw(P, <<131,111,0,0,0,1,0,42>>), - ?line send_raw(P, <<131,111,0,0,0,2,0,42,0>>), - ?line send_raw(P, <<131,111,0,0,0,3,0,42,0,0>>), - ?line send_raw(P, <<131,111,0,0,0,6,0,42,0,0,0,0,0>>), + send_raw(P, <<131,97,42>>), + send_raw(P, <<131,98,42:32>>), + send_raw(P, <<131,110,1,0,42>>), + send_raw(P, <<131,110,2,0,42,0>>), + send_raw(P, <<131,110,4,0,42,0,0,0>>), + send_raw(P, <<131,111,0,0,0,1,0,42>>), + send_raw(P, <<131,111,0,0,0,2,0,42,0>>), + send_raw(P, <<131,111,0,0,0,3,0,42,0,0>>), + send_raw(P, <<131,111,0,0,0,6,0,42,0,0,0,0,0>>), ok. send_non_optimal_neg(P) -> -% ?line send_raw(P, <<131,97,-42>>), - ?line send_raw(P, <<131,98,-42:32>>), - ?line send_raw(P, <<131,110,1,1,42>>), - ?line send_raw(P, <<131,110,2,1,42,0>>), - ?line send_raw(P, <<131,110,4,1,42,0,0,0>>), - ?line send_raw(P, <<131,111,0,0,0,1,1,42>>), - ?line send_raw(P, <<131,111,0,0,0,2,1,42,0>>), - ?line send_raw(P, <<131,111,0,0,0,3,1,42,0,0>>), - ?line send_raw(P, <<131,111,0,0,0,6,1,42,0,0,0,0,0>>), + % send_raw(P, <<131,97,-42>>), + send_raw(P, <<131,98,-42:32>>), + send_raw(P, <<131,110,1,1,42>>), + send_raw(P, <<131,110,2,1,42,0>>), + send_raw(P, <<131,110,4,1,42,0,0,0>>), + send_raw(P, <<131,111,0,0,0,1,1,42>>), + send_raw(P, <<131,111,0,0,0,2,1,42,0>>), + send_raw(P, <<131,111,0,0,0,3,1,42,0,0>>), + send_raw(P, <<131,111,0,0,0,6,1,42,0,0,0,0,0>>), ok. %% ######################################################################## %% -test_ei_decode_misc(suite) -> []; test_ei_decode_misc(Config) when is_list(Config) -> - ?line P = runner:start(?test_ei_decode_misc), + P = runner:start(?test_ei_decode_misc), - ?line send_term_as_binary(P,0.0), - ?line send_term_as_binary(P,-1.0), - ?line send_term_as_binary(P,1.0), + send_term_as_binary(P,0.0), + send_term_as_binary(P,-1.0), + send_term_as_binary(P,1.0), - ?line send_term_as_binary(P,false), - ?line send_term_as_binary(P,true), + send_term_as_binary(P,false), + send_term_as_binary(P,true), - ?line send_term_as_binary(P,foo), - ?line send_term_as_binary(P,''), - ?line send_term_as_binary(P,'ÅÄÖåäö'), + send_term_as_binary(P,foo), + send_term_as_binary(P,''), + send_term_as_binary(P,'ÅÄÖåäö'), - ?line send_term_as_binary(P,"foo"), - ?line send_term_as_binary(P,""), - ?line send_term_as_binary(P,"ÅÄÖåäö"), + send_term_as_binary(P,"foo"), + send_term_as_binary(P,""), + send_term_as_binary(P,"ÅÄÖåäö"), - ?line send_term_as_binary(P,<<"foo">>), - ?line send_term_as_binary(P,<<>>), - ?line send_term_as_binary(P,<<"ÅÄÖåäö">>), + send_term_as_binary(P,<<"foo">>), + send_term_as_binary(P,<<>>), + send_term_as_binary(P,<<"ÅÄÖåäö">>), -% ?line send_term_as_binary(P,{}), -% ?line send_term_as_binary(P,[]), + % send_term_as_binary(P,{}), + % send_term_as_binary(P,[]), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. %% ######################################################################## %% test_ei_decode_utf8_atom(Config) -> - ?line P = runner:start(?test_ei_decode_utf8_atom), + P = runner:start(?test_ei_decode_utf8_atom), send_utf8_atom_as_binary(P,"å"), send_utf8_atom_as_binary(P,"ä"), send_term_as_binary(P,'ö'), send_term_as_binary(P,'õ'), - - ?line send_utf8_atom_as_binary(P,[1758]), - ?line send_utf8_atom_as_binary(P,[1758,1758]), - ?line send_utf8_atom_as_binary(P,[1758,1758,1758]), - ?line send_utf8_atom_as_binary(P,[1758,1758,1758,1758]), + + send_utf8_atom_as_binary(P,[1758]), + send_utf8_atom_as_binary(P,[1758,1758]), + send_utf8_atom_as_binary(P,[1758,1758,1758]), + send_utf8_atom_as_binary(P,[1758,1758,1758,1758]), send_utf8_atom_as_binary(P,"a"), send_utf8_atom_as_binary(P,"b"), send_term_as_binary(P,'c'), send_term_as_binary(P,'d'), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. @@ -264,77 +231,77 @@ send_utf8_atom_as_binary(Port, String) -> Port ! {self(), {command, term_to_binary(uc_atup(String))}}. send_integers(P) -> - ?line send_term_as_binary(P,0), % SMALL_INTEGER_EXT smallest - ?line send_term_as_binary(P,255), % SMALL_INTEGER_EXT largest - ?line send_term_as_binary(P,256), % INTEGER_EXT smallest pos (*) - ?line send_term_as_binary(P,-1), % INTEGER_EXT largest neg - - ?line send_term_as_binary(P, 16#07ffffff), % INTEGER_EXT old largest (28 bits) - ?line send_term_as_binary(P,-16#08000000), % INTEGER_EXT old smallest - ?line send_term_as_binary(P, 16#08000000), % SMALL_BIG_EXT old smallest pos(*) - ?line send_term_as_binary(P,-16#08000001), % SMALL_BIG_EXT old largest neg (*) - - ?line send_term_as_binary(P, 16#7fffffff), % INTEGER_EXT new largest (32 bits) - ?line send_term_as_binary(P,-16#80000000), % INTEGER_EXT new smallest (32 bis) - ?line send_term_as_binary(P, 16#80000000), % SMALL_BIG_EXT new smallest pos(*) - ?line send_term_as_binary(P,-16#80000001), % SMALL_BIG_EXT new largest neg (*) - + send_term_as_binary(P,0), % SMALL_INTEGER_EXT smallest + send_term_as_binary(P,255), % SMALL_INTEGER_EXT largest + send_term_as_binary(P,256), % INTEGER_EXT smallest pos (*) + send_term_as_binary(P,-1), % INTEGER_EXT largest neg + + send_term_as_binary(P, 16#07ffffff), % INTEGER_EXT old largest (28 bits) + send_term_as_binary(P,-16#08000000), % INTEGER_EXT old smallest + send_term_as_binary(P, 16#08000000), % SMALL_BIG_EXT old smallest pos(*) + send_term_as_binary(P,-16#08000001), % SMALL_BIG_EXT old largest neg (*) + + send_term_as_binary(P, 16#7fffffff), % INTEGER_EXT new largest (32 bits) + send_term_as_binary(P,-16#80000000), % INTEGER_EXT new smallest (32 bis) + send_term_as_binary(P, 16#80000000), % SMALL_BIG_EXT new smallest pos(*) + send_term_as_binary(P,-16#80000001), % SMALL_BIG_EXT new largest neg (*) + case erlang:system_info({wordsize,external}) of - 4 -> - ?line send_term_as_binary(P, 16#80000000),% SMALL_BIG_EXT u32 - ?line send_term_as_binary(P, 16#ffffffff),% SMALL_BIG_EXT largest u32 - - ?line send_term_as_binary(P, 16#7fffffffffff), % largest i48 - ?line send_term_as_binary(P,-16#800000000000), % smallest i48 - ?line send_term_as_binary(P, 16#ffffffffffff), % largest u48 - ?line send_term_as_binary(P, 16#7fffffffffffffff), % largest i64 - ?line send_term_as_binary(P,-16#8000000000000000), % smallest i64 - ?line send_term_as_binary(P, 16#ffffffffffffffff); % largest u64 - 8 -> - ?line send_term_as_binary(P, 16#8000000000000000),% SMALL_BIG_EXT u64 - % SMALL_BIG_EXT largest u64 - ?line send_term_as_binary(P, 16#ffffffffffffffff), - % largest i96 - ?line send_term_as_binary(P, 16#7fffffffffffffffffffffff), - % smallest i96 - ?line send_term_as_binary(P,-16#800000000000000000000000), - % largest u96 - ?line send_term_as_binary(P, 16#ffffffffffffffffffffffff), - % largest i128 - ?line send_term_as_binary(P, 16#7fffffffffffffffffffffffffffffff), - % smallest i128 - ?line send_term_as_binary(P,-16#80000000000000000000000000000000), - % largest u128 - ?line send_term_as_binary(P, 16#ffffffffffffffffffffffffffffffff) + 4 -> + send_term_as_binary(P, 16#80000000),% SMALL_BIG_EXT u32 + send_term_as_binary(P, 16#ffffffff),% SMALL_BIG_EXT largest u32 + + send_term_as_binary(P, 16#7fffffffffff), % largest i48 + send_term_as_binary(P,-16#800000000000), % smallest i48 + send_term_as_binary(P, 16#ffffffffffff), % largest u48 + send_term_as_binary(P, 16#7fffffffffffffff), % largest i64 + send_term_as_binary(P,-16#8000000000000000), % smallest i64 + send_term_as_binary(P, 16#ffffffffffffffff); % largest u64 + 8 -> + send_term_as_binary(P, 16#8000000000000000),% SMALL_BIG_EXT u64 + % SMALL_BIG_EXT largest u64 + send_term_as_binary(P, 16#ffffffffffffffff), + % largest i96 + send_term_as_binary(P, 16#7fffffffffffffffffffffff), + % smallest i96 + send_term_as_binary(P,-16#800000000000000000000000), + % largest u96 + send_term_as_binary(P, 16#ffffffffffffffffffffffff), + % largest i128 + send_term_as_binary(P, 16#7fffffffffffffffffffffffffffffff), + % smallest i128 + send_term_as_binary(P,-16#80000000000000000000000000000000), + % largest u128 + send_term_as_binary(P, 16#ffffffffffffffffffffffffffffffff) end, - ?line send_term_as_binary(P, []), % illegal type + send_term_as_binary(P, []), % illegal type ok. send_integers2(P) -> - ?line send_term_as_binary(P,0), % SMALL_INTEGER_EXT smallest - ?line send_term_as_binary(P,255), % SMALL_INTEGER_EXT largest - ?line send_term_as_binary(P,256), % INTEGER_EXT smallest pos (*) - ?line send_term_as_binary(P,-1), % INTEGER_EXT largest neg - - ?line send_term_as_binary(P, 16#07ffffff), % INTEGER_EXT old largest (28 bits) - ?line send_term_as_binary(P,-16#08000000), % INTEGER_EXT old smallest - ?line send_term_as_binary(P, 16#08000000), % SMALL_BIG_EXT old smallest pos(*) - ?line send_term_as_binary(P,-16#08000001), % SMALL_BIG_EXT old largest neg (*) - - ?line send_term_as_binary(P, 16#7fffffff), % INTEGER_EXT new largest (32 bits) - ?line send_term_as_binary(P,-16#80000000), % INTEGER_EXT new smallest - ?line send_term_as_binary(P, 16#80000000), % SMALL_BIG_EXT new smallest pos(*) - ?line send_term_as_binary(P,-16#80000001), % SMALL_BIG_EXT new largest neg (*) - - ?line send_term_as_binary(P, 16#ffffffff),% SMALL_BIG_EXT largest u32 - - ?line send_term_as_binary(P, 16#7fffffffffff), % largest i48 - ?line send_term_as_binary(P,-16#800000000000), % smallest i48 - ?line send_term_as_binary(P, 16#ffffffffffff), % largest u48 - ?line send_term_as_binary(P, 16#7fffffffffffffff), % largest i64 - ?line send_term_as_binary(P,-16#8000000000000000), % smallest i64 - ?line send_term_as_binary(P, 16#ffffffffffffffff), % largest u64 - ?line send_term_as_binary(P, []), % illegal type + send_term_as_binary(P,0), % SMALL_INTEGER_EXT smallest + send_term_as_binary(P,255), % SMALL_INTEGER_EXT largest + send_term_as_binary(P,256), % INTEGER_EXT smallest pos (*) + send_term_as_binary(P,-1), % INTEGER_EXT largest neg + + send_term_as_binary(P, 16#07ffffff), % INTEGER_EXT old largest (28 bits) + send_term_as_binary(P,-16#08000000), % INTEGER_EXT old smallest + send_term_as_binary(P, 16#08000000), % SMALL_BIG_EXT old smallest pos(*) + send_term_as_binary(P,-16#08000001), % SMALL_BIG_EXT old largest neg (*) + + send_term_as_binary(P, 16#7fffffff), % INTEGER_EXT new largest (32 bits) + send_term_as_binary(P,-16#80000000), % INTEGER_EXT new smallest + send_term_as_binary(P, 16#80000000), % SMALL_BIG_EXT new smallest pos(*) + send_term_as_binary(P,-16#80000001), % SMALL_BIG_EXT new largest neg (*) + + send_term_as_binary(P, 16#ffffffff), % SMALL_BIG_EXT largest u32 + + send_term_as_binary(P, 16#7fffffffffff), % largest i48 + send_term_as_binary(P,-16#800000000000), % smallest i48 + send_term_as_binary(P, 16#ffffffffffff), % largest u48 + send_term_as_binary(P, 16#7fffffffffffffff), % largest i64 + send_term_as_binary(P,-16#8000000000000000), % smallest i64 + send_term_as_binary(P, 16#ffffffffffffffff), % largest u64 + send_term_as_binary(P, []), % illegal type ok. uc_atup(ATxt) -> @@ -344,35 +311,32 @@ string_to_atom(String) -> Utf8List = string_to_utf8_list(String), Len = length(Utf8List), TagLen = case Len < 256 of - true -> [119, Len]; - false -> [118, Len bsr 8, Len band 16#ff] - end, + true -> [119, Len]; + false -> [118, Len bsr 8, Len band 16#ff] + end, binary_to_term(list_to_binary([131, TagLen, Utf8List])). string_to_utf8_list([]) -> []; string_to_utf8_list([CP|CPs]) when is_integer(CP), - 0 =< CP, - CP =< 16#7F -> + 0 =< CP, + CP =< 16#7F -> [CP | string_to_utf8_list(CPs)]; string_to_utf8_list([CP|CPs]) when is_integer(CP), - 16#80 =< CP, - CP =< 16#7FF -> + 16#80 =< CP, + CP =< 16#7FF -> [16#C0 bor (CP bsr 6), - 16#80 bor (16#3F band CP) - | string_to_utf8_list(CPs)]; + 16#80 bor (16#3F band CP) | string_to_utf8_list(CPs)]; string_to_utf8_list([CP|CPs]) when is_integer(CP), - 16#800 =< CP, - CP =< 16#FFFF -> + 16#800 =< CP, + CP =< 16#FFFF -> [16#E0 bor (CP bsr 12), 16#80 bor (16#3F band (CP bsr 6)), - 16#80 bor (16#3F band CP) - | string_to_utf8_list(CPs)]; + 16#80 bor (16#3F band CP) | string_to_utf8_list(CPs)]; string_to_utf8_list([CP|CPs]) when is_integer(CP), - 16#10000 =< CP, - CP =< 16#10FFFF -> + 16#10000 =< CP, + CP =< 16#10FFFF -> [16#F0 bor (CP bsr 18), 16#80 bor (16#3F band (CP bsr 12)), 16#80 bor (16#3F band (CP bsr 6)), - 16#80 bor (16#3F band CP) - | string_to_utf8_list(CPs)]. + 16#80 bor (16#3F band CP) | string_to_utf8_list(CPs)]. diff --git a/lib/erl_interface/test/ei_decode_SUITE_data/Makefile.first b/lib/erl_interface/test/ei_decode_SUITE_data/Makefile.first index 74a49dbdab..6e4f0bc37e 100644 --- a/lib/erl_interface/test/ei_decode_SUITE_data/Makefile.first +++ b/lib/erl_interface/test/ei_decode_SUITE_data/Makefile.first @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2004-2009. All Rights Reserved. +# Copyright Ericsson AB 2004-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/ei_decode_SUITE_data/Makefile.src b/lib/erl_interface/test/ei_decode_SUITE_data/Makefile.src index 54c40e52a4..e678914a40 100644 --- a/lib/erl_interface/test/ei_decode_SUITE_data/Makefile.src +++ b/lib/erl_interface/test/ei_decode_SUITE_data/Makefile.src @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2004-2009. All Rights Reserved. +# Copyright Ericsson AB 2004-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/ei_decode_SUITE_data/ei_decode_test.c b/lib/erl_interface/test/ei_decode_SUITE_data/ei_decode_test.c index a0bafe543d..cfe9083065 100644 --- a/lib/erl_interface/test/ei_decode_SUITE_data/ei_decode_test.c +++ b/lib/erl_interface/test/ei_decode_SUITE_data/ei_decode_test.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2004-2013. All Rights Reserved. + * Copyright Ericsson AB 2004-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -377,8 +377,14 @@ TESTCASE(test_ei_decode_ulong) EI_DECODE_2 (decode_ulong, 11, unsigned long, ll(0x8000000000000000)); EI_DECODE_2 (decode_ulong, 11, unsigned long, ll(0xffffffffffffffff)); } else { - EI_DECODE_2 (decode_ulong, 7, unsigned long, 0x80000000); - EI_DECODE_2 (decode_ulong, 7, unsigned long, 0xffffffff); + if (sizeof(void*) > 4) { + /* Windows */ + EI_DECODE_2_FAIL(decode_ulong, 11, unsigned long, ll(0x8000000000000000)); + EI_DECODE_2_FAIL(decode_ulong, 11, unsigned long, ll(0xffffffffffffffff)); + } else { + EI_DECODE_2 (decode_ulong, 7, unsigned long, 0x80000000); + EI_DECODE_2 (decode_ulong, 7, unsigned long, 0xffffffff); + } } EI_DECODE_2_FAIL(decode_ulong, 9, unsigned long, ll(0x7fffffffffff)); diff --git a/lib/erl_interface/test/ei_decode_encode_SUITE.erl b/lib/erl_interface/test/ei_decode_encode_SUITE.erl index 3c7e4bf70d..570a91e2da 100644 --- a/lib/erl_interface/test/ei_decode_encode_SUITE.erl +++ b/lib/erl_interface/test/ei_decode_encode_SUITE.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2004-2014. All Rights Reserved. +%% Copyright Ericsson AB 2004-2016. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -21,37 +21,18 @@ %% -module(ei_decode_encode_SUITE). --include_lib("test_server/include/test_server.hrl"). +-include_lib("common_test/include/ct.hrl"). -include("ei_decode_encode_SUITE_data/ei_decode_encode_test_cases.hrl"). --export( - [ - all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, - init_per_group/2,end_per_group/2, - test_ei_decode_encode/1 - ]). +-export([all/0, suite/0, + test_ei_decode_encode/1]). -suite() -> [{ct_hooks,[ts_install_cth]}]. +suite() -> + [{ct_hooks,[ts_install_cth]}]. all() -> [test_ei_decode_encode]. -groups() -> - []. - -init_per_suite(Config) -> - Config. - -end_per_suite(_Config) -> - ok. - -init_per_group(_GroupName, Config) -> - Config. - -end_per_group(_GroupName, Config) -> - Config. - - %% --------------------------------------------------------------------------- % NOTE: these types have no meaning on the C side so we pass them @@ -60,20 +41,19 @@ end_per_group(_GroupName, Config) -> %% ######################################################################## %% -test_ei_decode_encode(suite) -> []; test_ei_decode_encode(Config) when is_list(Config) -> - ?line P = runner:start(?test_ei_decode_encode), + P = runner:start(?test_ei_decode_encode), Fun = fun (X) -> {X,true} end, Pid = self(), Port = case os:type() of - {win32,_} -> - open_port({spawn,"sort"},[]); - {unix, darwin} -> - open_port({spawn,"/usr/bin/true"},[]); - _ -> - open_port({spawn,"/bin/true"},[]) - end, + {win32,_} -> + open_port({spawn,"sort"},[]); + {unix, darwin} -> + open_port({spawn,"/usr/bin/true"},[]); + _ -> + open_port({spawn,"/bin/true"},[]) + end, Ref = make_ref(), Trace = {1,2,3,self(),4}, % FIXME how to construct?! @@ -86,47 +66,46 @@ test_ei_decode_encode(Config) when is_list(Config) -> BigLargeB = 1 bsl 11112 + BigSmallB, BigLargeC = BigSmallA * BigSmallB * BigSmallC * BigSmallA, - ?line send_rec(P, Fun), - ?line send_rec(P, Pid), - ?line send_rec(P, Port), - ?line send_rec(P, Ref), - ?line send_rec(P, Trace), + send_rec(P, Fun), + send_rec(P, Pid), + send_rec(P, Port), + send_rec(P, Ref), + send_rec(P, Trace), % bigs - ?line send_rec(P, BigSmallA), - ?line send_rec(P, BigSmallB), - ?line send_rec(P, BigSmallC), - - ?line send_rec(P, BigLargeA), - ?line send_rec(P, BigLargeB), - ?line send_rec(P, BigLargeC), + send_rec(P, BigSmallA), + send_rec(P, BigSmallB), + send_rec(P, BigSmallC), + + send_rec(P, BigLargeA), + send_rec(P, BigLargeB), + send_rec(P, BigLargeC), %% Test large node containers... - ?line ThisNode = {node(), erlang:system_info(creation)}, - ?line TXPid = mk_pid(ThisNode, 32767, 8191), - ?line TXPort = mk_port(ThisNode, 268435455), - ?line TXRef = mk_ref(ThisNode, [262143, 4294967295, 4294967295]), + ThisNode = {node(), erlang:system_info(creation)}, + TXPid = mk_pid(ThisNode, 32767, 8191), + TXPort = mk_port(ThisNode, 268435455), + TXRef = mk_ref(ThisNode, [262143, 4294967295, 4294967295]), - ?line OtherNode = {gurka@sallad, 2}, - ?line OXPid = mk_pid(OtherNode, 32767, 8191), - ?line OXPort = mk_port(OtherNode, 268435455), - ?line OXRef = mk_ref(OtherNode, [262143, 4294967295, 4294967295]), + send_rec(P, TXPid), + send_rec(P, TXPort), + send_rec(P, TXRef), - ?line send_rec(P, TXPid), - ?line send_rec(P, TXPort), - ?line send_rec(P, TXRef), - ?line send_rec(P, OXPid), - ?line send_rec(P, OXPort), - ?line send_rec(P, OXRef), + [begin OtherNode = {gurka@sallad, Creation}, + send_rec(P, mk_pid(OtherNode, 32767, 8191)), + send_rec(P, mk_port(OtherNode, 268435455)), + send_rec(P, mk_ref(OtherNode, [262143, 4294967295, 4294967295])), + void + end || Creation <- [1, 2, 3, 4, 16#adec0ded]], %% Unicode atoms [begin send_rec(P, Atom), - send_rec(P, mk_pid({Atom,1}, 23434, 3434)), - send_rec(P, mk_port({Atom,1}, 2343434)), - send_rec(P, mk_ref({Atom,1}, [262143, 8723648, 24097245])), - void + send_rec(P, mk_pid({Atom,1}, 23434, 3434)), + send_rec(P, mk_port({Atom,1}, 2343434)), + send_rec(P, mk_ref({Atom,1}, [262143, 8723648, 24097245])), + void end || Atom <- unicode_atom_data()], send_rec(P, {}), @@ -137,7 +116,7 @@ test_ei_decode_encode(Config) when is_list(Config) -> send_rec(P, #{key => value}), send_rec(P, maps:put(Port, Ref, #{key => value, key2 => Pid})), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. @@ -146,29 +125,27 @@ test_ei_decode_encode(Config) when is_list(Config) -> % We read two packets for each test, the ei_decode_encode and ei_x_decode_encode version.... send_rec(P, Term) when is_port(P) -> - %%?t:format("Testing: ~p~n", [Term]), P ! {self(), {command, term_to_binary(Term)}}, {_B,Term} = get_buf_and_term(P). - get_buf_and_term(P) -> B = get_binaries(P), case B of - <<131>> -> - io:format("(got single magic, no content)\n",[]), - {B,'$$magic$$'}; - <<131,_>> -> - T = binary_to_term(B), - io:format("~w\n~w\n(got magic)\n",[B,T]), - {B,T}; - _ -> - B1 = list_to_binary([131,B]), % No magic, add - T = binary_to_term(B1), - %io:format("~w\n~w\n(got no magic)\n",[B,T]), - {B,T} + <<131>> -> + io:format("(got single magic, no content)\n",[]), + {B,'$$magic$$'}; + <<131,_>> -> + T = binary_to_term(B), + io:format("~w\n~w\n(got magic)\n",[B,T]), + {B,T}; + _ -> + B1 = list_to_binary([131,B]), % No magic, add + T = binary_to_term(B1), + %io:format("~w\n~w\n(got no magic)\n",[B,T]), + {B,T} end. - + get_binaries(P) -> B1 = get_binary(P), @@ -177,40 +154,17 @@ get_binaries(P) -> get_binary(P) -> case runner:get_term(P) of - {bytes,L} -> - B = list_to_binary(L), - %%io:format("~w\n",[L]), -% For strange reasons <<131>> show up as <>.... -% io:format("~w\n",[B]), - B; - Other -> - Other + {bytes,L} -> + B = list_to_binary(L), + %%io:format("~w\n",[L]), + % For strange reasons <<131>> show up as <>.... + % io:format("~w\n",[B]), + B; + Other -> + Other end. %% - -% We use our own get_term() - -get_term(P) -> - case runner:get_term(P) of - {bytes,[131]} -> - io:format("(got single magic, no content)\n",[]), - '$$magic$$'; - {bytes,[131,L]} -> - B = list_to_binary(L), - T = binary_to_term(B), - io:format("~w\n~w\n(got magic)\n",[L,T]), - T; - {bytes,L} -> - B = list_to_binary([131,L]), - T = binary_to_term(B), - io:format("~w\n~w\n(got no magic)\n",[L,T]), - T; - Other -> - Other - end. - -%% %% Node container constructor functions %% @@ -221,6 +175,9 @@ get_term(P) -> -define(PORT_EXT, 102). -define(PID_EXT, 103). -define(NEW_REFERENCE_EXT, 114). +-define(NEW_PID_EXT, $X). +-define(NEW_PORT_EXT, $Y). +-define(NEWER_REFERENCE_EXT, $Z). uint32_be(Uint) when is_integer(Uint), 0 =< Uint, Uint < 1 bsl 32 -> [(Uint bsr 24) band 16#ff, @@ -242,18 +199,22 @@ uint8(Uint) when is_integer(Uint), 0 =< Uint, Uint < 1 bsl 8 -> uint8(Uint) -> exit({badarg, uint8, [Uint]}). +pid_tag(Creation) when Creation =< 3 -> ?PID_EXT; +pid_tag(_Creation) -> ?NEW_PID_EXT. +enc_creation(Creation) when Creation =< 3 -> uint8(Creation); +enc_creation(Creation) -> uint32_be(Creation). mk_pid({NodeName, Creation}, Number, Serial) when is_atom(NodeName) -> <<?VERSION_MAGIC, NodeNameExt/binary>> = term_to_binary(NodeName), mk_pid({NodeNameExt, Creation}, Number, Serial); mk_pid({NodeNameExt, Creation}, Number, Serial) -> case catch binary_to_term(list_to_binary([?VERSION_MAGIC, - ?PID_EXT, - NodeNameExt, - uint32_be(Number), - uint32_be(Serial), - uint8(Creation)])) of + pid_tag(Creation), + NodeNameExt, + uint32_be(Number), + uint32_be(Serial), + enc_creation(Creation)])) of Pid when is_pid(Pid) -> Pid; {'EXIT', {badarg, _}} -> @@ -262,15 +223,18 @@ mk_pid({NodeNameExt, Creation}, Number, Serial) -> exit({unexpected_binary_to_term_result, Other}) end. +port_tag(Creation) when Creation =< 3 -> ?PORT_EXT; +port_tag(_Creation) -> ?NEW_PORT_EXT. + mk_port({NodeName, Creation}, Number) when is_atom(NodeName) -> <<?VERSION_MAGIC, NodeNameExt/binary>> = term_to_binary(NodeName), mk_port({NodeNameExt, Creation}, Number); mk_port({NodeNameExt, Creation}, Number) -> case catch binary_to_term(list_to_binary([?VERSION_MAGIC, - ?PORT_EXT, + port_tag(Creation), NodeNameExt, uint32_be(Number), - uint8(Creation)])) of + enc_creation(Creation)])) of Port when is_port(Port) -> Port; {'EXIT', {badarg, _}} -> @@ -279,34 +243,38 @@ mk_port({NodeNameExt, Creation}, Number) -> exit({unexpected_binary_to_term_result, Other}) end. +ref_tag(Creation) when Creation =< 3 -> ?NEW_REFERENCE_EXT; +ref_tag(_Creation) -> ?NEWER_REFERENCE_EXT. + mk_ref({NodeName, Creation}, Numbers) when is_atom(NodeName), - is_integer(Creation), - is_list(Numbers) -> + is_integer(Creation), + is_list(Numbers) -> <<?VERSION_MAGIC, NodeNameExt/binary>> = term_to_binary(NodeName), mk_ref({NodeNameExt, Creation}, Numbers); mk_ref({NodeNameExt, Creation}, [Number]) when is_binary(NodeNameExt), is_integer(Creation), + Creation =< 3, is_integer(Number) -> case catch binary_to_term(list_to_binary([?VERSION_MAGIC, - ?REFERENCE_EXT, - NodeNameExt, - uint32_be(Number), - uint8(Creation)])) of - Ref when is_reference(Ref) -> - Ref; - {'EXIT', {badarg, _}} -> - exit({badarg, mk_ref, [{NodeNameExt, Creation}, [Number]]}); - Other -> - exit({unexpected_binary_to_term_result, Other}) + ?REFERENCE_EXT, + NodeNameExt, + uint32_be(Number), + uint8(Creation)])) of + Ref when is_reference(Ref) -> + Ref; + {'EXIT', {badarg, _}} -> + exit({badarg, mk_ref, [{NodeNameExt, Creation}, [Number]]}); + Other -> + exit({unexpected_binary_to_term_result, Other}) end; mk_ref({NodeNameExt, Creation}, Numbers) when is_binary(NodeNameExt), - is_integer(Creation), - is_list(Numbers) -> + is_integer(Creation), + is_list(Numbers) -> case catch binary_to_term(list_to_binary([?VERSION_MAGIC, - ?NEW_REFERENCE_EXT, + ref_tag(Creation), uint16_be(length(Numbers)), NodeNameExt, - uint8(Creation), + enc_creation(Creation), lists:map(fun (N) -> uint32_be(N) end, @@ -333,10 +301,10 @@ unicode_atom_data() -> uc_atup(lists:seq(65500, 65754)), uc_atup(lists:seq(65500, 65563)) | lists:map(fun (N) -> - Pow2 = (1 bsl N), - uc_atup(lists:seq(Pow2 - 127, Pow2 + 127)) - end, - lists:seq(7, 20)) + Pow2 = (1 bsl N), + uc_atup(lists:seq(Pow2 - 127, Pow2 + 127)) + end, + lists:seq(7, 20)) ]. uc_atup(ATxt) -> @@ -346,33 +314,33 @@ string_to_atom(String) -> Utf8List = string_to_utf8_list(String), Len = length(Utf8List), TagLen = case Len < 256 of - true -> [119, Len]; - false -> [118, Len bsr 8, Len band 16#ff] - end, + true -> [119, Len]; + false -> [118, Len bsr 8, Len band 16#ff] + end, binary_to_term(list_to_binary([131, TagLen, Utf8List])). string_to_utf8_list([]) -> []; string_to_utf8_list([CP|CPs]) when is_integer(CP), - 0 =< CP, - CP =< 16#7F -> + 0 =< CP, + CP =< 16#7F -> [CP | string_to_utf8_list(CPs)]; string_to_utf8_list([CP|CPs]) when is_integer(CP), - 16#80 =< CP, - CP =< 16#7FF -> + 16#80 =< CP, + CP =< 16#7FF -> [16#C0 bor (CP bsr 6), 16#80 bor (16#3F band CP) | string_to_utf8_list(CPs)]; string_to_utf8_list([CP|CPs]) when is_integer(CP), - 16#800 =< CP, - CP =< 16#FFFF -> + 16#800 =< CP, + CP =< 16#FFFF -> [16#E0 bor (CP bsr 12), 16#80 bor (16#3F band (CP bsr 6)), 16#80 bor (16#3F band CP) | string_to_utf8_list(CPs)]; string_to_utf8_list([CP|CPs]) when is_integer(CP), - 16#10000 =< CP, - CP =< 16#10FFFF -> + 16#10000 =< CP, + CP =< 16#10FFFF -> [16#F0 bor (CP bsr 18), 16#80 bor (16#3F band (CP bsr 12)), 16#80 bor (16#3F band (CP bsr 6)), diff --git a/lib/erl_interface/test/ei_decode_encode_SUITE_data/Makefile.first b/lib/erl_interface/test/ei_decode_encode_SUITE_data/Makefile.first index 6edcc0c5ed..ee9e25adbc 100644 --- a/lib/erl_interface/test/ei_decode_encode_SUITE_data/Makefile.first +++ b/lib/erl_interface/test/ei_decode_encode_SUITE_data/Makefile.first @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2004-2009. All Rights Reserved. +# Copyright Ericsson AB 2004-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/ei_decode_encode_SUITE_data/Makefile.src b/lib/erl_interface/test/ei_decode_encode_SUITE_data/Makefile.src index 03db2ae9f2..853fe9ddeb 100644 --- a/lib/erl_interface/test/ei_decode_encode_SUITE_data/Makefile.src +++ b/lib/erl_interface/test/ei_decode_encode_SUITE_data/Makefile.src @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2004-2009. All Rights Reserved. +# Copyright Ericsson AB 2004-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/ei_decode_encode_SUITE_data/ei_decode_encode_test.c b/lib/erl_interface/test/ei_decode_encode_SUITE_data/ei_decode_encode_test.c index 4b0201ca0b..467f789fdb 100644 --- a/lib/erl_interface/test/ei_decode_encode_SUITE_data/ei_decode_encode_test.c +++ b/lib/erl_interface/test/ei_decode_encode_SUITE_data/ei_decode_encode_test.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2004-2014. All Rights Reserved. + * Copyright Ericsson AB 2004-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -240,7 +240,7 @@ void decode_encode(struct Type** tv, int nobj) if (err != -1) { fail("decode returned non zero but not -1"); } else { - fail("decode returned non zero"); + fail1("decode '%s' returned non zero", t->name); } return; } @@ -491,12 +491,11 @@ TESTCASE(test_ei_decode_encode) decode_encode_big(&big_type); /* Test large node containers... */ - decode_encode_one(&pid_type); - decode_encode_one(&port_type); - decode_encode_one(&ref_type); - decode_encode_one(&pid_type); - decode_encode_one(&port_type); - decode_encode_one(&ref_type); + for (i=0; i<6; i++) { + decode_encode_one(&pid_type); + decode_encode_one(&port_type); + decode_encode_one(&ref_type); + } /* Unicode atoms */ for (i=0; i<24; i++) { diff --git a/lib/erl_interface/test/ei_encode_SUITE.erl b/lib/erl_interface/test/ei_encode_SUITE.erl index 6213916314..ac6ec9cf4e 100644 --- a/lib/erl_interface/test/ei_encode_SUITE.erl +++ b/lib/erl_interface/test/ei_encode_SUITE.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2004-2013. All Rights Reserved. +%% Copyright Ericsson AB 2004-2016. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -21,25 +21,22 @@ %% -module(ei_encode_SUITE). --include_lib("test_server/include/test_server.hrl"). +-include_lib("common_test/include/ct.hrl"). -include("ei_encode_SUITE_data/ei_encode_test_cases.hrl"). --export( - [ - all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, - init_per_group/2,end_per_group/2, - test_ei_encode_long/1, - test_ei_encode_ulong/1, - test_ei_encode_longlong/1, - test_ei_encode_ulonglong/1, - test_ei_encode_char/1, - test_ei_encode_misc/1, - test_ei_encode_fails/1, - test_ei_encode_utf8_atom/1, - test_ei_encode_utf8_atom_len/1 - ]). - -suite() -> [{ct_hooks,[ts_install_cth]}]. +-export([all/0, suite/0, + test_ei_encode_long/1, + test_ei_encode_ulong/1, + test_ei_encode_longlong/1, + test_ei_encode_ulonglong/1, + test_ei_encode_char/1, + test_ei_encode_misc/1, + test_ei_encode_fails/1, + test_ei_encode_utf8_atom/1, + test_ei_encode_utf8_atom_len/1]). + +suite() -> + [{ct_hooks,[ts_install_cth]}]. all() -> [test_ei_encode_long, test_ei_encode_ulong, @@ -48,21 +45,6 @@ all() -> test_ei_encode_fails, test_ei_encode_utf8_atom, test_ei_encode_utf8_atom_len]. -groups() -> - []. - -init_per_suite(Config) -> - Config. - -end_per_suite(_Config) -> - ok. - -init_per_group(_GroupName, Config) -> - Config. - -end_per_group(_GroupName, Config) -> - Config. - %% --------------------------------------------------------------------------- @@ -72,105 +54,101 @@ end_per_group(_GroupName, Config) -> %% ######################################################################## %% -test_ei_encode_long(suite) -> []; test_ei_encode_long(Config) when is_list(Config) -> - ?line P = runner:start(?test_ei_encode_long), + P = runner:start(?test_ei_encode_long), - ?line {<<97,0>> ,0} = get_buf_and_term(P), - ?line {<<97,255>> ,255} = get_buf_and_term(P), - ?line {<<98,256:32/big-signed-integer>>,256} = get_buf_and_term(P), - ?line {<<98,-1:32/big-signed-integer>> ,-1} = get_buf_and_term(P), + {<<97,0>> ,0} = get_buf_and_term(P), + {<<97,255>> ,255} = get_buf_and_term(P), + {<<98,256:32/big-signed-integer>>,256} = get_buf_and_term(P), + {<<98,-1:32/big-signed-integer>> ,-1} = get_buf_and_term(P), - ?line {<<98, 16#07ffffff:32/big-signed-integer>>, 16#07ffffff} = get_buf_and_term(P), - ?line {<<98,-16#08000000:32/big-signed-integer>>,-16#08000000} = get_buf_and_term(P), - ?line {<<110,4,0, 0,0,0,8>> , 16#08000000} = get_buf_and_term(P), - ?line {<<110,4,1, 1,0,0,8>> ,-16#08000001} = get_buf_and_term(P), + {<<98, 16#07ffffff:32/big-signed-integer>>, 16#07ffffff} = get_buf_and_term(P), + {<<98,-16#08000000:32/big-signed-integer>>,-16#08000000} = get_buf_and_term(P), + {<<110,4,0, 0,0,0,8>> , 16#08000000} = get_buf_and_term(P), + {<<110,4,1, 1,0,0,8>> ,-16#08000001} = get_buf_and_term(P), - ?line {<<110,4,0, 255,255,255,127>> , 16#7fffffff} = get_buf_and_term(P), - ?line {<<110,4,1, 0,0,0,128>> ,-16#80000000} = get_buf_and_term(P), + {<<110,4,0, 255,255,255,127>> , 16#7fffffff} = get_buf_and_term(P), + {<<110,4,1, 0,0,0,128>> ,-16#80000000} = get_buf_and_term(P), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. %% ######################################################################## %% -test_ei_encode_ulong(suite) -> []; test_ei_encode_ulong(Config) when is_list(Config) -> - ?line P = runner:start(?test_ei_encode_ulong), + P = runner:start(?test_ei_encode_ulong), - ?line {<<97,0>> ,0} = get_buf_and_term(P), - ?line {<<97,255>> ,255} = get_buf_and_term(P), - ?line {<<98,256:32/big-unsigned-integer>>,256} = get_buf_and_term(P), + {<<97,0>> ,0} = get_buf_and_term(P), + {<<97,255>> ,255} = get_buf_and_term(P), + {<<98,256:32/big-unsigned-integer>>,256} = get_buf_and_term(P), - ?line {<<98, 16#07ffffff:32/big-signed-integer>>,16#07ffffff} = get_buf_and_term(P), - ?line {<<110,4,0, 0,0,0,8>> ,16#08000000} = get_buf_and_term(P), + {<<98, 16#07ffffff:32/big-signed-integer>>,16#07ffffff} = get_buf_and_term(P), + {<<110,4,0, 0,0,0,8>> ,16#08000000} = get_buf_and_term(P), - ?line {<<110,4,0, 255,255,255,127>> ,16#7fffffff} = get_buf_and_term(P), - ?line {<<110,4,0, 0,0,0,128>> ,16#80000000} = get_buf_and_term(P), - ?line {<<110,4,0, 255,255,255,255>> ,16#ffffffff} = get_buf_and_term(P), + {<<110,4,0, 255,255,255,127>> ,16#7fffffff} = get_buf_and_term(P), + {<<110,4,0, 0,0,0,128>> ,16#80000000} = get_buf_and_term(P), + {<<110,4,0, 255,255,255,255>> ,16#ffffffff} = get_buf_and_term(P), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. %% ######################################################################## %% -test_ei_encode_longlong(suite) -> []; test_ei_encode_longlong(Config) when is_list(Config) -> case os:type() of - vxworks -> - {skip,"Skipped on VxWorks"}; - _ -> - ?line P = runner:start(?test_ei_encode_longlong), - - ?line {<<97,0>> ,0} = get_buf_and_term(P), - ?line {<<97,255>> ,255} = get_buf_and_term(P), - ?line {<<98,256:32/big-signed-integer>>,256} = get_buf_and_term(P), - ?line {<<98,-1:32/big-signed-integer>> ,-1} = get_buf_and_term(P), - - ?line {<<98, 16#07ffffff:32/big-signed-integer>>, 16#07ffffff} = get_buf_and_term(P), - ?line {<<98,-16#08000000:32/big-signed-integer>>,-16#08000000} = get_buf_and_term(P), - ?line {<<110,4,0, 0,0,0,8>> , 16#08000000} = get_buf_and_term(P), - ?line {<<110,4,1, 1,0,0,8>> ,-16#08000001} = get_buf_and_term(P), - - ?line {<<110,4,0, 255,255,255,127>> , 16#7fffffff} = get_buf_and_term(P), - ?line {<<110,4,1, 0,0,0,128>> ,-16#80000000} = get_buf_and_term(P), - ?line {<<110,6,0, 255,255,255,255,255,127>> , 16#7fffffffffff} = get_buf_and_term(P), - ?line {<<110,6,1, 0,0,0,0,0,128>> ,-16#800000000000} = get_buf_and_term(P), - ?line {<<110,8,0, 255,255,255,255,255,255,255,127>>,16#7fffffffffffffff} = get_buf_and_term(P), - ?line {<<110,8,1, 0,0,0,0,0,0,0,128>> ,-16#8000000000000000} = get_buf_and_term(P), - - ?line runner:recv_eot(P), - ok + vxworks -> + {skip,"Skipped on VxWorks"}; + _ -> + P = runner:start(?test_ei_encode_longlong), + + {<<97,0>> ,0} = get_buf_and_term(P), + {<<97,255>> ,255} = get_buf_and_term(P), + {<<98,256:32/big-signed-integer>>,256} = get_buf_and_term(P), + {<<98,-1:32/big-signed-integer>> ,-1} = get_buf_and_term(P), + + {<<98, 16#07ffffff:32/big-signed-integer>>, 16#07ffffff} = get_buf_and_term(P), + {<<98,-16#08000000:32/big-signed-integer>>,-16#08000000} = get_buf_and_term(P), + {<<110,4,0, 0,0,0,8>> , 16#08000000} = get_buf_and_term(P), + {<<110,4,1, 1,0,0,8>> ,-16#08000001} = get_buf_and_term(P), + + {<<110,4,0, 255,255,255,127>> , 16#7fffffff} = get_buf_and_term(P), + {<<110,4,1, 0,0,0,128>> ,-16#80000000} = get_buf_and_term(P), + {<<110,6,0, 255,255,255,255,255,127>> , 16#7fffffffffff} = get_buf_and_term(P), + {<<110,6,1, 0,0,0,0,0,128>> ,-16#800000000000} = get_buf_and_term(P), + {<<110,8,0, 255,255,255,255,255,255,255,127>>,16#7fffffffffffffff} = get_buf_and_term(P), + {<<110,8,1, 0,0,0,0,0,0,0,128>> ,-16#8000000000000000} = get_buf_and_term(P), + + runner:recv_eot(P), + ok end. %% ######################################################################## %% -test_ei_encode_ulonglong(suite) -> []; test_ei_encode_ulonglong(Config) when is_list(Config) -> case os:type() of - vxworks -> - {skip,"Skipped on VxWorks"}; - _ -> - ?line P = runner:start(?test_ei_encode_ulonglong), - - ?line {<<97,0>> ,0} = get_buf_and_term(P), - ?line {<<97,255>> ,255} = get_buf_and_term(P), - ?line {<<98,256:32/big-unsigned-integer>>,256} = get_buf_and_term(P), - - ?line {<<98, 16#07ffffff:32/big-signed-integer>>,16#07ffffff} = get_buf_and_term(P), - ?line {<<110,4,0, 0,0,0,8>> ,16#08000000} = get_buf_and_term(P), - - ?line {<<110,4,0, 255,255,255,127>> ,16#7fffffff} = get_buf_and_term(P), - ?line {<<110,4,0, 0,0,0,128>> ,16#80000000} = get_buf_and_term(P), - ?line {<<110,4,0, 255,255,255,255>> ,16#ffffffff} = get_buf_and_term(P), - ?line {<<110,6,0, 255,255,255,255,255,255>>,16#ffffffffffff} = get_buf_and_term(P), - ?line {<<110,8,0, 255,255,255,255,255,255,255,255>>,16#ffffffffffffffff} = get_buf_and_term(P), - - ?line runner:recv_eot(P), - ok + vxworks -> + {skip,"Skipped on VxWorks"}; + _ -> + P = runner:start(?test_ei_encode_ulonglong), + + {<<97,0>> ,0} = get_buf_and_term(P), + {<<97,255>> ,255} = get_buf_and_term(P), + {<<98,256:32/big-unsigned-integer>>,256} = get_buf_and_term(P), + + {<<98, 16#07ffffff:32/big-signed-integer>>,16#07ffffff} = get_buf_and_term(P), + {<<110,4,0, 0,0,0,8>> ,16#08000000} = get_buf_and_term(P), + + {<<110,4,0, 255,255,255,127>> ,16#7fffffff} = get_buf_and_term(P), + {<<110,4,0, 0,0,0,128>> ,16#80000000} = get_buf_and_term(P), + {<<110,4,0, 255,255,255,255>> ,16#ffffffff} = get_buf_and_term(P), + {<<110,6,0, 255,255,255,255,255,255>>,16#ffffffffffff} = get_buf_and_term(P), + {<<110,8,0, 255,255,255,255,255,255,255,255>>,16#ffffffffffffffff} = get_buf_and_term(P), + + runner:recv_eot(P), + ok end. @@ -179,115 +157,112 @@ test_ei_encode_ulonglong(Config) when is_list(Config) -> %% it is unsigned. %% FIXME maybe the API should change to use "unsigned char" to be clear?! -test_ei_encode_char(suite) -> []; test_ei_encode_char(Config) when is_list(Config) -> - ?line P = runner:start(?test_ei_encode_char), + P = runner:start(?test_ei_encode_char), - ?line {<<97, 0>>,0} = get_buf_and_term(P), - ?line {<<97,127>>,16#7f} = get_buf_and_term(P), - ?line {<<97,255>>,16#ff} = get_buf_and_term(P), + {<<97, 0>>,0} = get_buf_and_term(P), + {<<97,127>>,16#7f} = get_buf_and_term(P), + {<<97,255>>,16#ff} = get_buf_and_term(P), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. %% ######################################################################## %% -test_ei_encode_misc(suite) -> []; test_ei_encode_misc(Config) when is_list(Config) -> - ?line P = runner:start(?test_ei_encode_misc), + P = runner:start(?test_ei_encode_misc), - ?line <<131>> = get_binaries(P), + <<131>> = get_binaries(P), - ?line {<<70,_:8/binary>>,F0} = get_buf_and_term(P), - ?line true = match_float(F0, 0.0), + {<<70,_:8/binary>>,F0} = get_buf_and_term(P), + true = match_float(F0, 0.0), - ?line {<<70,_:8/binary>>,Fn1} = get_buf_and_term(P), - ?line true = match_float(Fn1, -1.0), + {<<70,_:8/binary>>,Fn1} = get_buf_and_term(P), + true = match_float(Fn1, -1.0), - ?line {<<70,_:8/binary>>,Fp1} = get_buf_and_term(P), - ?line true = match_float(Fp1, 1.0), + {<<70,_:8/binary>>,Fp1} = get_buf_and_term(P), + true = match_float(Fp1, 1.0), - ?line {<<100,0,5,"false">>,false} = get_buf_and_term(P), - ?line {<<100,0,4,"true">> ,true} = get_buf_and_term(P), - ?line {<<100,0,4,"true">> ,true} = get_buf_and_term(P), - ?line {<<100,0,4,"true">> ,true} = get_buf_and_term(P), + {<<100,0,5,"false">>,false} = get_buf_and_term(P), + {<<100,0,4,"true">> ,true} = get_buf_and_term(P), + {<<100,0,4,"true">> ,true} = get_buf_and_term(P), + {<<100,0,4,"true">> ,true} = get_buf_and_term(P), - ?line {<<100,0,3,"foo">>,foo} = get_buf_and_term(P), - ?line {<<100,0,3,"foo">>,foo} = get_buf_and_term(P), - ?line {<<100,0,0,"">>,''} = get_buf_and_term(P), - ?line {<<100,0,0,"">>,''} = get_buf_and_term(P), - ?line {<<100,0,6,"ÅÄÖåäö">>,'ÅÄÖåäö'} = get_buf_and_term(P), - ?line {<<100,0,6,"ÅÄÖåäö">>,'ÅÄÖåäö'} = get_buf_and_term(P), + {<<100,0,3,"foo">>,foo} = get_buf_and_term(P), + {<<100,0,3,"foo">>,foo} = get_buf_and_term(P), + {<<100,0,0,"">>,''} = get_buf_and_term(P), + {<<100,0,0,"">>,''} = get_buf_and_term(P), + {<<100,0,6,"ÅÄÖåäö">>,'ÅÄÖåäö'} = get_buf_and_term(P), + {<<100,0,6,"ÅÄÖåäö">>,'ÅÄÖåäö'} = get_buf_and_term(P), - ?line {<<107,0,3,"foo">>,"foo"} = get_buf_and_term(P), - ?line {<<107,0,3,"foo">>,"foo"} = get_buf_and_term(P), - ?line {<<106>>,""} = get_buf_and_term(P), - ?line {<<106>>,""} = get_buf_and_term(P), - ?line {<<107,0,6,"ÅÄÖåäö">>,"ÅÄÖåäö"} = get_buf_and_term(P), - ?line {<<107,0,6,"ÅÄÖåäö">>,"ÅÄÖåäö"} = get_buf_and_term(P), + {<<107,0,3,"foo">>,"foo"} = get_buf_and_term(P), + {<<107,0,3,"foo">>,"foo"} = get_buf_and_term(P), + {<<106>>,""} = get_buf_and_term(P), + {<<106>>,""} = get_buf_and_term(P), + {<<107,0,6,"ÅÄÖåäö">>,"ÅÄÖåäö"} = get_buf_and_term(P), + {<<107,0,6,"ÅÄÖåäö">>,"ÅÄÖåäö"} = get_buf_and_term(P), - ?line {<<109,0,0,0,3,"foo">>,<<"foo">>} = get_buf_and_term(P), - ?line {<<109,0,0,0,0,"">>,<<>>} = get_buf_and_term(P), - ?line {<<109,0,0,0,6,"ÅÄÖåäö">>,<<"ÅÄÖåäö">>} = get_buf_and_term(P), + {<<109,0,0,0,3,"foo">>,<<"foo">>} = get_buf_and_term(P), + {<<109,0,0,0,0,"">>,<<>>} = get_buf_and_term(P), + {<<109,0,0,0,6,"ÅÄÖåäö">>,<<"ÅÄÖåäö">>} = get_buf_and_term(P), - ?line {<<104,0>>,{}} = get_buf_and_term(P), % Tuple header for {} - ?line {<<106>>,[]} = get_buf_and_term(P), % Empty list [] + {<<104,0>>,{}} = get_buf_and_term(P), % Tuple header for {} + {<<106>>,[]} = get_buf_and_term(P), % Empty list [] - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. %% ######################################################################## %% -test_ei_encode_fails(suite) -> []; test_ei_encode_fails(Config) when is_list(Config) -> - ?line P = runner:start(?test_ei_encode_fails), + P = runner:start(?test_ei_encode_fails), - ?line XAtom = list_to_atom(lists:duplicate(255, $x)), - ?line YAtom = list_to_atom(lists:duplicate(255, $y)), + XAtom = list_to_atom(lists:duplicate(255, $x)), + YAtom = list_to_atom(lists:duplicate(255, $y)), - ?line XAtom = get_term(P), - ?line XAtom = get_term(P), - ?line YAtom = get_term(P), - ?line YAtom = get_term(P), + XAtom = get_term(P), + XAtom = get_term(P), + YAtom = get_term(P), + YAtom = get_term(P), - ?line {{{{}}}} = get_term(P), + {{{{}}}} = get_term(P), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. %% ######################################################################## %% test_ei_encode_utf8_atom(Config) -> - ?line P = runner:start(?test_ei_encode_utf8_atom), - - ?line {<<119,2,195,133>>,'Å'} = get_buf_and_term(P), - ?line {<<100,0,1,197>>,'Å'} = get_buf_and_term(P), - ?line {<<100,0,1,197>>,'Å'} = get_buf_and_term(P), - ?line {<<119,2,195,133>>,'Å'} = get_buf_and_term(P), + P = runner:start(?test_ei_encode_utf8_atom), - ?line {<<119,1,$A>>,'A'} = get_buf_and_term(P), - ?line {<<100,0,1,$A>>,'A'} = get_buf_and_term(P), + {<<119,2,195,133>>,'Å'} = get_buf_and_term(P), + {<<100,0,1,197>>,'Å'} = get_buf_and_term(P), + {<<100,0,1,197>>,'Å'} = get_buf_and_term(P), + {<<119,2,195,133>>,'Å'} = get_buf_and_term(P), - ?line runner:recv_eot(P), + {<<119,1,$A>>,'A'} = get_buf_and_term(P), + {<<100,0,1,$A>>,'A'} = get_buf_and_term(P), + + runner:recv_eot(P), ok. %% ######################################################################## %% test_ei_encode_utf8_atom_len(Config) -> - ?line P = runner:start(?test_ei_encode_utf8_atom_len), - - ?line {<<119,2,195,133>>,'Å'} = get_buf_and_term(P), - ?line {<<100,0,2,197,196>>,'ÅÄ'} = get_buf_and_term(P), - ?line {<<100,0,1,197>>,'Å'} = get_buf_and_term(P), - ?line {<<119,4,195,133,195,132>>,'ÅÄ'} = get_buf_and_term(P), - - ?line {<<119,1,$A>>,'A'} = get_buf_and_term(P), - ?line {<<100,0,2,$A,$B>>,'AB'} = get_buf_and_term(P), - ?line {<<100,0,255,_:(255*8)>>,_} = get_buf_and_term(P), - - ?line runner:recv_eot(P), + P = runner:start(?test_ei_encode_utf8_atom_len), + + {<<119,2,195,133>>,'Å'} = get_buf_and_term(P), + {<<100,0,2,197,196>>,'ÅÄ'} = get_buf_and_term(P), + {<<100,0,1,197>>,'Å'} = get_buf_and_term(P), + {<<119,4,195,133,195,132>>,'ÅÄ'} = get_buf_and_term(P), + + {<<119,1,$A>>,'A'} = get_buf_and_term(P), + {<<100,0,2,$A,$B>>,'AB'} = get_buf_and_term(P), + {<<100,0,255,_:(255*8)>>,_} = get_buf_and_term(P), + + runner:recv_eot(P), ok. %% ######################################################################## %% @@ -297,20 +272,20 @@ test_ei_encode_utf8_atom_len(Config) -> get_buf_and_term(P) -> B = get_binaries(P), case B of - <<131>> -> - io:format("(got single magic, no content)\n",[]), - {B,'$$magic$$'}; - <<131,_>> -> - T = binary_to_term(B), - io:format("~w\n~w\n(got magic)\n",[B,T]), - {B,T}; - _ -> - B1 = list_to_binary([131,B]), % No magic, add - T = binary_to_term(B1), - io:format("~w\n~w\n(got no magic)\n",[B,T]), - {B,T} + <<131>> -> + io:format("(got single magic, no content)\n",[]), + {B,'$$magic$$'}; + <<131,_>> -> + T = binary_to_term(B), + io:format("~w\n~w\n(got magic)\n",[B,T]), + {B,T}; + _ -> + B1 = list_to_binary([131,B]), % No magic, add + T = binary_to_term(B1), + io:format("~w\n~w\n(got no magic)\n",[B,T]), + {B,T} end. - + get_binaries(P) -> B1 = get_binary(P), @@ -319,14 +294,14 @@ get_binaries(P) -> get_binary(P) -> case runner:get_term(P) of - {bytes,L} -> - B = list_to_binary(L), - io:format("~w\n",[L]), -% For strange reasons <<131>> show up as <>.... -% io:format("~w\n",[B]), - B; - Other -> - Other + {bytes,L} -> + B = list_to_binary(L), + io:format("~w\n",[L]), + % For strange reasons <<131>> show up as <>.... + % io:format("~w\n",[B]), + B; + Other -> + Other end. %% @@ -335,27 +310,26 @@ get_binary(P) -> get_term(P) -> case runner:get_term(P) of - {bytes,[131]} -> - io:format("(got single magic, no content)\n",[]), - '$$magic$$'; - {bytes,[131,L]} -> - B = list_to_binary(L), - T = binary_to_term(B), - io:format("~w\n~w\n(got magic)\n",[L,T]), - T; - {bytes,L} -> - B = list_to_binary([131,L]), - T = binary_to_term(B), - io:format("~w\n~w\n(got no magic)\n",[L,T]), - T; - Other -> - Other + {bytes,[131]} -> + io:format("(got single magic, no content)\n",[]), + '$$magic$$'; + {bytes,[131,L]} -> + B = list_to_binary(L), + T = binary_to_term(B), + io:format("~w\n~w\n(got magic)\n",[L,T]), + T; + {bytes,L} -> + B = list_to_binary([131,L]), + T = binary_to_term(B), + io:format("~w\n~w\n(got no magic)\n",[L,T]), + T; + Other -> + Other end. - + %% match_float(F, Match) when is_float(F), is_float(Match), F == Match -> true; match_float(F, Match) when is_float(F), F > Match*0.99, F < Match*1.01 -> true. - diff --git a/lib/erl_interface/test/ei_encode_SUITE_data/Makefile.first b/lib/erl_interface/test/ei_encode_SUITE_data/Makefile.first index 26ba7f475e..0d2d3510a7 100644 --- a/lib/erl_interface/test/ei_encode_SUITE_data/Makefile.first +++ b/lib/erl_interface/test/ei_encode_SUITE_data/Makefile.first @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2004-2009. All Rights Reserved. +# Copyright Ericsson AB 2004-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/ei_encode_SUITE_data/Makefile.src b/lib/erl_interface/test/ei_encode_SUITE_data/Makefile.src index 753700d7e2..3b2cab7af4 100644 --- a/lib/erl_interface/test/ei_encode_SUITE_data/Makefile.src +++ b/lib/erl_interface/test/ei_encode_SUITE_data/Makefile.src @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2004-2009. All Rights Reserved. +# Copyright Ericsson AB 2004-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/ei_encode_SUITE_data/ei_encode_test.c b/lib/erl_interface/test/ei_encode_SUITE_data/ei_encode_test.c index ace368f8e6..32811fdf22 100644 --- a/lib/erl_interface/test/ei_encode_SUITE_data/ei_encode_test.c +++ b/lib/erl_interface/test/ei_encode_SUITE_data/ei_encode_test.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2004-2013. All Rights Reserved. + * Copyright Ericsson AB 2004-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/ei_format_SUITE.erl b/lib/erl_interface/test/ei_format_SUITE.erl index 11cbae31db..07ee479b1f 100644 --- a/lib/erl_interface/test/ei_format_SUITE.erl +++ b/lib/erl_interface/test/ei_format_SUITE.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2001-2011. All Rights Reserved. +%% Copyright Ericsson AB 2001-2016. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -21,158 +21,134 @@ %% -module(ei_format_SUITE). --include_lib("test_server/include/test_server.hrl"). +-include_lib("common_test/include/ct.hrl"). -include("ei_format_SUITE_data/ei_format_test_cases.hrl"). --export([ - format_wo_ver/1, - all/0, suite/0,groups/0, - init_per_suite/1, end_per_suite/1, - init_per_group/2,end_per_group/2, - atoms/1, - tuples/1, - lists/1 - ]). +-export([format_wo_ver/1, + all/0, suite/0, + atoms/1, + tuples/1, + lists/1]). -import(runner, [get_term/1]). %% This test suite test the erl_format() function. %% It uses the port program "ei_format_test". -suite() -> [{ct_hooks,[ts_install_cth]}]. +suite() -> + [{ct_hooks,[ts_install_cth]}]. all() -> [format_wo_ver, atoms, tuples, lists]. -groups() -> - []. - -init_per_suite(Config) -> - Config. - -end_per_suite(_Config) -> - ok. - -init_per_group(_GroupName, Config) -> - Config. - -end_per_group(_GroupName, Config) -> - Config. - - %% Tests formatting various atoms. -atoms(suite) -> []; atoms(Config) when is_list(Config) -> - ?line P = runner:start(?atoms), - - ?line {term, ''} = get_term(P), - ?line {term, 'a'} = get_term(P), - ?line {term, 'A'} = get_term(P), - ?line {term, 'abc'} = get_term(P), - ?line {term, 'Abc'} = get_term(P), - ?line {term, 'ab@c'} = get_term(P), - ?line {term, 'The rain in Spain stays mainly in the plains'} = - get_term(P), - - ?line {term, a} = get_term(P), - ?line {term, ab} = get_term(P), - ?line {term, abc} = get_term(P), - ?line {term, ab@c} = get_term(P), - ?line {term, abcdefghijklmnopq} = get_term(P), - - ?line {term, ''} = get_term(P), - ?line {term, 'a'} = get_term(P), - ?line {term, 'A'} = get_term(P), - ?line {term, 'abc'} = get_term(P), - ?line {term, 'Abc'} = get_term(P), - ?line {term, 'ab@c'} = get_term(P), - ?line {term, 'The rain in Spain stays mainly in the plains'} = - get_term(P), - - ?line {term, a} = get_term(P), - ?line {term, ab} = get_term(P), - ?line {term, abc} = get_term(P), - ?line {term, ab@c} = get_term(P), - ?line {term, ' abcdefghijklmnopq '} = get_term(P), - - ?line runner:recv_eot(P), + P = runner:start(?atoms), + + {term, ''} = get_term(P), + {term, 'a'} = get_term(P), + {term, 'A'} = get_term(P), + {term, 'abc'} = get_term(P), + {term, 'Abc'} = get_term(P), + {term, 'ab@c'} = get_term(P), + {term, 'The rain in Spain stays mainly in the plains'} = + get_term(P), + + {term, a} = get_term(P), + {term, ab} = get_term(P), + {term, abc} = get_term(P), + {term, ab@c} = get_term(P), + {term, abcdefghijklmnopq} = get_term(P), + + {term, ''} = get_term(P), + {term, 'a'} = get_term(P), + {term, 'A'} = get_term(P), + {term, 'abc'} = get_term(P), + {term, 'Abc'} = get_term(P), + {term, 'ab@c'} = get_term(P), + {term, 'The rain in Spain stays mainly in the plains'} = + get_term(P), + + {term, a} = get_term(P), + {term, ab} = get_term(P), + {term, abc} = get_term(P), + {term, ab@c} = get_term(P), + {term, ' abcdefghijklmnopq '} = get_term(P), + + runner:recv_eot(P), ok. %% Tests formatting various tuples -tuples(suite) -> []; tuples(Config) when is_list(Config) -> - ?line P = runner:start(?tuples), - - ?line {term, {}} = get_term(P), - ?line {term, {a}} = get_term(P), - ?line {term, {a, b}} = get_term(P), - ?line {term, {a, b, c}} = get_term(P), - ?line {term, {1}} = get_term(P), - ?line {term, {[]}} = get_term(P), - ?line {term, {[], []}} = get_term(P), - ?line {term, {[], a, b, c}} = get_term(P), - ?line {term, {[], a, [], b, c}} = get_term(P), - ?line {term, {[], a, '', b, c}} = get_term(P), - - ?line runner:recv_eot(P), + P = runner:start(?tuples), + + {term, {}} = get_term(P), + {term, {a}} = get_term(P), + {term, {a, b}} = get_term(P), + {term, {a, b, c}} = get_term(P), + {term, {1}} = get_term(P), + {term, {[]}} = get_term(P), + {term, {[], []}} = get_term(P), + {term, {[], a, b, c}} = get_term(P), + {term, {[], a, [], b, c}} = get_term(P), + {term, {[], a, '', b, c}} = get_term(P), + + runner:recv_eot(P), ok. %% Tests formatting various lists -lists(suite) -> []; lists(Config) when is_list(Config) -> - ?line P = runner:start(?lists), - - ?line {term, []} = get_term(P), - ?line {term, [a]} = get_term(P), - ?line {term, [a, b]} = get_term(P), - ?line {term, [a, b, c]} = get_term(P), - ?line {term, [1]} = get_term(P), - ?line {term, [[]]} = get_term(P), - ?line {term, [[], []]} = get_term(P), - ?line {term, [[], a, b, c]} = get_term(P), - ?line {term, [[], a, [], b, c]} = get_term(P), - ?line {term, [[], a, '', b, c]} = get_term(P), - ?line {term, [[x, 2], [y, 3], [z, 4]]}= get_term(P), - ?line {term, [{a,b},{c,d}]}= get_term(P), -%% ?line {term, [{name, 'Madonna'}, {age, 21}, {data, [{addr, "E-street", 42}]}]} = -%% get_term(P), - - ?line {term, [{pi, F1}, {'cos(70)', F2}]} = get_term(P), + P = runner:start(?lists), + + {term, []} = get_term(P), + {term, [a]} = get_term(P), + {term, [a, b]} = get_term(P), + {term, [a, b, c]} = get_term(P), + {term, [1]} = get_term(P), + {term, [[]]} = get_term(P), + {term, [[], []]} = get_term(P), + {term, [[], a, b, c]} = get_term(P), + {term, [[], a, [], b, c]} = get_term(P), + {term, [[], a, '', b, c]} = get_term(P), + {term, [[x, 2], [y, 3], [z, 4]]}= get_term(P), + {term, [{a,b},{c,d}]} = get_term(P), + %% {term, [{name, 'Madonna'}, {age, 21}, {data, [{addr, "E-street", 42}]}]} = get_term(P), + + {term, [{pi, F1}, {'cos(70)', F2}]} = get_term(P), %% don't match floats directly true= abs(3.1415-F1) < 0.01, true= abs(0.34202-F2) < 0.01, - ?line {term, [[pi, F3], ['cos(70)', F4]]} = get_term(P), + {term, [[pi, F3], ['cos(70)', F4]]} = get_term(P), true= abs(3.1415-F3) < 0.01, true= abs(0.34202-F4) < 0.01, -%% ?line {term, [[pi, 3.1415], [], ["cos(70)", 0.34202]]} = get_term(P), - ?line {term, [-1]} = get_term(P), - ?line {term, "hejsan"} = get_term(P), + %% {term, [[pi, 3.1415], [], ["cos(70)", 0.34202]]} = get_term(P), + {term, [-1]} = get_term(P), + {term, "hejsan"} = get_term(P), - ?line Str1 = lists:duplicate(65535,$A), - ?line Str2 = lists:duplicate(65536,$A), - ?line {term,Str1} = get_term(P), - ?line {term,Str2} = get_term(P), + Str1 = lists:duplicate(65535,$A), + Str2 = lists:duplicate(65536,$A), + {term,Str1} = get_term(P), + {term,Str2} = get_term(P), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. -format_wo_ver(suite) -> []; format_wo_ver(Config) when is_list(Config) -> - ?line P = runner:start(?format_wo_ver), + P = runner:start(?format_wo_ver), - ?line {term, [-1, 2, $c, {a, "b"}, {c, 10}]} = get_term(P), + {term, [-1, 2, $c, {a, "b"}, {c, 10}]} = get_term(P), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. diff --git a/lib/erl_interface/test/ei_format_SUITE_data/Makefile.first b/lib/erl_interface/test/ei_format_SUITE_data/Makefile.first index d655cd13e6..7bf2d761ac 100644 --- a/lib/erl_interface/test/ei_format_SUITE_data/Makefile.first +++ b/lib/erl_interface/test/ei_format_SUITE_data/Makefile.first @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2001-2009. All Rights Reserved. +# Copyright Ericsson AB 2001-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/ei_format_SUITE_data/Makefile.src b/lib/erl_interface/test/ei_format_SUITE_data/Makefile.src index bfcb8ae840..b89dcae45a 100644 --- a/lib/erl_interface/test/ei_format_SUITE_data/Makefile.src +++ b/lib/erl_interface/test/ei_format_SUITE_data/Makefile.src @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2001-2009. All Rights Reserved. +# Copyright Ericsson AB 2001-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/ei_format_SUITE_data/ei_format_test.c b/lib/erl_interface/test/ei_format_SUITE_data/ei_format_test.c index d3ca91db5a..8450332b28 100644 --- a/lib/erl_interface/test/ei_format_SUITE_data/ei_format_test.c +++ b/lib/erl_interface/test/ei_format_SUITE_data/ei_format_test.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2001-2013. All Rights Reserved. + * Copyright Ericsson AB 2001-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/ei_print_SUITE.erl b/lib/erl_interface/test/ei_print_SUITE.erl index 4309b883bb..6d5c341eae 100644 --- a/lib/erl_interface/test/ei_print_SUITE.erl +++ b/lib/erl_interface/test/ei_print_SUITE.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2001-2012. All Rights Reserved. +%% Copyright Ericsson AB 2001-2016. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -21,144 +21,120 @@ %% -module(ei_print_SUITE). --include_lib("test_server/include/test_server.hrl"). +-include_lib("common_test/include/ct.hrl"). -include("ei_print_SUITE_data/ei_print_test_cases.hrl"). --export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, - init_per_group/2,end_per_group/2, - atoms/1, tuples/1, lists/1, strings/1]). +-export([all/0, suite/0, + atoms/1, tuples/1, lists/1, strings/1]). -import(runner, [get_term/1]). %% This test suite test the ei_print() function. %% It uses the port program "ei_format_test". -suite() -> [{ct_hooks,[ts_install_cth]}]. +suite() -> + [{ct_hooks,[ts_install_cth]}]. all() -> [atoms, tuples, lists, strings]. -groups() -> - []. - -init_per_suite(Config) -> - Config. - -end_per_suite(_Config) -> - ok. - -init_per_group(_GroupName, Config) -> - Config. - -end_per_group(_GroupName, Config) -> - Config. - - %% Tests formatting various atoms. -atoms(suite) -> []; atoms(Config) when is_list(Config) -> - ?line P = runner:start(?atoms), - - ?line {term, "''"} = get_term(P), - ?line {term, "a"} = get_term(P), - ?line {term, "'A'"} = get_term(P), - ?line {term, "abc"} = get_term(P), - ?line {term, "'Abc'"} = get_term(P), - ?line {term, "ab@c"} = get_term(P), - ?line {term, "'The rain in Spain stays mainly in the plains'"} = - get_term(P), - - ?line {term, "a"} = get_term(P), - ?line {term, "ab"} = get_term(P), - ?line {term, "abc"} = get_term(P), - ?line {term, "ab@c"} = get_term(P), - ?line {term, "abcdefghijklmnopq"} = get_term(P), - - ?line {term, "''"} = get_term(P), - ?line {term, "a"} = get_term(P), - ?line {term, "'A'"} = get_term(P), - ?line {term, "abc"} = get_term(P), - ?line {term, "'Abc'"} = get_term(P), - ?line {term, "ab@c"} = get_term(P), - ?line {term, "'The rain in Spain stays mainly in the plains'"} = - get_term(P), - - ?line {term, "a"} = get_term(P), - ?line {term, "ab"} = get_term(P), - ?line {term, "abc"} = get_term(P), - ?line {term, "ab@c"} = get_term(P), - ?line {term, "' abcdefghijklmnopq '"} = get_term(P), - - ?line runner:recv_eot(P), + P = runner:start(?atoms), + + {term, "''"} = get_term(P), + {term, "a"} = get_term(P), + {term, "'A'"} = get_term(P), + {term, "abc"} = get_term(P), + {term, "'Abc'"} = get_term(P), + {term, "ab@c"} = get_term(P), + {term, "'The rain in Spain stays mainly in the plains'"} = get_term(P), + + {term, "a"} = get_term(P), + {term, "ab"} = get_term(P), + {term, "abc"} = get_term(P), + {term, "ab@c"} = get_term(P), + {term, "abcdefghijklmnopq"} = get_term(P), + + {term, "''"} = get_term(P), + {term, "a"} = get_term(P), + {term, "'A'"} = get_term(P), + {term, "abc"} = get_term(P), + {term, "'Abc'"} = get_term(P), + {term, "ab@c"} = get_term(P), + {term, "'The rain in Spain stays mainly in the plains'"} = get_term(P), + + {term, "a"} = get_term(P), + {term, "ab"} = get_term(P), + {term, "abc"} = get_term(P), + {term, "ab@c"} = get_term(P), + {term, "' abcdefghijklmnopq '"} = get_term(P), + + runner:recv_eot(P), ok. %% Tests formatting various tuples -tuples(suite) -> []; tuples(Config) when is_list(Config) -> - ?line P = runner:start(?tuples), - - ?line {term, "{}"} = get_term(P), - ?line {term, "{a}"} = get_term(P), - ?line {term, "{a, b}"} = get_term(P), - ?line {term, "{a, b, c}"} = get_term(P), - ?line {term, "{1}"} = get_term(P), - ?line {term, "{[]}"} = get_term(P), - ?line {term, "{[], []}"} = get_term(P), - ?line {term, "{[], a, b, c}"} = get_term(P), - ?line {term, "{[], a, [], b, c}"} = get_term(P), - ?line {term, "{[], a, '', b, c}"} = get_term(P), - - ?line runner:recv_eot(P), + P = runner:start(?tuples), + + {term, "{}"} = get_term(P), + {term, "{a}"} = get_term(P), + {term, "{a, b}"} = get_term(P), + {term, "{a, b, c}"} = get_term(P), + {term, "{1}"} = get_term(P), + {term, "{[]}"} = get_term(P), + {term, "{[], []}"} = get_term(P), + {term, "{[], a, b, c}"} = get_term(P), + {term, "{[], a, [], b, c}"} = get_term(P), + {term, "{[], a, '', b, c}"} = get_term(P), + + runner:recv_eot(P), ok. %% Tests formatting various lists -lists(suite) -> []; lists(Config) when is_list(Config) -> - ?line P = runner:start(?lists), - - ?line {term, "[]"} = get_term(P), - ?line {term, "[a]"} = get_term(P), - ?line {term, "[a, b]"} = get_term(P), - ?line {term, "[a, b, c]"} = get_term(P), - ?line {term, "[1]"} = get_term(P), - ?line {term, "[[]]"} = get_term(P), - ?line {term, "[[], []]"} = get_term(P), - ?line {term, "[[], a, b, c]"} = get_term(P), - ?line {term, "[[], a, [], b, c]"} = get_term(P), - ?line {term, "[[], a, '', b, c]"} = get_term(P), - ?line {term, "[[x, 2], [y, 3], [z, 4]]"}= get_term(P), - -%% ?line {term, "[{name, 'Madonna'}, {age, 21}, {data, [{addr, "E-street", 42}]}]"} = -%% get_term(P), + P = runner:start(?lists), + + {term, "[]"} = get_term(P), + {term, "[a]"} = get_term(P), + {term, "[a, b]"} = get_term(P), + {term, "[a, b, c]"} = get_term(P), + {term, "[1]"} = get_term(P), + {term, "[[]]"} = get_term(P), + {term, "[[], []]"} = get_term(P), + {term, "[[], a, b, c]"} = get_term(P), + {term, "[[], a, [], b, c]"} = get_term(P), + {term, "[[], a, '', b, c]"} = get_term(P), + {term, "[[x, 2], [y, 3], [z, 4]]"}= get_term(P), + + %% {term, "[{name, 'Madonna'}, {age, 21}, {data, [{addr, "E-street", 42}]}]"} = get_term(P), %% maybe regexp instead? - ?line {term, "[{pi, 3.141500}, {'cos(70)', 0.342020}]"} = get_term(P), - ?line {term, "[[pi, 3.141500], ['cos(70)', 0.342020]]"} = get_term(P), + {term, "[{pi, 3.141500}, {'cos(70)', 0.342020}]"} = get_term(P), + {term, "[[pi, 3.141500], ['cos(70)', 0.342020]]"} = get_term(P), - ?line {term, "[-1]"} = get_term(P), + {term, "[-1]"} = get_term(P), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. -strings(suite) -> []; strings(Config) when is_list(Config) -> - ?line P = runner:start(?strings), - - ?line {term, "\"\\n\""} = get_term(P), - ?line {term, "\"\\r\\n\""} = get_term(P), - ?line {term, "\"a\""} = get_term(P), - ?line {term, "\"A\""} = get_term(P), - ?line {term, "\"0\""} = get_term(P), - ?line {term, "\"9\""} = get_term(P), - ?line {term, "\"The rain in Spain stays mainly in the plains\""} = get_term(P), - ?line {term, "\" abcdefghijklmnopq \""} = get_term(P), - - ?line runner:recv_eot(P), + P = runner:start(?strings), + + {term, "\"\\n\""} = get_term(P), + {term, "\"\\r\\n\""} = get_term(P), + {term, "\"a\""} = get_term(P), + {term, "\"A\""} = get_term(P), + {term, "\"0\""} = get_term(P), + {term, "\"9\""} = get_term(P), + {term, "\"The rain in Spain stays mainly in the plains\""} = get_term(P), + {term, "\" abcdefghijklmnopq \""} = get_term(P), + + runner:recv_eot(P), ok. - diff --git a/lib/erl_interface/test/ei_print_SUITE_data/Makefile.first b/lib/erl_interface/test/ei_print_SUITE_data/Makefile.first index 987dbc27a9..3d2395a2c2 100644 --- a/lib/erl_interface/test/ei_print_SUITE_data/Makefile.first +++ b/lib/erl_interface/test/ei_print_SUITE_data/Makefile.first @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2001-2009. All Rights Reserved. +# Copyright Ericsson AB 2001-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/ei_print_SUITE_data/Makefile.src b/lib/erl_interface/test/ei_print_SUITE_data/Makefile.src index 266fcfcb10..150c11b99c 100644 --- a/lib/erl_interface/test/ei_print_SUITE_data/Makefile.src +++ b/lib/erl_interface/test/ei_print_SUITE_data/Makefile.src @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2001-2009. All Rights Reserved. +# Copyright Ericsson AB 2001-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/ei_print_SUITE_data/ei_print_test.c b/lib/erl_interface/test/ei_print_SUITE_data/ei_print_test.c index 2db5450b77..15cfbcae34 100644 --- a/lib/erl_interface/test/ei_print_SUITE_data/ei_print_test.c +++ b/lib/erl_interface/test/ei_print_SUITE_data/ei_print_test.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2001-2013. All Rights Reserved. + * Copyright Ericsson AB 2001-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/ei_tmo_SUITE.erl b/lib/erl_interface/test/ei_tmo_SUITE.erl index 689499f42f..003fe20594 100644 --- a/lib/erl_interface/test/ei_tmo_SUITE.erl +++ b/lib/erl_interface/test/ei_tmo_SUITE.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2003-2012. All Rights Reserved. +%% Copyright Ericsson AB 2003-2016. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -21,337 +21,304 @@ %% -module(ei_tmo_SUITE). --include_lib("test_server/include/test_server.hrl"). +-include_lib("common_test/include/ct.hrl"). -include_lib("kernel/include/inet.hrl"). -include("ei_tmo_SUITE_data/ei_tmo_test_cases.hrl"). --define(dummy_host,test01). +-export([all/0, suite/0, + init_per_testcase/2, end_per_testcase/2, + framework_check/1, ei_accept_tmo/1, ei_connect_tmo/1, ei_send_tmo/1, + ei_connect_tmo/0, + ei_recv_tmo/1]). --export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, - init_per_group/2,end_per_group/2, - init_per_testcase/2, end_per_testcase/2, - framework_check/1, ei_accept_tmo/1, ei_connect_tmo/1, ei_send_tmo/1, - ei_recv_tmo/1]). - -suite() -> [{ct_hooks,[ts_install_cth]}]. +suite() -> + [{ct_hooks,[ts_install_cth]}, + {timetrap, {minutes, 1}}]. all() -> [framework_check, ei_accept_tmo, ei_connect_tmo, ei_send_tmo, ei_recv_tmo]. -groups() -> - []. - -init_per_suite(Config) -> - Config. - -end_per_suite(_Config) -> - ok. - -init_per_group(_GroupName, Config) -> - Config. - -end_per_group(_GroupName, Config) -> - Config. - - init_per_testcase(_Case, Config) -> - Dog = ?t:timetrap(?t:minutes(1)), % test if platform is vxworks_simso - ?line {_,Host} = split(node()), + {_,Host} = split(node()), Bool = case atom_to_list(Host) of - [$v,$x,$s,$i,$m | _] -> true; - _ -> false - end, - [{vxsim,Bool},{watchdog, Dog}|Config]. - -end_per_testcase(_Case, Config) -> - Dog = ?config(watchdog, Config), - test_server:timetrap_cancel(Dog), + [$v,$x,$s,$i,$m | _] -> true; + _ -> false + end, + [{vxsim,Bool}|Config]. + +end_per_testcase(_Case, _Config) -> ok. -framework_check(doc) -> - ["Check the framework."]; -framework_check(suite) -> - []; +%% Check the framework. framework_check(Config) when is_list(Config) -> %%dbg:tracer(), %%dbg:p(self()), - ?line P = runner:start(?framework_check), - ?line runner:send_term(P,{hello,world}), - ?line {term, {hello,world}} = runner:get_term(P), - ?line runner:recv_eot(P), + P = runner:start(?framework_check), + runner:send_term(P,{hello,world}), + {term, {hello,world}} = runner:get_term(P), + runner:recv_eot(P), ok. -ei_recv_tmo(doc) -> - ["Check recv with timeouts."]; -ei_recv_tmo(suite) -> - []; +%% Check recv with timeouts. ei_recv_tmo(Config) when is_list(Config) -> - ?line do_one_recv(Config,c_node_recv_tmo_1), - ?line do_one_recv_failure(Config,c_node_recv_tmo_2), + do_one_recv(Config,c_node_recv_tmo_1), + do_one_recv_failure(Config,c_node_recv_tmo_2), ok. do_one_recv(Config,CNode) -> - ?line {_,Host} = split(node()), - ?line P1 = runner:start(?recv_tmo), - ?line runner:send_term(P1,{CNode, - erlang:get_cookie(), - node()}), - ?line {term, X} = runner:get_term(P1, 10000), - ?line true = is_integer(X), - ?line CNode1 = join(CNode,Host), - ?line Term1 = {hej,[hopp,{i,[lingon,"skogen"]}]}, - ?line {test,CNode1} ! Term1, - ?line {term, Term1} = runner:get_term(P1, 10000), - ?line runner:recv_eot(P1). - + {_,Host} = split(node()), + P1 = runner:start(?recv_tmo), + runner:send_term(P1,{CNode, + erlang:get_cookie(), + node()}), + {term, X} = runner:get_term(P1, 10000), + true = is_integer(X), + CNode1 = join(CNode,Host), + Term1 = {hej,[hopp,{i,[lingon,"skogen"]}]}, + {test,CNode1} ! Term1, + {term, Term1} = runner:get_term(P1, 10000), + runner:recv_eot(P1). + do_one_recv_failure(Config,CNode) -> - ?line P1 = runner:start(?recv_tmo), - ?line runner:send_term(P1,{CNode, - erlang:get_cookie(), - node()}), - ?line {term, X} = runner:get_term(P1, 10000), - ?line true = is_integer(X), - ?line {term, {Ret,ETimedout,ETimedout}} = runner:get_term(P1, 10000), - ?line true = (Ret < 0), - ?line runner:recv_eot(P1). - - -ei_send_tmo(doc) -> - ["Check send with timeouts."]; -ei_send_tmo(suite) -> - []; + P1 = runner:start(?recv_tmo), + runner:send_term(P1,{CNode, + erlang:get_cookie(), + node()}), + {term, X} = runner:get_term(P1, 10000), + true = is_integer(X), + {term, {Ret,ETimedout,ETimedout}} = runner:get_term(P1, 10000), + true = (Ret < 0), + runner:recv_eot(P1). + + +%% Check send with timeouts. ei_send_tmo(Config) when is_list(Config) -> %dbg:tracer(), %dbg:p(self()), - VxSim = ?config(vxsim, Config), - ?line register(ei_send_tmo_1,self()), - ?line do_one_send(Config,self(),c_node_send_tmo_1), - ?line do_one_send(Config,ei_send_tmo_1,c_node_send_tmo_2), - ?line do_one_send_failure(Config,self(),cccc1,c_nod_send_tmo_3,VxSim), - ?line do_one_send_failure(Config,ei_send_tmo_1,cccc2,c_nod_send_tmo_4,VxSim), + VxSim = proplists:get_value(vxsim, Config), + register(ei_send_tmo_1,self()), + do_one_send(Config,self(),c_node_send_tmo_1), + do_one_send(Config,ei_send_tmo_1,c_node_send_tmo_2), + do_one_send_failure(Config,self(),cccc1,c_nod_send_tmo_3,VxSim), + do_one_send_failure(Config,ei_send_tmo_1,cccc2,c_nod_send_tmo_4,VxSim), ok. - + do_one_send(Config,From,CNode) -> - ?line {_,Host} = split(node()), - ?line P1 = runner:start(?send_tmo), - ?line runner:send_term(P1,{CNode, - erlang:get_cookie(), - node()}), - ?line {term, X} = runner:get_term(P1, 10000), - ?line true = is_integer(X), - ?line CNode1 = join(CNode,Host), - ?line Term1 = {hej,[hopp,{i,[lingon,"skogen"]}]}, - ?line {test,CNode1} ! {From,1,Term1}, - ?line ok = receive - Term1 -> - ok - after 2000 -> - error - end, - ?line {term, 0} = runner:get_term(P1, 10000), - ?line runner:recv_eot(P1). + {_,Host} = split(node()), + P1 = runner:start(?send_tmo), + runner:send_term(P1,{CNode, + erlang:get_cookie(), + node()}), + {term, X} = runner:get_term(P1, 10000), + true = is_integer(X), + CNode1 = join(CNode,Host), + Term1 = {hej,[hopp,{i,[lingon,"skogen"]}]}, + {test,CNode1} ! {From,1,Term1}, + ok = receive + Term1 -> + ok + after 2000 -> + error + end, + {term, 0} = runner:get_term(P1, 10000), + runner:recv_eot(P1). do_one_send_failure(Config,From,FakeName,CName,VxSim) -> - ?line {_,Host} = split(node()), - ?line OurName = join(FakeName,Host), - ?line Node = join(CName,Host), - ?line LSocket = case gen_tcp:listen(0, [{active, false}, {packet,2}]) of - {ok, Socket} -> - ?line Socket; - Else -> - ?line exit(Else) - end, - ?line EpmdSocket = register(OurName, LSocket, 1, 5), - ?line P3 = runner:start(?send_tmo), - ?line Cookie = kaksmula_som_ingen_bryr_sig_om, - ?line runner:send_term(P3,{CName, - Cookie, - OurName}), - ?line SocketB = case gen_tcp:accept(LSocket) of - {ok, Socket1} -> - ?line Socket1; - Else2 -> - ?line exit(Else2) - end, - ?line {hidden,Node,5} = recv_name(SocketB), % See 1) - ?line send_status(SocketB, ok), - ?line MyChallengeB = gen_challenge(), - ?line send_challenge(SocketB, OurName, MyChallengeB, 5), - ?line HisChallengeB = recv_challenge_reply( - SocketB, - MyChallengeB, - Cookie), - ?line DigestB = gen_digest(HisChallengeB,Cookie), - ?line send_challenge_ack(SocketB, DigestB), - ?line inet:setopts(SocketB, [{active, false}, - {packet, 4}]), - ?line {term, X} = runner:get_term(P3, 10000), - ?line true = is_integer(X), - ?line Message = [112,term_to_binary({6,self(),'',test}), - term_to_binary({From,10000, - {app,["lapp",{sa,["att",du,{slapp, - sitta}]}]}})], - ?line gen_tcp:send(SocketB,Message), - - %% At this point the test program starts sending messages (max 10000). Since + {_,Host} = split(node()), + OurName = join(FakeName,Host), + Node = join(CName,Host), + LSocket = case gen_tcp:listen(0, [{active, false}, {packet,2}]) of + {ok, Socket} -> + Socket; + Else -> + exit(Else) + end, + EpmdSocket = register(OurName, LSocket, 1, 5), + P3 = runner:start(?send_tmo), + Cookie = kaksmula_som_ingen_bryr_sig_om, + runner:send_term(P3,{CName, + Cookie, + OurName}), + SocketB = case gen_tcp:accept(LSocket) of + {ok, Socket1} -> + Socket1; + Else2 -> + exit(Else2) + end, + {hidden,Node,5} = recv_name(SocketB), % See 1) + send_status(SocketB, ok), + MyChallengeB = gen_challenge(), + send_challenge(SocketB, OurName, MyChallengeB, 5), + HisChallengeB = recv_challenge_reply(SocketB, + MyChallengeB, + Cookie), + DigestB = gen_digest(HisChallengeB,Cookie), + send_challenge_ack(SocketB, DigestB), + inet:setopts(SocketB, [{active, false}, + {packet, 4}]), + {term, X} = runner:get_term(P3, 10000), + true = is_integer(X), + Message = [112,term_to_binary({6,self(),'',test}), + term_to_binary({From,50000, + {app,["lapp",{sa,["att",du,{slapp, + sitta}]}]}})], + gen_tcp:send(SocketB,Message), + + %% At this point the test program starts sending messages (max 50000). Since %% we're not receiving, eventually the send buffer fills up. Then no more %% sending is possible and select() times out. The number of messages sent %% before this happens is returned in Iters. The timeout value for get_term/2 %% must be large enough so there's time for the select() to time out and %% the test program to return the error tuple (below). - Res0 = - if VxSim == false -> - ?line {term,{Res,ETO,Iters,ETO}} = runner:get_term(P3, 20000), - Res; - true -> % relax the test for vxsim - ?line case runner:get_term(P3, 20000) of - {term,{Res,ETO,Iters,ETO}} -> - Res; - {term,{Res,_,Iters,ETO}} -> % EIO? - Res - end - end, - ?line runner:recv_eot(P3), - ?line true = ((Res0 < 0) and (Iters > 0)), - ?line gen_tcp:close(SocketB), - ?line gen_tcp:close(EpmdSocket), + + Res0 = if VxSim == false -> + {term,{Res,ETO,Iters,ETO}} = runner:get_term(P3, 20000), + Res; + true -> % relax the test for vxsim + case runner:get_term(P3, 20000) of + {term,{Res,ETO,Iters,ETO}} -> + Res; + {term,{Res,_,Iters,_ETO}} -> % EIO? + Res + end + end, + runner:recv_eot(P3), + true = ((Res0 < 0) and (Iters > 0)), + gen_tcp:close(SocketB), + gen_tcp:close(EpmdSocket), ok. - -ei_connect_tmo(doc) -> - ["Check accept with timeouts."]; -ei_connect_tmo(suite) -> - []; + +%% Check accept with timeouts. +ei_connect_tmo() -> [{require, test_host_not_reachable}]. + ei_connect_tmo(Config) when is_list(Config) -> %dbg:tracer(), %dbg:p(self()), - VxSim = ?config(vxsim, Config), + VxSim = proplists:get_value(vxsim, Config), DummyNode = make_and_check_dummy(), - ?line P = runner:start(?connect_tmo), - ?line runner:send_term(P,{c_nod_connect_tmo_1, - kaksmula_som_ingen_bryr_sig_om, - DummyNode}), + P = runner:start(?connect_tmo), + runner:send_term(P,{c_nod_connect_tmo_1, + kaksmula_som_ingen_bryr_sig_om, + DummyNode}), ETimedout = - if VxSim == false -> - ?line {term,{-3,ETO,ETO}} = runner:get_term(P, 10000), - ?line ETO; - true -> % relax the test for vxsim - ?line case runner:get_term(P, 10000) of - {term,{-3,ETO,ETO}} -> - ?line ETO; - {term,{-1,_,ETO}} -> % EHOSTUNREACH = ok - ?line ETO - end - end, - ?line runner:recv_eot(P), - ?line P2 = runner:start(?connect_tmo), - ?line runner:send_term(P2,{c_nod_connect_tmo_2, - erlang:get_cookie(), - node()}), - ?line {term, X} = runner:get_term(P2, 10000), - ?line runner:recv_eot(P2), - ?line true = is_integer(X), + if VxSim == false -> + {term,{-3,ETO,ETO}} = runner:get_term(P, 10000), + ETO; + true -> % relax the test for vxsim + case runner:get_term(P, 10000) of + {term,{-3,ETO,ETO}} -> + ETO; + {term,{-1,_,ETO}} -> % EHOSTUNREACH = ok + ETO + end + end, + runner:recv_eot(P), + P2 = runner:start(?connect_tmo), + runner:send_term(P2,{c_nod_connect_tmo_2, + erlang:get_cookie(), + node()}), + {term, X} = runner:get_term(P2, 10000), + runner:recv_eot(P2), + true = is_integer(X), %% Aborted handshake test... - ?line {_,Host} = split(node()), - ?line OurName = join(cccc,Host), - ?line Node = join(c_nod_connect_tmo_3,Host), - ?line LSocket = case gen_tcp:listen(0, [{active, false}, {packet,2}]) of - {ok, Socket} -> - ?line Socket; - Else -> - ?line exit(Else) - end, - ?line EpmdSocket = register(OurName, LSocket, 1, 5), - ?line P3 = runner:start(?connect_tmo), - ?line Cookie = kaksmula_som_ingen_bryr_sig_om, - ?line runner:send_term(P3,{c_nod_connect_tmo_3, - Cookie, - OurName}), - ?line SocketB = case gen_tcp:accept(LSocket) of - {ok, Socket1} -> - ?line Socket1; - Else2 -> - ?line exit(Else2) - end, - ?line {hidden,Node,5} = recv_name(SocketB), % See 1) - ?line send_status(SocketB, ok), - ?line MyChallengeB = gen_challenge(), - ?line send_challenge(SocketB, OurName, MyChallengeB, 5), - ?line HisChallengeB = recv_challenge_reply( - SocketB, - MyChallengeB, - Cookie), - ?line {term,{-1,ETimedout,ETimedout}} = runner:get_term(P3, 10000), - ?line runner:recv_eot(P3), - ?line gen_tcp:close(SocketB), - ?line gen_tcp:close(EpmdSocket), + {_,Host} = split(node()), + OurName = join(cccc,Host), + Node = join(c_nod_connect_tmo_3,Host), + LSocket = case gen_tcp:listen(0, [{active, false}, {packet,2}]) of + {ok, Socket} -> + Socket; + Else -> + exit(Else) + end, + EpmdSocket = register(OurName, LSocket, 1, 5), + P3 = runner:start(?connect_tmo), + Cookie = kaksmula_som_ingen_bryr_sig_om, + runner:send_term(P3,{c_nod_connect_tmo_3, + Cookie, + OurName}), + SocketB = case gen_tcp:accept(LSocket) of + {ok, Socket1} -> + Socket1; + Else2 -> + exit(Else2) + end, + {hidden,Node,5} = recv_name(SocketB), % See 1) + send_status(SocketB, ok), + MyChallengeB = gen_challenge(), + send_challenge(SocketB, OurName, MyChallengeB, 5), + _HisChallengeB = recv_challenge_reply(SocketB, + MyChallengeB, + Cookie), + {term,{-1,ETimedout,ETimedout}} = runner:get_term(P3, 10000), + runner:recv_eot(P3), + gen_tcp:close(SocketB), + gen_tcp:close(EpmdSocket), ok. - -ei_accept_tmo(doc) -> - ["Check accept with timeouts."]; -ei_accept_tmo(suite) -> - []; + +%% Check accept with timeouts. ei_accept_tmo(Config) when is_list(Config) -> %%dbg:tracer(), %%dbg:p(self()), - ?line P = runner:start(?accept_tmo), - ?line runner:send_term(P,{c_nod_som_ingen_kontaktar_1, - kaksmula_som_ingen_bryr_sig_om}), - ?line {term,{-1,ETimedout,ETimedout}} = runner:get_term(P, 10000), - ?line runner:recv_eot(P), - ?line P2 = runner:start(?accept_tmo), - ?line runner:send_term(P2,{c_nod_som_vi_kontaktar_1, - erlang:get_cookie()}), - ?line receive after 1000 -> ok end, - ?line CNode1 = make_node(c_nod_som_vi_kontaktar_1), - ?line {ignored,CNode1} ! tjenare, - ?line {term, X} = runner:get_term(P2, 10000), - ?line runner:recv_eot(P2), - ?line true = is_integer(X), - ?line P3 = runner:start(?accept_tmo), - ?line runner:send_term(P3,{c_nod_som_vi_kontaktar_2, - erlang:get_cookie()}), - ?line receive after 1000 -> ok end, - ?line CNode2 = make_node(c_nod_som_vi_kontaktar_2), - ?line {NA,NB} = split(CNode2), - ?line {_,Host} = split(node()), - ?line OurName = join(ccc,Host), - ?line {port,PortNo,_} = erl_epmd:port_please(NA,NB), - ?line {ok, SocketA} = gen_tcp:connect(atom_to_list(NB),PortNo, - [{active,false}, - {packet,2}]), - ?line send_name(SocketA,OurName,5), - ?line ok = recv_status(SocketA), - ?line {hidden,Node,5,HisChallengeA} = recv_challenge(SocketA), % See 1) - ?line OurChallengeA = gen_challenge(), - ?line OurDigestA = gen_digest(HisChallengeA, erlang:get_cookie()), + P = runner:start(?accept_tmo), + runner:send_term(P,{c_nod_som_ingen_kontaktar_1, + kaksmula_som_ingen_bryr_sig_om}), + {term,{-1,ETimedout,ETimedout}} = runner:get_term(P, 10000), + runner:recv_eot(P), + P2 = runner:start(?accept_tmo), + runner:send_term(P2,{c_nod_som_vi_kontaktar_1, + erlang:get_cookie()}), + receive after 1000 -> ok end, + CNode1 = make_node(c_nod_som_vi_kontaktar_1), + {ignored,CNode1} ! tjenare, + {term, X} = runner:get_term(P2, 10000), + runner:recv_eot(P2), + true = is_integer(X), + P3 = runner:start(?accept_tmo), + runner:send_term(P3,{c_nod_som_vi_kontaktar_2, + erlang:get_cookie()}), + receive after 1000 -> ok end, + CNode2 = make_node(c_nod_som_vi_kontaktar_2), + {NA,NB} = split(CNode2), + {_,Host} = split(node()), + OurName = join(ccc,Host), + {port,PortNo,_} = erl_epmd:port_please(NA,NB), + {ok, SocketA} = gen_tcp:connect(atom_to_list(NB),PortNo, + [{active,false}, + {packet,2}]), + send_name(SocketA,OurName,5), + ok = recv_status(SocketA), + {hidden,_Node,5,HisChallengeA} = recv_challenge(SocketA), % See 1) + _OurChallengeA = gen_challenge(), + _OurDigestA = gen_digest(HisChallengeA, erlang:get_cookie()), %% Dont do the last two steps of the connection setup... %% send_challenge_reply(SocketA, OurChallengeA, OurDigestA), %% ok = recv_challenge_ack(SocketA, OurChallengeA, erlang:get_cookie()), - ?line {term, {-1,ETimedout,ETimedout}} = runner:get_term(P3, 10000), - ?line runner:recv_eot(P3), - ?line gen_tcp:close(SocketA), + {term, {-1,ETimedout,ETimedout}} = runner:get_term(P3, 10000), + runner:recv_eot(P3), + gen_tcp:close(SocketA), ok. make_node(X) -> list_to_atom(atom_to_list(X) ++ "@" ++ - hd(tl(string:tokens(atom_to_list(node()),"@")))). + hd(tl(string:tokens(atom_to_list(node()),"@")))). make_and_check_dummy() -> % First check that the host has an ip and is *not* reachable - ?line case gen_tcp:connect(?dummy_host,23,[{active,false}],5000) of - {error,timeout} -> ok; - {error,ehostunreach} -> ok - end, + HostNotReachable = ct:get_config(test_host_not_reachable), + case gen_tcp:connect(HostNotReachable, 23, [{active,false}],5000) of + {error,timeout} -> ok; + {error,ehostunreach} -> ok + end, - list_to_atom("dummy@"++atom_to_list(?dummy_host)). + list_to_atom("dummy@"++HostNotReachable). %% %% Stolen from the erl_distribution_wb_test in kernel @@ -359,12 +326,12 @@ make_and_check_dummy() -> %% -define(to_port(Socket, Data), - case inet_tcp:send(Socket, Data) of - {error, closed} -> - self() ! {tcp_closed, Socket}, - {error, closed}; - R -> - R + case inet_tcp:send(Socket, Data) of + {error, closed} -> + self() ! {tcp_closed, Socket}, + {error, closed}; + R -> + R end). -define(DFLAG_PUBLISHED,1). @@ -382,8 +349,8 @@ make_and_check_dummy() -> -define(int16(X), [((X) bsr 8) band 16#ff, (X) band 16#ff]). -define(int32(X), - [((X) bsr 24) band 16#ff, ((X) bsr 16) band 16#ff, - ((X) bsr 8) band 16#ff, (X) band 16#ff]). + [((X) bsr 24) band 16#ff, ((X) bsr 16) band 16#ff, + ((X) bsr 8) band 16#ff, (X) band 16#ff]). -define(i16(X1,X0), (?u16(X1,X0) - @@ -406,9 +373,9 @@ make_and_check_dummy() -> %% This is no proper random number, but that is not really important in %% this test gen_challenge() -> - {_,_,N} = erlang:now(), + {_,_,N} = os:timestamp(), N. - + %% Generate a message digest from Challenge number and Cookie gen_digest(Challenge, Cookie) when is_integer(Challenge), is_atom(Cookie) -> C0 = erlang:md5_init(), @@ -423,95 +390,93 @@ gen_digest(Challenge, Cookie) when is_integer(Challenge), is_atom(Cookie) -> send_status(Socket, Stat) -> case gen_tcp:send(Socket, [$s | atom_to_list(Stat)]) of - {error, _} -> - ?shutdown(could_not_send_status); - _ -> - true + {error, _} -> ?shutdown(could_not_send_status); + _ -> true end. recv_status(Socket) -> case gen_tcp:recv(Socket, 0) of - {ok, [$s|StrStat]} -> - list_to_atom(StrStat); - Bad -> - exit(Bad) + {ok, [$s|StrStat]} -> + list_to_atom(StrStat); + Bad -> + exit(Bad) end. send_challenge(Socket, Node, Challenge, Version) -> send_challenge(Socket, Node, Challenge, Version, ?COMPULSORY_DFLAGS). send_challenge(Socket, Node, Challenge, Version, Flags) -> - {ok, {{Ip1,Ip2,Ip3,Ip4}, _}} = inet:sockname(Socket), + {ok, {{_Ip1,_Ip2,_Ip3,_Ip4}, _}} = inet:sockname(Socket), ?to_port(Socket, [$n,?int16(Version),?int32(Flags), - ?int32(Challenge), atom_to_list(Node)]). + ?int32(Challenge), atom_to_list(Node)]). recv_challenge(Socket) -> case gen_tcp:recv(Socket, 0) of - {ok,[$n,V1,V0,Fl1,Fl2,Fl3,Fl4,CA3,CA2,CA1,CA0 | Ns]} -> - Flags = ?u32(Fl1,Fl2,Fl3,Fl4), - Type = case Flags band ?DFLAG_PUBLISHED of - 0 -> - hidden; - _ -> - normal - end, - Node =list_to_atom(Ns), - Version = ?u16(V1,V0), - Challenge = ?u32(CA3,CA2,CA1,CA0), - {Type,Node,Version,Challenge}; - _ -> - ?shutdown(no_node) + {ok,[$n,V1,V0,Fl1,Fl2,Fl3,Fl4,CA3,CA2,CA1,CA0 | Ns]} -> + Flags = ?u32(Fl1,Fl2,Fl3,Fl4), + Type = case Flags band ?DFLAG_PUBLISHED of + 0 -> + hidden; + _ -> + normal + end, + Node =list_to_atom(Ns), + Version = ?u16(V1,V0), + Challenge = ?u32(CA3,CA2,CA1,CA0), + {Type,Node,Version,Challenge}; + _ -> + ?shutdown(no_node) end. -send_challenge_reply(Socket, Challenge, Digest) -> - ?to_port(Socket, [$r,?int32(Challenge),Digest]). +%send_challenge_reply(Socket, Challenge, Digest) -> +% ?to_port(Socket, [$r,?int32(Challenge),Digest]). recv_challenge_reply(Socket, ChallengeA, Cookie) -> case gen_tcp:recv(Socket, 0) of - {ok,[$r,CB3,CB2,CB1,CB0 | SumB]} when length(SumB) == 16 -> - SumA = gen_digest(ChallengeA, Cookie), - ChallengeB = ?u32(CB3,CB2,CB1,CB0), - if SumB == SumA -> - ChallengeB; - true -> - ?shutdown(bad_challenge_reply) - end; - _ -> - ?shutdown(no_node) + {ok,[$r,CB3,CB2,CB1,CB0 | SumB]} when length(SumB) == 16 -> + SumA = gen_digest(ChallengeA, Cookie), + ChallengeB = ?u32(CB3,CB2,CB1,CB0), + if SumB == SumA -> + ChallengeB; + true -> + ?shutdown(bad_challenge_reply) + end; + _ -> + ?shutdown(no_node) end. send_challenge_ack(Socket, Digest) -> ?to_port(Socket, [$a,Digest]). -recv_challenge_ack(Socket, ChallengeB, CookieA) -> - case gen_tcp:recv(Socket, 0) of - {ok,[$a | SumB]} when length(SumB) == 16 -> - SumA = gen_digest(ChallengeB, CookieA), - if SumB == SumA -> - ok; - true -> - ?shutdown(bad_challenge_ack) - end; - _ -> - ?shutdown(bad_challenge_ack) - end. +%recv_challenge_ack(Socket, ChallengeB, CookieA) -> +% case gen_tcp:recv(Socket, 0) of +% {ok,[$a | SumB]} when length(SumB) == 16 -> +% SumA = gen_digest(ChallengeB, CookieA), +% if SumB == SumA -> +% ok; +% true -> +% ?shutdown(bad_challenge_ack) +% end; +% _ -> +% ?shutdown(bad_challenge_ack) +% end. send_name(Socket, MyNode0, Version) -> send_name(Socket, MyNode0, Version, ?COMPULSORY_DFLAGS). send_name(Socket, MyNode0, Version, Flags) -> MyNode = atom_to_list(MyNode0), ?to_port(Socket, [$n,?int16(Version),?int32(Flags)] ++ - MyNode). + MyNode). %% %% recv_name is common for both old and new handshake. %% recv_name(Socket) -> case gen_tcp:recv(Socket, 0) of - {ok,Data} -> - get_name(Data); - Res -> - ?shutdown({no_node,Res}) + {ok,Data} -> + get_name(Data); + Res -> + ?shutdown({no_node,Res}) end. get_name([$m,VersionA,VersionB,_Ip1,_Ip2,_Ip3,_Ip4|OtherNode]) -> @@ -520,11 +485,9 @@ get_name([$h,VersionA,VersionB,_Ip1,_Ip2,_Ip3,_Ip4|OtherNode]) -> {hidden, list_to_atom(OtherNode), ?u16(VersionA,VersionB)}; get_name([$n,VersionA, VersionB, Flag1, Flag2, Flag3, Flag4 | OtherNode]) -> Type = case ?u32(Flag1, Flag2, Flag3, Flag4) band ?DFLAG_PUBLISHED of - 0 -> - hidden; - _ -> - normal - end, + 0 -> hidden; + _ -> normal + end, {Type, list_to_atom(OtherNode), ?u16(VersionA,VersionB)}; get_name(Data) -> @@ -533,74 +496,73 @@ get_name(Data) -> %% %% tell_name is for old handshake %% -tell_name(Socket, MyNode0, Version) -> - MyNode = atom_to_list(MyNode0), - {ok, {{Ip1,Ip2,Ip3,Ip4}, _}} = inet:sockname(Socket), - ?to_port(Socket, [$h,?int16(Version),Ip1,Ip2,Ip3,Ip4] ++ - MyNode). +%tell_name(Socket, MyNode0, Version) -> +% MyNode = atom_to_list(MyNode0), +% {ok, {{Ip1,Ip2,Ip3,Ip4}, _}} = inet:sockname(Socket), +% ?to_port(Socket, [$h,?int16(Version),Ip1,Ip2,Ip3,Ip4] ++ MyNode). %% %% The communication with EPMD follows %% do_register_node(NodeName, TcpPort, VLow, VHigh) -> case gen_tcp:connect({127,0,0,1}, get_epmd_port(), []) of - {ok, Socket} -> - {N0,_} = split(NodeName), - Name = atom_to_list(N0), - Extra = "", - Elen = length(Extra), - Len = 1+2+1+1+2+2+2+length(Name)+2+Elen, - gen_tcp:send(Socket, [?int16(Len), $x, - ?int16(TcpPort), - $M, - 0, - ?int16(VHigh), - ?int16(VLow), - ?int16(length(Name)), - Name, - ?int16(Elen), - Extra]), - case wait_for_reg_reply(Socket, []) of - {error, epmd_close} -> - exit(epmd_broken); - Other -> - Other - end; - Error -> - Error + {ok, Socket} -> + {N0,_} = split(NodeName), + Name = atom_to_list(N0), + Extra = "", + Elen = length(Extra), + Len = 1+2+1+1+2+2+2+length(Name)+2+Elen, + gen_tcp:send(Socket, [?int16(Len), $x, + ?int16(TcpPort), + $M, + 0, + ?int16(VHigh), + ?int16(VLow), + ?int16(length(Name)), + Name, + ?int16(Elen), + Extra]), + case wait_for_reg_reply(Socket, []) of + {error, epmd_close} -> + exit(epmd_broken); + Other -> + Other + end; + Error -> + Error end. wait_for_reg_reply(Socket, SoFar) -> receive - {tcp, Socket, Data0} -> - case SoFar ++ Data0 of - [$y, Result, A, B] -> - case Result of - 0 -> - {alive, Socket, ?u16(A, B)}; - _ -> - {error, duplicate_name} - end; - Data when length(Data) < 4 -> - wait_for_reg_reply(Socket, Data); - Garbage -> - {error, {garbage_from_epmd, Garbage}} - end; - {tcp_closed, Socket} -> - {error, epmd_close} + {tcp, Socket, Data0} -> + case SoFar ++ Data0 of + [$y, Result, A, B] -> + case Result of + 0 -> + {alive, Socket, ?u16(A, B)}; + _ -> + {error, duplicate_name} + end; + Data when length(Data) < 4 -> + wait_for_reg_reply(Socket, Data); + Garbage -> + {error, {garbage_from_epmd, Garbage}} + end; + {tcp_closed, Socket} -> + {error, epmd_close} after 10000 -> - gen_tcp:close(Socket), - {error, no_reg_reply_from_epmd} + gen_tcp:close(Socket), + {error, no_reg_reply_from_epmd} end. register(NodeName, ListenSocket, VLow, VHigh) -> {ok,{_,TcpPort}} = inet:sockname(ListenSocket), case do_register_node(NodeName, TcpPort, VLow, VHigh) of - {alive, Socket, Creation} -> - Socket; - Other -> - exit(Other) + {alive, Socket, _Creation} -> + Socket; + Other -> + exit(Other) end. @@ -618,69 +580,10 @@ split(Atom) -> {A,B} = split(atom_to_list(Atom),[]), {list_to_atom(A),list_to_atom(B)}. -%% Build a simple distribution message -build_message(Cookie) -> - [$?,term_to_binary({6,self(),Cookie,rex}),term_to_binary(plupp)]. - -%% Build a distribution message that will make rex answer -build_rex_message(Cookie,OurName) -> - [$?,term_to_binary({6,self(),Cookie,rex}), - term_to_binary({'$gen_cast', - {cast, - rpc, - cast, - [OurName, hello, world, []], - self()} })]. - -%% Receive a distribution message -recv_message(Socket) -> - case gen_tcp:recv(Socket, 0) of - {ok,Data} -> - B0 = list_to_binary(Data), - {_,B1} = erlang:split_binary(B0,1), - Header = erlang:binary_to_term(B1), - Siz = size(term_to_binary(Header)), - {_,B2} = erlang:split_binary(B1,Siz), - Message = case (catch erlang:binary_to_term(B2)) of - {'EXIT', _} -> - could_not_digest_message; - Other -> - Other - end, - {Header, Message}; - Res -> - exit({no_message,Res}) - end. - %% Build a nodename join(Name,Host) -> list_to_atom(atom_to_list(Name) ++ "@" ++ atom_to_list(Host)). -%% start/stop slave. -start_node(Name, Param) -> - ?t:start_node(Name, slave, [{args, Param}]). - -stop_node(Node) -> - ?t:stop_node(Node). - - -get_nodenames(N, T) -> - get_nodenames(N, T, []). - -get_nodenames(0, _, Acc) -> - Acc; -get_nodenames(N, T, Acc) -> - {A, B, C} = now(), - get_nodenames(N-1, T, [list_to_atom(atom_to_list(?MODULE) - ++ "-" - ++ atom_to_list(T) - ++ "-" - ++ integer_to_list(A) - ++ "-" - ++ integer_to_list(B) - ++ "-" - ++ integer_to_list(C)) | Acc]). - get_epmd_port() -> case init:get_argument(epmd_port) of {ok, [[PortStr|_]|_]} when is_list(PortStr) -> diff --git a/lib/erl_interface/test/ei_tmo_SUITE_data/Makefile.first b/lib/erl_interface/test/ei_tmo_SUITE_data/Makefile.first index a19eabb64a..884221d9d7 100644 --- a/lib/erl_interface/test/ei_tmo_SUITE_data/Makefile.first +++ b/lib/erl_interface/test/ei_tmo_SUITE_data/Makefile.first @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2003-2009. All Rights Reserved. +# Copyright Ericsson AB 2003-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/ei_tmo_SUITE_data/Makefile.src b/lib/erl_interface/test/ei_tmo_SUITE_data/Makefile.src index c6798a6644..b4ee361939 100644 --- a/lib/erl_interface/test/ei_tmo_SUITE_data/Makefile.src +++ b/lib/erl_interface/test/ei_tmo_SUITE_data/Makefile.src @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2003-2009. All Rights Reserved. +# Copyright Ericsson AB 2003-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/ei_tmo_SUITE_data/ei_tmo_test.c b/lib/erl_interface/test/ei_tmo_SUITE_data/ei_tmo_test.c index 1104f642a2..0079ef8c86 100644 --- a/lib/erl_interface/test/ei_tmo_SUITE_data/ei_tmo_test.c +++ b/lib/erl_interface/test/ei_tmo_SUITE_data/ei_tmo_test.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2003-2010. All Rights Reserved. + * Copyright Ericsson AB 2003-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -512,18 +512,21 @@ TESTCASE(send_tmo) for (i=0;i < iterations; ++i) { res = ei_send_tmo(com_sock, &pid, send_buffer.buff, send_buffer.index, 5000); - DEBUGF(("Sent bindata (%d):\n",res)); + if (res < 0) { + DEBUGF(("Sent bindata failed (%d) after %d iterations:\n", res, i)); + break; + } #ifdef DEBUG + if (i < 10 || (i % 100 == 0)) /* don't flood the log */ { int ndx = 0; int v; + DEBUGF(("%d: Sent bindata (%d): ", i, res)); ei_decode_version(send_buffer.buff,&ndx,&v); ei_print_term(debugfile, send_buffer.buff, &ndx); + DEBUGF(("\n")); } #endif - DEBUGF(("\n")); - if (res < 0) - break; } if (res < 0) { DEBUGF(("ei_send_tmo failure at line %d\n",__LINE__)); diff --git a/lib/erl_interface/test/erl_connect_SUITE.erl b/lib/erl_interface/test/erl_connect_SUITE.erl index f621310a1c..cd73f07b8f 100644 --- a/lib/erl_interface/test/erl_connect_SUITE.erl +++ b/lib/erl_interface/test/erl_connect_SUITE.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2000-2011. All Rights Reserved. +%% Copyright Ericsson AB 2000-2016. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -21,90 +21,67 @@ %% -module(erl_connect_SUITE). --include_lib("test_server/include/test_server.hrl"). +-include_lib("common_test/include/ct.hrl"). -include("erl_connect_SUITE_data/erl_connect_test_cases.hrl"). --export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, - init_per_group/2,end_per_group/2, - init_per_testcase/2,end_per_testcase/2, - erl_send/1,erl_reg_send/1, erl_send_cookie_file/1]). +-export([all/0, suite/0, + erl_send/1, erl_reg_send/1, + erl_send_cookie_file/1]). -import(runner, [get_term/1,send_term/2]). -suite() -> [{ct_hooks,[ts_install_cth]}]. +suite() -> + [{ct_hooks,[ts_install_cth]}, + {timetrap, {seconds, 30}}]. all() -> [erl_send, erl_reg_send, erl_send_cookie_file]. -groups() -> - []. - -init_per_suite(Config) -> - Config. - -end_per_suite(_Config) -> - ok. - -init_per_group(_GroupName, Config) -> - Config. - -end_per_group(_GroupName, Config) -> - Config. - - -init_per_testcase(_Case, Config) -> - Dog = ?t:timetrap(?t:minutes(0.25)), - [{watchdog, Dog}|Config]. - -end_per_testcase(_Case, Config) -> - Dog = ?config(watchdog, Config), - test_server:timetrap_cancel(Dog), - ok. erl_send(Config) when is_list(Config) -> - ?line P = runner:start(?interpret), - ?line 1 = erl_connect_init(P, 42, erlang:get_cookie(), 0), - ?line {ok,Fd} = erl_connect(P, node()), + P = runner:start(?interpret), + 1 = erl_connect_init(P, 42, erlang:get_cookie(), 0), + {ok,Fd} = erl_connect(P, node()), - ?line ok = erl_send(P, Fd, self(), AMsg={a,message}), - ?line receive AMsg -> ok end, + ok = erl_send(P, Fd, self(), AMsg={a,message}), + receive AMsg -> ok end, - ?line 0 = erl_close_connection(P,Fd), - ?line runner:send_eot(P), - ?line runner:recv_eot(P), + 0 = erl_close_connection(P,Fd), + runner:send_eot(P), + runner:recv_eot(P), ok. erl_send_cookie_file(Config) when is_list(Config) -> case os:type() of - vxworks -> - {skip,"Skipped on VxWorks"}; - _ -> - ?line P = runner:start(?interpret), - ?line 1 = erl_connect_init(P, 42, '', 0), - ?line {ok,Fd} = erl_connect(P, node()), - - ?line ok = erl_send(P, Fd, self(), AMsg={a,message}), - ?line receive AMsg -> ok end, - - ?line 0 = erl_close_connection(P,Fd), - ?line runner:send_eot(P), - ?line runner:recv_eot(P), - ok + vxworks -> + {skip,"Skipped on VxWorks"}; + _ -> + P = runner:start(?interpret), + 1 = erl_connect_init(P, 42, '', 0), + {ok,Fd} = erl_connect(P, node()), + + ok = erl_send(P, Fd, self(), AMsg={a,message}), + receive AMsg -> ok end, + + 0 = erl_close_connection(P,Fd), + runner:send_eot(P), + runner:recv_eot(P), + ok end. erl_reg_send(Config) when is_list(Config) -> - ?line P = runner:start(?interpret), - ?line 1 = erl_connect_init(P, 42, erlang:get_cookie(), 0), - ?line {ok,Fd} = erl_connect(P, node()), + P = runner:start(?interpret), + 1 = erl_connect_init(P, 42, erlang:get_cookie(), 0), + {ok,Fd} = erl_connect(P, node()), ARegName = a_strange_registred_name, - ?line register(ARegName, self()), - ?line ok = erl_reg_send(P, Fd, ARegName, AMsg={another,[strange],message}), - ?line receive AMsg -> ok end, + register(ARegName, self()), + ok = erl_reg_send(P, Fd, ARegName, AMsg={another,[strange],message}), + receive AMsg -> ok end, - ?line 0 = erl_close_connection(P,Fd), - ?line runner:send_eot(P), - ?line runner:recv_eot(P), + 0 = erl_close_connection(P,Fd), + runner:send_eot(P), + runner:recv_eot(P), ok. @@ -113,20 +90,20 @@ erl_reg_send(Config) when is_list(Config) -> erl_connect_init(P, Num, Cookie, Creation) -> send_command(P, erl_connect_init, [Num,Cookie,Creation]), case get_term(P) of - {term,Int} when is_integer(Int) -> Int + {term,Int} when is_integer(Int) -> Int end. erl_connect(P, Node) -> send_command(P, erl_connect, [Node]), case get_term(P) of - {term,{Fd,_}} when Fd >= 0 -> {ok,Fd}; - {term,{-1,Errno}} -> {error,Errno} + {term,{Fd,_}} when Fd >= 0 -> {ok,Fd}; + {term,{-1,Errno}} -> {error,Errno} end. erl_close_connection(P, FD) -> send_command(P, erl_close_connection, [FD]), case get_term(P) of - {term,Int} when is_integer(Int) -> Int + {term,Int} when is_integer(Int) -> Int end. erl_send(P, Fd, To, Msg) -> @@ -139,17 +116,12 @@ erl_reg_send(P, Fd, To, Msg) -> get_send_result(P) -> case get_term(P) of - {term,{1,_}} -> ok; - {term,{-1,Errno}} -> {error,Errno}; - {term,{Res,Errno}}-> - io:format("Return value: ~p\nerl_errno: ~p", [Res,Errno]), - ?t:fail(bad_return_value) + {term,{1,_}} -> ok; + {term,{-1,Errno}} -> {error,Errno}; + {term,{Res,Errno}}-> + io:format("Return value: ~p\nerl_errno: ~p", [Res,Errno]), + ct:fail(bad_return_value) end. send_command(P, Name, Args) -> runner:send_term(P, {Name,list_to_tuple(Args)}). - - - - - diff --git a/lib/erl_interface/test/erl_connect_SUITE_data/Makefile.first b/lib/erl_interface/test/erl_connect_SUITE_data/Makefile.first index f0b8eef6bd..21a7aac0b0 100644 --- a/lib/erl_interface/test/erl_connect_SUITE_data/Makefile.first +++ b/lib/erl_interface/test/erl_connect_SUITE_data/Makefile.first @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2001-2009. All Rights Reserved. +# Copyright Ericsson AB 2001-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/erl_connect_SUITE_data/Makefile.src b/lib/erl_interface/test/erl_connect_SUITE_data/Makefile.src index 57db6f6024..ff4c382c97 100644 --- a/lib/erl_interface/test/erl_connect_SUITE_data/Makefile.src +++ b/lib/erl_interface/test/erl_connect_SUITE_data/Makefile.src @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2000-2009. All Rights Reserved. +# Copyright Ericsson AB 2000-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/erl_connect_SUITE_data/erl_connect_test.c b/lib/erl_interface/test/erl_connect_SUITE_data/erl_connect_test.c index 11c0daa4c5..0adaa79a33 100644 --- a/lib/erl_interface/test/erl_connect_SUITE_data/erl_connect_test.c +++ b/lib/erl_interface/test/erl_connect_SUITE_data/erl_connect_test.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2000-2009. All Rights Reserved. + * Copyright Ericsson AB 2000-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/erl_eterm_SUITE.erl b/lib/erl_interface/test/erl_eterm_SUITE.erl index 8fbef35309..0e51a50c19 100644 --- a/lib/erl_interface/test/erl_eterm_SUITE.erl +++ b/lib/erl_interface/test/erl_eterm_SUITE.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1997-2011. All Rights Reserved. +%% Copyright Ericsson AB 1997-2016. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -21,7 +21,7 @@ %% -module(erl_eterm_SUITE). --include_lib("test_server/include/test_server.hrl"). +-include_lib("common_test/include/ct.hrl"). -include("erl_eterm_SUITE_data/eterm_test_cases.hrl"). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -34,40 +34,39 @@ %%% 5. Miscellanous functions. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, - init_per_group/2,end_per_group/2, - build_terms/1, round_trip_conversion/1, - decode_terms/1, decode_float/1, - t_erl_mk_int/1, t_erl_mk_list/1, - basic_copy/1, - t_erl_cons/1, - t_erl_mk_atom/1, - t_erl_mk_binary/1, - t_erl_mk_empty_list/1, - t_erl_mk_float/1, - t_erl_mk_pid/1, - t_erl_mk_xpid/1, - t_erl_mk_port/1, - t_erl_mk_xport/1, - t_erl_mk_ref/1, - t_erl_mk_long_ref/1, - t_erl_mk_string/1, - t_erl_mk_estring/1, - t_erl_mk_tuple/1, - t_erl_mk_uint/1, - t_erl_mk_var/1, - t_erl_size/1, - t_erl_var_content/1, - t_erl_element/1, - t_erl_length/1, t_erl_hd/1, t_erl_tl/1, - type_checks/1, extractor_macros/1, - t_erl_iolist_length/1, t_erl_iolist_to_binary/1, - t_erl_iolist_to_string/1, - erl_print_term/1, print_string/1, - t_erl_free_compound/1, - high_chaparal/1, - broken_data/1, - cnode_1/1]). +-export([all/0, suite/0, + build_terms/1, round_trip_conversion/1, + decode_terms/1, decode_float/1, + t_erl_mk_int/1, t_erl_mk_list/1, + basic_copy/1, + t_erl_cons/1, + t_erl_mk_atom/1, + t_erl_mk_binary/1, + t_erl_mk_empty_list/1, + t_erl_mk_float/1, + t_erl_mk_pid/1, + t_erl_mk_xpid/1, + t_erl_mk_port/1, + t_erl_mk_xport/1, + t_erl_mk_ref/1, + t_erl_mk_long_ref/1, + t_erl_mk_string/1, + t_erl_mk_estring/1, + t_erl_mk_tuple/1, + t_erl_mk_uint/1, + t_erl_mk_var/1, + t_erl_size/1, + t_erl_var_content/1, + t_erl_element/1, + t_erl_length/1, t_erl_hd/1, t_erl_tl/1, + type_checks/1, extractor_macros/1, + t_erl_iolist_length/1, t_erl_iolist_to_binary/1, + t_erl_iolist_to_string/1, + erl_print_term/1, print_string/1, + t_erl_free_compound/1, + high_chaparal/1, + broken_data/1, + cnode_1/1]). -export([start_cnode/1]). @@ -76,7 +75,8 @@ %% This test suite controls the running of the C language functions %% in eterm_test.c and print_term.c. -suite() -> [{ct_hooks,[ts_install_cth]}]. +suite() -> + [{ct_hooks,[ts_install_cth]}]. all() -> [build_terms, round_trip_conversion, decode_terms, @@ -93,22 +93,6 @@ all() -> erl_print_term, print_string, t_erl_free_compound, high_chaparal, broken_data, cnode_1]. -groups() -> - []. - -init_per_suite(Config) -> - Config. - -end_per_suite(_Config) -> - ok. - -init_per_group(_GroupName, Config) -> - Config. - -end_per_group(_GroupName, Config) -> - Config. - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% @@ -119,82 +103,77 @@ end_per_group(_GroupName, Config) -> %% This test asks the C function to construct all data types in %% a list and verifies that the result is as expected. -build_terms(suite) -> []; build_terms(Config) when is_list(Config) -> - ?line P = runner:start(?build_terms), - ?line {term, Term} = get_term(P), - ?line io:format("Received: ~p", [Term]), - ?line [ARefLN, ARef, APortLN, APort, APidLN, APid, - {element1, 42, 767}, "A string", - 1, -1, 0, 3.0, ABin, 'I am an atom'] = Term, - ?line "A binary" = binary_to_list(ABin), - ?line case ARef of - R when is_reference(R), node(R) == kalle@localhost -> ok - end, - ?line case ARefLN of - R1 when is_reference(R1), node(R1) == abcdefghijabcdefghij@localhost -> ok - end, - ?line case APort of - Port when is_port(Port), node(Port) == kalle@localhost -> ok - end, - ?line case APortLN of - Port1 when is_port(Port1), node(Port1) == abcdefghijabcdefghij@localhost -> ok - end, - ?line case APid of - Pid when is_pid(Pid), node(Pid) == kalle@localhost -> ok - end, - ?line case APidLN of - Pid1 when is_pid(Pid1), node(Pid1) == abcdefghijabcdefghij@localhost -> ok - end, - - ?line runner:recv_eot(P), + P = runner:start(?build_terms), + {term, Term} = get_term(P), + io:format("Received: ~p", [Term]), + [ARefLN, ARef, APortLN, APort, APidLN, APid, + {element1, 42, 767}, "A string", + 1, -1, 0, 3.0, ABin, 'I am an atom'] = Term, + "A binary" = binary_to_list(ABin), + case ARef of + R when is_reference(R), node(R) == kalle@localhost -> ok + end, + case ARefLN of + R1 when is_reference(R1), node(R1) == abcdefghijabcdefghij@localhost -> ok + end, + case APort of + Port when is_port(Port), node(Port) == kalle@localhost -> ok + end, + case APortLN of + Port1 when is_port(Port1), node(Port1) == abcdefghijabcdefghij@localhost -> ok + end, + case APid of + Pid when is_pid(Pid), node(Pid) == kalle@localhost -> ok + end, + case APidLN of + Pid1 when is_pid(Pid1), node(Pid1) == abcdefghijabcdefghij@localhost -> ok + end, + + runner:recv_eot(P), ok. %% This test is run entirely in C code. -round_trip_conversion(suite) -> []; round_trip_conversion(Config) when is_list(Config) -> - ?line runner:test(?round_trip_conversion), + runner:test(?round_trip_conversion), ok. %% This test sends a list of all data types to the C code function, %% which decodes it and verifies it. -decode_terms(suite) -> []; decode_terms(Config) when is_list(Config) -> - ?line Dummy1 = list_to_atom(filename:join(?config(priv_dir, Config), - dummy_file1)), - ?line Dummy2 = list_to_atom(filename:join(?config(priv_dir, Config), - dummy_file2)), - ?line Port1 = open_port(Dummy1, [out]), - ?line Port2 = open_port(Dummy2, [out]), - ?line ABinary = list_to_binary("A binary"), - ?line Terms = [make_ref(), make_ref(), - Port1, Port2, - self(), self(), - {element1, 42, 767}, "A string", - 1, -1, 0, 3.0, ABinary, 'I am an atom'], - - ?line P = runner:start(?decode_terms), - ?line runner:send_term(P, Terms), - ?line runner:recv_eot(P), + Dummy1 = list_to_atom(filename:join(proplists:get_value(priv_dir, Config), + dummy_file1)), + Dummy2 = list_to_atom(filename:join(proplists:get_value(priv_dir, Config), + dummy_file2)), + Port1 = open_port(Dummy1, [out]), + Port2 = open_port(Dummy2, [out]), + ABinary = list_to_binary("A binary"), + Terms = [make_ref(), make_ref(), + Port1, Port2, + self(), self(), + {element1, 42, 767}, "A string", + 1, -1, 0, 3.0, ABinary, 'I am an atom'], + + P = runner:start(?decode_terms), + runner:send_term(P, Terms), + runner:recv_eot(P), ok. %% Decodes the floating point number 3.1415. -decode_float(suite) -> []; decode_float(Config) when is_list(Config) -> - ?line P = runner:start(?decode_float), - ?line runner:send_term(P, 3.1415), - ?line runner:recv_eot(P), + P = runner:start(?decode_float), + runner:send_term(P, 3.1415), + runner:recv_eot(P), ok. %% Tests the erl_free_compound() function. -t_erl_free_compound(suite) -> []; t_erl_free_compound(Config) when is_list(Config) -> - ?line runner:test(?t_erl_free_compound), + runner:test(?t_erl_free_compound), ok. @@ -206,317 +185,296 @@ t_erl_free_compound(Config) when is_list(Config) -> %% This tests the erl_mk_list() function. -t_erl_mk_list(suite) -> []; t_erl_mk_list(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_mk_list), + P = runner:start(?t_erl_mk_list), - ?line {term, []} = get_term(P), - ?line {term, [abc]} = get_term(P), - ?line {term, [abcdef, 42]} = get_term(P), - ?line {term, [0.0, 23, [], 3.1415]} = get_term(P), + {term, []} = get_term(P), + {term, [abc]} = get_term(P), + {term, [abcdef, 42]} = get_term(P), + {term, [0.0, 23, [], 3.1415]} = get_term(P), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. %% This tests the erl_mk_int() function. -t_erl_mk_int(suite) -> []; t_erl_mk_int(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_mk_int), - - ?line {term, 0} = get_term(P), - ?line {term, 127} = get_term(P), - ?line {term, 128} = get_term(P), - ?line {term, 255} = get_term(P), - ?line {term, 256} = get_term(P), - - ?line {term, 16#FFFF} = get_term(P), - ?line {term, 16#10000} = get_term(P), - - ?line {term, 16#07FFFFFF} = get_term(P), - ?line {term, 16#0FFFFFFF} = get_term(P), - ?line {term, 16#1FFFFFFF} = get_term(P), - ?line {term, 16#3FFFFFFF} = get_term(P), - ?line {term, 16#7FFFFFFF} = get_term(P), - - ?line {term, 16#08000000} = get_term(P), - ?line {term, 16#10000000} = get_term(P), - ?line {term, 16#20000000} = get_term(P), - ?line {term, 16#40000000} = get_term(P), - - - ?line {term, -16#07FFFFFF} = get_term(P), - ?line {term, -16#0FFFFFFF} = get_term(P), - ?line {term, -16#1FFFFFFF} = get_term(P), - ?line {term, -16#3FFFFFFF} = get_term(P), - ?line {term, -16#7FFFFFFF} = get_term(P), - - ?line {term, -16#08000000} = get_term(P), - ?line {term, -16#10000000} = get_term(P), - ?line {term, -16#20000000} = get_term(P), - ?line {term, -16#40000000} = get_term(P), - - ?line {term, -16#08000001} = get_term(P), - ?line {term, -16#10000001} = get_term(P), - ?line {term, -16#20000001} = get_term(P), - ?line {term, -16#40000001} = get_term(P), - - ?line {term, -16#08000002} = get_term(P), - ?line {term, -16#10000002} = get_term(P), - ?line {term, -16#20000002} = get_term(P), - ?line {term, -16#40000002} = get_term(P), - - ?line {term, -1999999999} = get_term(P), - ?line {term, -2000000000} = get_term(P), - ?line {term, -2000000001} = get_term(P), - - ?line runner:recv_eot(P), + P = runner:start(?t_erl_mk_int), + + {term, 0} = get_term(P), + {term, 127} = get_term(P), + {term, 128} = get_term(P), + {term, 255} = get_term(P), + {term, 256} = get_term(P), + + {term, 16#FFFF} = get_term(P), + {term, 16#10000} = get_term(P), + + {term, 16#07FFFFFF} = get_term(P), + {term, 16#0FFFFFFF} = get_term(P), + {term, 16#1FFFFFFF} = get_term(P), + {term, 16#3FFFFFFF} = get_term(P), + {term, 16#7FFFFFFF} = get_term(P), + + {term, 16#08000000} = get_term(P), + {term, 16#10000000} = get_term(P), + {term, 16#20000000} = get_term(P), + {term, 16#40000000} = get_term(P), + + + {term, -16#07FFFFFF} = get_term(P), + {term, -16#0FFFFFFF} = get_term(P), + {term, -16#1FFFFFFF} = get_term(P), + {term, -16#3FFFFFFF} = get_term(P), + {term, -16#7FFFFFFF} = get_term(P), + + {term, -16#08000000} = get_term(P), + {term, -16#10000000} = get_term(P), + {term, -16#20000000} = get_term(P), + {term, -16#40000000} = get_term(P), + + {term, -16#08000001} = get_term(P), + {term, -16#10000001} = get_term(P), + {term, -16#20000001} = get_term(P), + {term, -16#40000001} = get_term(P), + + {term, -16#08000002} = get_term(P), + {term, -16#10000002} = get_term(P), + {term, -16#20000002} = get_term(P), + {term, -16#40000002} = get_term(P), + + {term, -1999999999} = get_term(P), + {term, -2000000000} = get_term(P), + {term, -2000000001} = get_term(P), + + runner:recv_eot(P), ok. %% Basic test of erl_copy_term(). -basic_copy(suite) -> []; basic_copy(Config) when is_list(Config) -> - ?line runner:test(?basic_copy), + runner:test(?basic_copy), ok. %% This tests the erl_mk_tuple() function. -t_erl_mk_tuple(suite) -> []; t_erl_mk_tuple(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_mk_tuple), + P = runner:start(?t_erl_mk_tuple), - ?line {term, {madonna, 21, 'mad donna', 12}} = get_term(P), - ?line {term, {'Madonna',21,{children,{"Isabella",2}}, - {'home page',"http://www.madonna.com/"}}} = get_term(P), + {term, {madonna, 21, 'mad donna', 12}} = get_term(P), + {term, {'Madonna',21,{children,{"Isabella",2}}, + {'home page',"http://www.madonna.com/"}}} = get_term(P), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. %% This tests the erl_mk_atom() function. -t_erl_mk_atom(suite) -> []; t_erl_mk_atom(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_mk_atom), - - ?line {term, madonna} = (get_term(P)), - ?line {term, 'Madonna'} = (get_term(P)), - ?line {term, 'mad donna'} = (get_term(P)), - ?line {term, '_madonna_'} = (get_term(P)), - ?line {term, '/home/madonna/tour_plan'} = (get_term(P)), - ?line {term, 'http://www.madonna.com/tour_plan'} = (get_term(P)), - ?line {term, '\'madonna\''} = (get_term(P)), - ?line {term, '\"madonna\"'} = (get_term(P)), - ?line {term, '\\madonna\\'} = (get_term(P)), - ?line {term, '{madonna,21,\'mad donna\',12}'} = (get_term(P)), - - ?line runner:recv_eot(P), + P = runner:start(?t_erl_mk_atom), + + {term, madonna} = (get_term(P)), + {term, 'Madonna'} = (get_term(P)), + {term, 'mad donna'} = (get_term(P)), + {term, '_madonna_'} = (get_term(P)), + {term, '/home/madonna/tour_plan'} = (get_term(P)), + {term, 'http://www.madonna.com/tour_plan'} = (get_term(P)), + {term, '\'madonna\''} = (get_term(P)), + {term, '\"madonna\"'} = (get_term(P)), + {term, '\\madonna\\'} = (get_term(P)), + {term, '{madonna,21,\'mad donna\',12}'} = (get_term(P)), + + runner:recv_eot(P), ok. %% This tests the erl_mk_binary() function. -t_erl_mk_binary(suite) -> []; t_erl_mk_binary(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_mk_binary), + P = runner:start(?t_erl_mk_binary), - ?line {term, Bin} = (get_term(P)), - ?line "{madonna,21,'mad donna',1234.567.890, !#$%&/()=?+-@, \" \\}" = - binary_to_list(Bin), + {term, Bin} = (get_term(P)), + "{madonna,21,'mad donna',1234.567.890, !#$%&/()=?+-@, \" \\}" = binary_to_list(Bin), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. %% This tests the erl_mk_empty_list() function. -t_erl_mk_empty_list(suite) -> []; t_erl_mk_empty_list(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_mk_empty_list), + P = runner:start(?t_erl_mk_empty_list), - ?line {term, []} = get_term(P), + {term, []} = get_term(P), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. %% This tests the erl_mk_float() function. -t_erl_mk_float(suite) -> []; t_erl_mk_float(Config) when is_list(Config) -> case os:type() of - vxworks -> - {skipped, "Floating point numbers never compare equal on PPC"}; - _ -> - ?line P = runner:start(?t_erl_mk_float), - ?line {term, {3.1415, 1.999999, 2.000000, 2.000001, - 2.000002, 12345.67890}} = - get_term(P), - ?line runner:recv_eot(P), - ok + vxworks -> + {skipped, "Floating point numbers never compare equal on PPC"}; + _ -> + P = runner:start(?t_erl_mk_float), + {term, {3.1415, 1.999999, 2.000000, 2.000001, + 2.000002, 12345.67890}} = get_term(P), + runner:recv_eot(P), + ok end. %% This tests the erl_mk_pid() function. -t_erl_mk_pid(suite) -> []; t_erl_mk_pid(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_mk_pid), + P = runner:start(?t_erl_mk_pid), - ?line {term, A_pid} = (get_term(P)), - ?line {pid, kalle@localhost, 3, 2} = nc2vinfo(A_pid), + {term, A_pid} = (get_term(P)), + {pid, kalle@localhost, 3, 2} = nc2vinfo(A_pid), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. -t_erl_mk_xpid(suite) -> []; t_erl_mk_xpid(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_mk_xpid), + P = runner:start(?t_erl_mk_xpid), - ?line {term, A_pid} = (get_term(P)), - ?line {pid, kalle@localhost, 32767, 8191} = nc2vinfo(A_pid), + {term, A_pid} = (get_term(P)), + {pid, kalle@localhost, 32767, 8191} = nc2vinfo(A_pid), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. %% This tests the erl_mk_port() function. -t_erl_mk_port(suite) -> []; t_erl_mk_port(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_mk_port), + P = runner:start(?t_erl_mk_port), - ?line {term, A_port} = (get_term(P)), - ?line {port, kalle@localhost, 4} = nc2vinfo(A_port), + {term, A_port} = (get_term(P)), + {port, kalle@localhost, 4} = nc2vinfo(A_port), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. -t_erl_mk_xport(suite) -> []; t_erl_mk_xport(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_mk_xport), + P = runner:start(?t_erl_mk_xport), - ?line {term, A_port} = (get_term(P)), - ?line {port, kalle@localhost, 268435455} = nc2vinfo(A_port), + {term, A_port} = (get_term(P)), + {port, kalle@localhost, 268435455} = nc2vinfo(A_port), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. %% This tests the erl_mk_ref() function. -t_erl_mk_ref(suite) -> []; t_erl_mk_ref(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_mk_ref), + P = runner:start(?t_erl_mk_ref), - ?line {term, A_ref} = (get_term(P)), - ?line {ref, kalle@localhost, _Length, [6]} = nc2vinfo(A_ref), + {term, A_ref} = (get_term(P)), + {ref, kalle@localhost, _Length, [6]} = nc2vinfo(A_ref), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. -t_erl_mk_long_ref(suite) -> []; t_erl_mk_long_ref(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_mk_long_ref), + P = runner:start(?t_erl_mk_long_ref), - ?line {term, A_ref} = (get_term(P)), - ?line {ref, kalle@localhost, _Length, [4294967295,4294967295,262143]} - = nc2vinfo(A_ref), + {term, A_ref} = (get_term(P)), + {ref, kalle@localhost, _Length, [4294967295,4294967295,262143]} + = nc2vinfo(A_ref), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. %% This tests the erl_mk_string() function. -t_erl_mk_string(suite) -> []; t_erl_mk_string(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_mk_string), - - ?line {term, "madonna"} = (get_term(P)), - ?line {term, "Madonna"} = (get_term(P)), - ?line {term, "mad donna"} = (get_term(P)), - ?line {term, "_madonna_"} = (get_term(P)), - ?line {term, "/home/madonna/tour_plan"} = (get_term(P)), - ?line {term, "http://www.madonna.com/tour_plan"} = (get_term(P)), - ?line {term, "\'madonna\'"} = (get_term(P)), - ?line {term, "\"madonna\""} = (get_term(P)), - ?line {term, "\\madonna\\"} = (get_term(P)), - ?line {term, "{madonna,21,'mad donna',12}"} = (get_term(P)), - - ?line runner:recv_eot(P), + P = runner:start(?t_erl_mk_string), + + {term, "madonna"} = (get_term(P)), + {term, "Madonna"} = (get_term(P)), + {term, "mad donna"} = (get_term(P)), + {term, "_madonna_"} = (get_term(P)), + {term, "/home/madonna/tour_plan"} = (get_term(P)), + {term, "http://www.madonna.com/tour_plan"} = (get_term(P)), + {term, "\'madonna\'"} = (get_term(P)), + {term, "\"madonna\""} = (get_term(P)), + {term, "\\madonna\\"} = (get_term(P)), + {term, "{madonna,21,'mad donna',12}"} = (get_term(P)), + + runner:recv_eot(P), ok. %% This tests the erl_mk_estring() function. -t_erl_mk_estring(suite) -> []; t_erl_mk_estring(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_mk_estring), - - ?line {term, "madonna"} = (get_term(P)), - ?line {term, "Madonna"} = (get_term(P)), - ?line {term, "mad donna"} = (get_term(P)), - ?line {term, "_madonna_"} = (get_term(P)), - ?line {term, "/home/madonna/tour_plan"} = (get_term(P)), - ?line {term, "http://www.madonna.com/tour_plan"} = (get_term(P)), - ?line {term, "\'madonna\'"} = (get_term(P)), - ?line {term, "\"madonna\""} = (get_term(P)), - ?line {term, "\\madonna\\"} = (get_term(P)), - ?line {term, "{madonna,21,'mad donna',12}"} = (get_term(P)), - - ?line runner:recv_eot(P), + P = runner:start(?t_erl_mk_estring), + + {term, "madonna"} = (get_term(P)), + {term, "Madonna"} = (get_term(P)), + {term, "mad donna"} = (get_term(P)), + {term, "_madonna_"} = (get_term(P)), + {term, "/home/madonna/tour_plan"} = (get_term(P)), + {term, "http://www.madonna.com/tour_plan"} = (get_term(P)), + {term, "\'madonna\'"} = (get_term(P)), + {term, "\"madonna\""} = (get_term(P)), + {term, "\\madonna\\"} = (get_term(P)), + {term, "{madonna,21,'mad donna',12}"} = (get_term(P)), + + runner:recv_eot(P), ok. %% This tests the erl_mk_uint() function. -t_erl_mk_uint(suite) -> []; t_erl_mk_uint(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_mk_uint), + P = runner:start(?t_erl_mk_uint), - ?line {term, 54321} = (get_term(P)), - ?line {term, 2147483647} = (get_term(P)), - ?line {term, 2147483648} = (get_term(P)), - ?line {term, 2147483649} = (get_term(P)), - ?line {term, 2147483650} = (get_term(P)), - ?line {term, 4294967295} = (get_term(P)), + {term, 54321} = (get_term(P)), + {term, 2147483647} = (get_term(P)), + {term, 2147483648} = (get_term(P)), + {term, 2147483649} = (get_term(P)), + {term, 2147483650} = (get_term(P)), + {term, 4294967295} = (get_term(P)), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. %% This tests the erl_mk_var() function. -t_erl_mk_var(suite) -> []; t_erl_mk_var(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_mk_var), + P = runner:start(?t_erl_mk_var), - ?line {term, 1} = (get_term(P)), - ?line {term, 0} = (get_term(P)), - ?line {term, 1} = (get_term(P)), - ?line {term, 0} = (get_term(P)), - ?line {term, 1} = (get_term(P)), - ?line {term, 0} = (get_term(P)), - ?line {term, 1} = (get_term(P)), + {term, 1} = (get_term(P)), + {term, 0} = (get_term(P)), + {term, 1} = (get_term(P)), + {term, 0} = (get_term(P)), + {term, 1} = (get_term(P)), + {term, 0} = (get_term(P)), + {term, 1} = (get_term(P)), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. %% This tests the erl_cons() function. -t_erl_cons(suite) -> []; t_erl_cons(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_cons), + P = runner:start(?t_erl_cons), - ?line {term, [madonna, 21]} = get_term(P), + {term, [madonna, 21]} = get_term(P), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. @@ -531,21 +489,20 @@ t_erl_cons(Config) when is_list(Config) -> %% Tests the erl_length() function. -t_erl_length(suite) -> []; t_erl_length(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_length), + P = runner:start(?t_erl_length), - ?line 0 = erl_length(P, []), - ?line 1 = erl_length(P, [a]), - ?line 2 = erl_length(P, [a, b]), - ?line 3 = erl_length(P, [a, b, c]), + 0 = erl_length(P, []), + 1 = erl_length(P, [a]), + 2 = erl_length(P, [a, b]), + 3 = erl_length(P, [a, b, c]), - ?line 4 = erl_length(P, [a, [x, y], c, []]), + 4 = erl_length(P, [a, [x, y], c, []]), - ?line -1 = erl_length(P, [a|b]), - ?line -1 = erl_length(P, a), + -1 = erl_length(P, [a|b]), + -1 = erl_length(P, a), - ?line runner:finish(P), + runner:finish(P), ok. %% Invokes the erl_length() function. @@ -555,22 +512,21 @@ erl_length(Port, List) -> %% Tests the erl_hd() function. -t_erl_hd(suite) -> []; t_erl_hd(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_hd), - - ?line 'NULL' = erl_hd(P, 42), - ?line 'NULL' = erl_hd(P, abc), - ?line 'NULL' = erl_hd(P, []), - - ?line [] = erl_hd(P, [[], a]), - ?line a = erl_hd(P, [a]), - ?line a = erl_hd(P, [a, b]), - ?line a = erl_hd(P, [a, b, c]), - ?line a = erl_hd(P, [a|b]), - - ?line runner:send_eot(P), - ?line runner:recv_eot(P), + P = runner:start(?t_erl_hd), + + 'NULL' = erl_hd(P, 42), + 'NULL' = erl_hd(P, abc), + 'NULL' = erl_hd(P, []), + + [] = erl_hd(P, [[], a]), + a = erl_hd(P, [a]), + a = erl_hd(P, [a, b]), + a = erl_hd(P, [a, b, c]), + a = erl_hd(P, [a|b]), + + runner:send_eot(P), + runner:recv_eot(P), ok. %% Invokes the erl_hd() function. @@ -580,22 +536,21 @@ erl_hd(Port, List) -> %% Tests the erl_tail() function. -t_erl_tl(suite) -> []; t_erl_tl(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_tl), + P = runner:start(?t_erl_tl), - ?line 'NULL' = erl_tl(P, 42), - ?line 'NULL' = erl_tl(P, abc), - ?line 'NULL' = erl_tl(P, []), + 'NULL' = erl_tl(P, 42), + 'NULL' = erl_tl(P, abc), + 'NULL' = erl_tl(P, []), - ?line [] = erl_tl(P, [a]), - ?line [b] = erl_tl(P, [a, b]), - ?line [b, c] = erl_tl(P, [a, b, c]), + [] = erl_tl(P, [a]), + [b] = erl_tl(P, [a, b]), + [b, c] = erl_tl(P, [a, b, c]), - ?line b = erl_tl(P, [a|b]), + b = erl_tl(P, [a|b]), - ?line runner:send_eot(P), - ?line runner:recv_eot(P), + runner:send_eot(P), + runner:recv_eot(P), ok. %% Invokes the erl_tail() function in erl_interface. @@ -605,68 +560,63 @@ erl_tl(Port, List) -> %% Tests the type checking macros (done in the C program). -type_checks(suite) -> []; type_checks(Config) when is_list(Config) -> - ?line runner:test(?type_checks), + runner:test(?type_checks), ok. %% Tests the extractor macros (done in the C program). -extractor_macros(suite) -> []; extractor_macros(Config) when is_list(Config) -> - ?line runner:test(?extractor_macros), + runner:test(?extractor_macros), ok. %% This tests the erl_size() function. -t_erl_size(suite) -> []; t_erl_size(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_size), + P = runner:start(?t_erl_size), - ?line {term, 0} = (get_term(P)), - ?line {term, 4} = (get_term(P)), + {term, 0} = (get_term(P)), + {term, 4} = (get_term(P)), - ?line {term, 0} = (get_term(P)), - ?line {term, 27} = (get_term(P)), + {term, 0} = (get_term(P)), + {term, 27} = (get_term(P)), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. %% This tests the erl_var_content() function. -t_erl_var_content(suite) -> []; t_erl_var_content(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_var_content), + P = runner:start(?t_erl_var_content), - ?line {term, 17} = (get_term(P)), - ?line {term, "http://www.madonna.com"} = (get_term(P)), - ?line {term, 2} = (get_term(P)), - ?line {term, "http://www.madonna.com"} = (get_term(P)), - ?line {term, 2} = (get_term(P)), + {term, 17} = (get_term(P)), + {term, "http://www.madonna.com"} = (get_term(P)), + {term, 2} = (get_term(P)), + {term, "http://www.madonna.com"} = (get_term(P)), + {term, 2} = (get_term(P)), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. %% This tests the erl_element() function. -t_erl_element(suite) -> []; t_erl_element(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_element), + P = runner:start(?t_erl_element), - ?line {term, madonna} = get_term(P), - ?line {term, 21} = get_term(P), - ?line {term, 'mad donna'} = get_term(P), - ?line {term, 12} = get_term(P), + {term, madonna} = get_term(P), + {term, 21} = get_term(P), + {term, 'mad donna'} = get_term(P), + {term, 12} = get_term(P), - ?line {term, 'Madonna'} = get_term(P), - ?line {term, 21} = get_term(P), - ?line {term, {children,{"Isabella",2}}} = get_term(P), - ?line {term, {'home page',"http://www.madonna.com/"}} = get_term(P), + {term, 'Madonna'} = get_term(P), + {term, 21} = get_term(P), + {term, {children,{"Isabella",2}}} = get_term(P), + {term, {'home page',"http://www.madonna.com/"}} = get_term(P), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. @@ -679,65 +629,64 @@ t_erl_element(Config) when is_list(Config) -> %% Tests the erl_iolist_length() function. -t_erl_iolist_length(suite) -> []; t_erl_iolist_length(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_iolist_length), + P = runner:start(?t_erl_iolist_length), %% Flat lists. - ?line 0 = erl_iolist_length(P, []), - ?line 1 = erl_iolist_length(P, [10]), - ?line 2 = erl_iolist_length(P, [10, 20]), - ?line 3 = erl_iolist_length(P, [10, 20, 30]), - ?line 256 = erl_iolist_length(P, lists:seq(0, 255)), + 0 = erl_iolist_length(P, []), + 1 = erl_iolist_length(P, [10]), + 2 = erl_iolist_length(P, [10, 20]), + 3 = erl_iolist_length(P, [10, 20, 30]), + 256 = erl_iolist_length(P, lists:seq(0, 255)), %% Deep lists. - ?line 0 = erl_iolist_length(P, [[]]), - ?line 1 = erl_iolist_length(P, [[], 42]), - ?line 1 = erl_iolist_length(P, [42, []]), - ?line 2 = erl_iolist_length(P, [42, [], 45]), + 0 = erl_iolist_length(P, [[]]), + 1 = erl_iolist_length(P, [[], 42]), + 1 = erl_iolist_length(P, [42, []]), + 2 = erl_iolist_length(P, [42, [], 45]), - ?line 3 = erl_iolist_length(P, [42, [90], 45]), - ?line 3 = erl_iolist_length(P, [[42, [90]], 45]), - ?line 3 = erl_iolist_length(P, [[42, [90]], 45]), + 3 = erl_iolist_length(P, [42, [90], 45]), + 3 = erl_iolist_length(P, [[42, [90]], 45]), + 3 = erl_iolist_length(P, [[42, [90]], 45]), %% List with binaries. - ?line 0 = erl_iolist_length(P, [list_to_binary([])]), - ?line 0 = erl_iolist_length(P, [[], list_to_binary([])]), - ?line 1 = erl_iolist_length(P, [[1], list_to_binary([])]), - ?line 1 = erl_iolist_length(P, [[], list_to_binary([2])]), - ?line 2 = erl_iolist_length(P, [[42], list_to_binary([2])]), - ?line 4 = erl_iolist_length(P, [[42], list_to_binary([2, 3, 4])]), + 0 = erl_iolist_length(P, [list_to_binary([])]), + 0 = erl_iolist_length(P, [[], list_to_binary([])]), + 1 = erl_iolist_length(P, [[1], list_to_binary([])]), + 1 = erl_iolist_length(P, [[], list_to_binary([2])]), + 2 = erl_iolist_length(P, [[42], list_to_binary([2])]), + 4 = erl_iolist_length(P, [[42], list_to_binary([2, 3, 4])]), %% Binaries as tail. - ?line 0 = erl_iolist_length(P, [[]| list_to_binary([])]), - ?line 1 = erl_iolist_length(P, [[1]| list_to_binary([])]), - ?line 1 = erl_iolist_length(P, [[]| list_to_binary([2])]), - ?line 2 = erl_iolist_length(P, [[42]| list_to_binary([2])]), + 0 = erl_iolist_length(P, [[]| list_to_binary([])]), + 1 = erl_iolist_length(P, [[1]| list_to_binary([])]), + 1 = erl_iolist_length(P, [[]| list_to_binary([2])]), + 2 = erl_iolist_length(P, [[42]| list_to_binary([2])]), %% Binaries only. - ?line 0 = erl_iolist_length(P, list_to_binary("")), - ?line 1 = erl_iolist_length(P, list_to_binary([1])), - ?line 2 = erl_iolist_length(P, list_to_binary([1, 2])), + 0 = erl_iolist_length(P, list_to_binary("")), + 1 = erl_iolist_length(P, list_to_binary([1])), + 2 = erl_iolist_length(P, list_to_binary([1, 2])), %% Illegal cases. - ?line -1 = erl_iolist_length(P, [42|43]), - ?line -1 = erl_iolist_length(P, a), + -1 = erl_iolist_length(P, [42|43]), + -1 = erl_iolist_length(P, a), - ?line -1 = erl_iolist_length(P, [a]), - ?line -1 = erl_iolist_length(P, [256]), - ?line -1 = erl_iolist_length(P, [257]), - ?line -1 = erl_iolist_length(P, [-1]), - ?line -1 = erl_iolist_length(P, [-2]), - ?line -1 = erl_iolist_length(P, [-127]), - ?line -1 = erl_iolist_length(P, [-128]), + -1 = erl_iolist_length(P, [a]), + -1 = erl_iolist_length(P, [256]), + -1 = erl_iolist_length(P, [257]), + -1 = erl_iolist_length(P, [-1]), + -1 = erl_iolist_length(P, [-2]), + -1 = erl_iolist_length(P, [-127]), + -1 = erl_iolist_length(P, [-128]), - ?line runner:finish(P), + runner:finish(P), ok. %% Invokes the erl_iolist_length() function. @@ -747,143 +696,141 @@ erl_iolist_length(Port, List) -> %% Tests the erl_iolist_to_binary() function. -t_erl_iolist_to_binary(suite) -> []; t_erl_iolist_to_binary(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_iolist_to_binary), + P = runner:start(?t_erl_iolist_to_binary), %% Flat lists. - ?line [] = iolist_to_list(P, []), - ?line [10] = iolist_to_list(P, [10]), - ?line [10, 20] = iolist_to_list(P, [10, 20]), - ?line [10, 20, 30] = iolist_to_list(P, [10, 20, 30]), - ?line AllBytes = lists:seq(0, 255), - ?line AllBytes = iolist_to_list(P, AllBytes), + [] = iolist_to_list(P, []), + [10] = iolist_to_list(P, [10]), + [10, 20] = iolist_to_list(P, [10, 20]), + [10, 20, 30] = iolist_to_list(P, [10, 20, 30]), + AllBytes = lists:seq(0, 255), + AllBytes = iolist_to_list(P, AllBytes), %% Deep lists. - ?line [] = iolist_to_list(P, [[]]), - ?line [42] = iolist_to_list(P, [[], 42]), - ?line [42] = iolist_to_list(P, [42, []]), - ?line [42, 45] = iolist_to_list(P, [42, [], 45]), + [] = iolist_to_list(P, [[]]), + [42] = iolist_to_list(P, [[], 42]), + [42] = iolist_to_list(P, [42, []]), + [42, 45] = iolist_to_list(P, [42, [], 45]), - ?line [42, 90, 45] = iolist_to_list(P, [42, [90], 45]), - ?line [42, 90, 45] = iolist_to_list(P, [[42, [90]], 45]), - ?line [42, 90, 45] = iolist_to_list(P, [[42, [90]], 45]), + [42, 90, 45] = iolist_to_list(P, [42, [90], 45]), + [42, 90, 45] = iolist_to_list(P, [[42, [90]], 45]), + [42, 90, 45] = iolist_to_list(P, [[42, [90]], 45]), %% List with binaries. - ?line [] = iolist_to_list(P, [list_to_binary([])]), - ?line [] = iolist_to_list(P, [[], list_to_binary([])]), - ?line [1] = iolist_to_list(P, [[1], list_to_binary([])]), - ?line [2] = iolist_to_list(P, [[], list_to_binary([2])]), - ?line [42, 2] = iolist_to_list(P, [[42], list_to_binary([2])]), - ?line [42, 2, 3, 4] = iolist_to_list(P, [[42], list_to_binary([2, 3, 4])]), + [] = iolist_to_list(P, [list_to_binary([])]), + [] = iolist_to_list(P, [[], list_to_binary([])]), + [1] = iolist_to_list(P, [[1], list_to_binary([])]), + [2] = iolist_to_list(P, [[], list_to_binary([2])]), + [42, 2] = iolist_to_list(P, [[42], list_to_binary([2])]), + [42, 2, 3, 4] = iolist_to_list(P, [[42], list_to_binary([2, 3, 4])]), %% Binaries as tail. - ?line [] = iolist_to_list(P, [[]| list_to_binary([])]), - ?line [1] = iolist_to_list(P, [[1]| list_to_binary([])]), - ?line [2] = iolist_to_list(P, [[]| list_to_binary([2])]), - ?line [42, 2] = iolist_to_list(P, [[42]| list_to_binary([2])]), + [] = iolist_to_list(P, [[]| list_to_binary([])]), + [1] = iolist_to_list(P, [[1]| list_to_binary([])]), + [2] = iolist_to_list(P, [[]| list_to_binary([2])]), + [42, 2] = iolist_to_list(P, [[42]| list_to_binary([2])]), %% Binaries only. - ?line [] = iolist_to_list(P, list_to_binary("")), - ?line [1] = iolist_to_list(P, list_to_binary([1])), - ?line [1, 2] = iolist_to_list(P, list_to_binary([1, 2])), + [] = iolist_to_list(P, list_to_binary("")), + [1] = iolist_to_list(P, list_to_binary([1])), + [1, 2] = iolist_to_list(P, list_to_binary([1, 2])), %% Illegal cases. - ?line 'NULL' = iolist_to_list(P, [42|43]), - ?line 'NULL' = iolist_to_list(P, a), + 'NULL' = iolist_to_list(P, [42|43]), + 'NULL' = iolist_to_list(P, a), - ?line 'NULL' = iolist_to_list(P, [a]), - ?line 'NULL' = iolist_to_list(P, [256]), - ?line 'NULL' = iolist_to_list(P, [257]), - ?line 'NULL' = iolist_to_list(P, [-1]), - ?line 'NULL' = iolist_to_list(P, [-2]), - ?line 'NULL' = iolist_to_list(P, [-127]), - ?line 'NULL' = iolist_to_list(P, [-128]), + 'NULL' = iolist_to_list(P, [a]), + 'NULL' = iolist_to_list(P, [256]), + 'NULL' = iolist_to_list(P, [257]), + 'NULL' = iolist_to_list(P, [-1]), + 'NULL' = iolist_to_list(P, [-2]), + 'NULL' = iolist_to_list(P, [-127]), + 'NULL' = iolist_to_list(P, [-128]), - ?line runner:finish(P), + runner:finish(P), ok. iolist_to_list(Port, Term) -> case call_erl_function(Port, Term) of - 'NULL' -> - 'NULL'; - Bin when is_binary(Bin) -> - binary_to_list(Bin) + 'NULL' -> + 'NULL'; + Bin when is_binary(Bin) -> + binary_to_list(Bin) end. %% Tests the erl_iolist_to_string() function. -t_erl_iolist_to_string(suite) -> []; t_erl_iolist_to_string(Config) when is_list(Config) -> - ?line P = runner:start(?t_erl_iolist_to_string), + P = runner:start(?t_erl_iolist_to_string), %% Flat lists. - ?line [0] = iolist_to_string(P, []), - ?line [10, 0] = iolist_to_string(P, [10]), - ?line [10, 20, 0] = iolist_to_string(P, [10, 20]), - ?line [10, 20, 30, 0] = iolist_to_string(P, [10, 20, 30]), - ?line AllBytes = lists:seq(1, 255)++[0], - ?line AllBytes = iolist_to_string(P, lists:seq(1, 255)), + [0] = iolist_to_string(P, []), + [10, 0] = iolist_to_string(P, [10]), + [10, 20, 0] = iolist_to_string(P, [10, 20]), + [10, 20, 30, 0] = iolist_to_string(P, [10, 20, 30]), + AllBytes = lists:seq(1, 255)++[0], + AllBytes = iolist_to_string(P, lists:seq(1, 255)), %% Deep lists. - ?line [0] = iolist_to_string(P, [[]]), - ?line [42, 0] = iolist_to_string(P, [[], 42]), - ?line [42, 0] = iolist_to_string(P, [42, []]), - ?line [42, 45, 0] = iolist_to_string(P, [42, [], 45]), + [0] = iolist_to_string(P, [[]]), + [42, 0] = iolist_to_string(P, [[], 42]), + [42, 0] = iolist_to_string(P, [42, []]), + [42, 45, 0] = iolist_to_string(P, [42, [], 45]), - ?line [42, 90, 45, 0] = iolist_to_string(P, [42, [90], 45]), - ?line [42, 90, 45, 0] = iolist_to_string(P, [[42, [90]], 45]), - ?line [42, 90, 45, 0] = iolist_to_string(P, [[42, [90]], 45]), + [42, 90, 45, 0] = iolist_to_string(P, [42, [90], 45]), + [42, 90, 45, 0] = iolist_to_string(P, [[42, [90]], 45]), + [42, 90, 45, 0] = iolist_to_string(P, [[42, [90]], 45]), %% List with binaries. - ?line [0] = iolist_to_string(P, [list_to_binary([])]), - ?line [0] = iolist_to_string(P, [[], list_to_binary([])]), - ?line [1, 0] = iolist_to_string(P, [[1], list_to_binary([])]), - ?line [2, 0] = iolist_to_string(P, [[], list_to_binary([2])]), - ?line [42, 2, 0] = iolist_to_string(P, [[42], list_to_binary([2])]), - ?line [42, 2, 3, 4, 0] = iolist_to_string(P, [[42], - list_to_binary([2, 3, 4])]), + [0] = iolist_to_string(P, [list_to_binary([])]), + [0] = iolist_to_string(P, [[], list_to_binary([])]), + [1, 0] = iolist_to_string(P, [[1], list_to_binary([])]), + [2, 0] = iolist_to_string(P, [[], list_to_binary([2])]), + [42, 2, 0] = iolist_to_string(P, [[42], list_to_binary([2])]), + [42, 2, 3, 4, 0] = iolist_to_string(P, [[42], + list_to_binary([2, 3, 4])]), %% Binaries as tail. - ?line [0] = iolist_to_string(P, [[]| list_to_binary([])]), - ?line [1, 0] = iolist_to_string(P, [[1]| list_to_binary([])]), - ?line [2, 0] = iolist_to_string(P, [[]| list_to_binary([2])]), - ?line [42, 2, 0] = iolist_to_string(P, [[42]| list_to_binary([2])]), + [0] = iolist_to_string(P, [[]| list_to_binary([])]), + [1, 0] = iolist_to_string(P, [[1]| list_to_binary([])]), + [2, 0] = iolist_to_string(P, [[]| list_to_binary([2])]), + [42, 2, 0] = iolist_to_string(P, [[42]| list_to_binary([2])]), %% Binaries only. - ?line [0] = iolist_to_string(P, list_to_binary("")), - ?line [1, 0] = iolist_to_string(P, list_to_binary([1])), - ?line [1, 2, 0] = iolist_to_string(P, list_to_binary([1, 2])), + [0] = iolist_to_string(P, list_to_binary("")), + [1, 0] = iolist_to_string(P, list_to_binary([1])), + [1, 2, 0] = iolist_to_string(P, list_to_binary([1, 2])), %% Illegal cases. - ?line 'NULL' = iolist_to_string(P, [0]), - ?line 'NULL' = iolist_to_string(P, [65, 0, 66]), - ?line 'NULL' = iolist_to_string(P, [65, 66, 67, 0]), + 'NULL' = iolist_to_string(P, [0]), + 'NULL' = iolist_to_string(P, [65, 0, 66]), + 'NULL' = iolist_to_string(P, [65, 66, 67, 0]), - ?line 'NULL' = iolist_to_string(P, [42|43]), - ?line 'NULL' = iolist_to_string(P, a), + 'NULL' = iolist_to_string(P, [42|43]), + 'NULL' = iolist_to_string(P, a), - ?line 'NULL' = iolist_to_string(P, [a]), - ?line 'NULL' = iolist_to_string(P, [256]), - ?line 'NULL' = iolist_to_string(P, [257]), - ?line 'NULL' = iolist_to_string(P, [-1]), - ?line 'NULL' = iolist_to_string(P, [-2]), - ?line 'NULL' = iolist_to_string(P, [-127]), - ?line 'NULL' = iolist_to_string(P, [-128]), + 'NULL' = iolist_to_string(P, [a]), + 'NULL' = iolist_to_string(P, [256]), + 'NULL' = iolist_to_string(P, [257]), + 'NULL' = iolist_to_string(P, [-1]), + 'NULL' = iolist_to_string(P, [-2]), + 'NULL' = iolist_to_string(P, [-127]), + 'NULL' = iolist_to_string(P, [-128]), - ?line runner:finish(P), + runner:finish(P), ok. %% Invokes the erl_iolist_to_string() function. @@ -891,8 +838,8 @@ t_erl_iolist_to_string(Config) when is_list(Config) -> iolist_to_string(Port, Term) -> runner:send_term(Port, Term), case get_term(Port) of - {bytes, Result} -> Result; - 'NULL' -> 'NULL' + {bytes, Result} -> Result; + 'NULL' -> 'NULL' end. @@ -902,38 +849,37 @@ iolist_to_string(Port, Term) -> %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -erl_print_term(suite) -> []; -erl_print_term(doc) -> "Tests the erl_print_term() function"; +%% Tests the erl_print_term() function erl_print_term(Config) when is_list(Config) -> - ?line PrintTerm = print_term(Config), - ?line P = open_port({spawn, PrintTerm}, [stream]), + PrintTerm = print_term(Config), + P = open_port({spawn, PrintTerm}, [stream]), %% Lists. - ?line print(P, "[]", []), - ?line print(P, "[a]", [a]), - ?line print(P, "[[a]]", [[a]]), - ?line print(P, "[[]]", [[]]), - ?line print(P, "[a,b,c]", [a,b,c]), - ?line print(P, "[a,b|c]", [a,b|c]), - ?line print(P, "[a,[],c]", [a,[],c]), - ?line print(P, "[a,[1000,1],c]", [a,[1000,1],c]), + print(P, "[]", []), + print(P, "[a]", [a]), + print(P, "[[a]]", [[a]]), + print(P, "[[]]", [[]]), + print(P, "[a,b,c]", [a,b,c]), + print(P, "[a,b|c]", [a,b|c]), + print(P, "[a,[],c]", [a,[],c]), + print(P, "[a,[1000,1],c]", [a,[1000,1],c]), %% Tuples. - ?line print(P, "{}", {}), - ?line print(P, "{ok}", {ok}), - ?line print(P, "{1,2,3}", {1, 2, 3}), + print(P, "{}", {}), + print(P, "{ok}", {ok}), + print(P, "{1,2,3}", {1, 2, 3}), %% Pids. - ?line {_X, Y, Z} = split_pid(self()), - ?line PidString = lists:flatten(io_lib:format("<~s.~w.~w>", - [node(), Y, Z])), - ?line print(P, PidString, self()), + {_X, Y, Z} = split_pid(self()), + PidString = lists:flatten(io_lib:format("<~s.~w.~w>", + [node(), Y, Z])), + print(P, PidString, self()), - ?line unlink(P), - ?line exit(P, die), + unlink(P), + exit(P, die), ok. split_pid(Pid) when is_pid(Pid) -> @@ -948,23 +894,22 @@ split_pid([$.|Rest], Cur, Result) -> split_pid([$>], Cur, Result) -> list_to_tuple(Result++[Cur]). -print_string(suite) -> []; -print_string(doc) -> "Test printing a string with erl_print_term()"; +%% Test printing a string with erl_print_term() print_string(Config) when is_list(Config) -> - ?line PrintTerm = print_term(Config), - ?line P = open_port({spawn, PrintTerm}, [stream]), + PrintTerm = print_term(Config), + P = open_port({spawn, PrintTerm}, [stream]), %% Strings. - ?line print(P, "\"ABC\"", "ABC"), - ?line {11, "\"\\tABC\\r\\n\""} = print(P, "\tABC\r\n"), + print(P, "\"ABC\"", "ABC"), + {11, "\"\\tABC\\r\\n\""} = print(P, "\tABC\r\n"), %% Not strings. - ?line print(P, "[65,66,67,0]", "ABC\000"), + print(P, "[65,66,67,0]", "ABC\000"), - ?line unlink(P), - ?line exit(P, die), + unlink(P), + exit(P, die), ok. print(Port, TermString, Term) -> @@ -983,15 +928,15 @@ print(Port, Term) -> collect_line(Port, Result) -> receive - {Port, {data, Data}} -> - case lists:reverse(Data) of - [$\n|Rest] -> - collect_line1(Rest++Result, []); - Chars -> - collect_line(Port, Chars++Result) - end - after test_server:seconds(5) -> - test_server:fail("No response from C program") + {Port, {data, Data}} -> + case lists:reverse(Data) of + [$\n|Rest] -> + collect_line1(Rest++Result, []); + Chars -> + collect_line(Port, Chars++Result) + end + after 5000 -> + ct:fail("No response from C program") end. collect_line1([$\r|Rest], Result) -> @@ -1001,18 +946,16 @@ collect_line1([C|Rest], Result) -> %% Test case submitted by Per Lundgren, ERV. -high_chaparal(suite) -> []; high_chaparal(Config) when is_list(Config) -> - ?line P = runner:start(?high_chaparal), - ?line {term, [hello, world]} = get_term(P), - ?line runner:recv_eot(P), + P = runner:start(?high_chaparal), + {term, [hello, world]} = get_term(P), + runner:recv_eot(P), ok. %% OTP-7448 -broken_data(suite) -> []; broken_data(Config) when is_list(Config) -> - ?line P = runner:start(?broken_data), - ?line runner:recv_eot(P), + P = runner:start(?broken_data), + runner:recv_eot(P), ok. %% This calls a C function with one parameter and returns the result. @@ -1020,12 +963,12 @@ broken_data(Config) when is_list(Config) -> call_erl_function(Port, Term) -> runner:send_term(Port, Term), case get_term(Port) of - {term, Result} -> Result; - 'NULL' -> 'NULL' + {term, Result} -> Result; + 'NULL' -> 'NULL' end. print_term(Config) when is_list(Config) -> - filename:join(?config(data_dir, Config), "print_term"). + filename:join(proplists:get_value(data_dir, Config), "print_term"). @@ -1034,57 +977,57 @@ print_term(Config) when is_list(Config) -> %%% back, without having been mutated into short form. We must take %%% care then to check the actual returned ref, and not the original %%% one, which is equal to it. -cnode_1(suite) -> []; -cnode_1(doc) -> "Tests involving cnode: sends a long ref from a cnode to us"; + +%% Tests involving cnode: sends a long ref from a cnode to us cnode_1(Config) when is_list(Config) -> - ?line Cnode = filename:join(?config(data_dir, Config), "cnode"), - ?line register(mip, self()), - ?line spawn_link(?MODULE, start_cnode, [Cnode]), - ?line Ref1 = get_ref(), + Cnode = filename:join(proplists:get_value(data_dir, Config), "cnode"), + register(mip, self()), + spawn_link(?MODULE, start_cnode, [Cnode]), + Ref1 = get_ref(), io:format("Ref1 ~p~n", [Ref1]), - ?line check_ref(Ref1), - ?line Ref2 = make_ref(), - ?line receive - Pid -> Pid - end, - ?line Fun1 = fun(X) -> {Pid, X} end, % sneak in a fun test here - %?line Fun1 = {wait_with_funs, new_dist_format}, - ?line Term = {Ref2, Fun1, {1,2,3,4,5,6,7,8,9,10}}, + check_ref(Ref1), + Ref2 = make_ref(), + Pid = receive + Msg -> Msg %% pid + end, + Fun1 = fun(X) -> {Pid, X} end, % sneak in a fun test here + %Fun1 = {wait_with_funs, new_dist_format}, + Term = {Ref2, Fun1, {1,2,3,4,5,6,7,8,9,10}}, %% A term which will overflow the original buffer used in 'cnode'. - ?line Pid ! Term, - ?line receive - Term2 -> - io:format("received ~p~n", [Term2]), - case Term2 of - Term -> - {Ref22,_,_} = Term2, - ?line check_ref(Ref22); - X -> - test_server:fail({receive1,X}) - end - after 5000 -> - test_server:fail(receive1) - end, - ?line receive - Pid -> - ok; - Y -> - test_server:fail({receive1,Y}) - after 5000 -> - test_server:fail(receive2) - end, - ?line io:format("ref = ~p~n", [Ref1]), - ?line check_ref(Ref1), + Pid ! Term, + receive + Term2 -> + io:format("received ~p~n", [Term2]), + case Term2 of + Term -> + {Ref22,_,_} = Term2, + check_ref(Ref22); + X -> + ct:fail({receive1,X}) + end + after 5000 -> + ct:fail(receive1) + end, + receive + Pid -> + ok; + Y -> + ct:fail({receive1,Y}) + after 5000 -> + ct:fail(receive2) + end, + io:format("ref = ~p~n", [Ref1]), + check_ref(Ref1), ok. check_ref(Ref) -> case bin_ext_type(Ref) of - 101 -> - test_server:fail(oldref); - 114 -> - ok; - Type -> - test_server:fail({type, Type}) + 101 -> + ct:fail(oldref); + 114 -> + ok; + Type -> + ct:fail({type, Type}) end. bin_ext_type(T) -> @@ -1093,10 +1036,10 @@ bin_ext_type(T) -> get_ref() -> receive - X when is_reference(X) -> - X + X when is_reference(X) -> + X after 5000 -> - test_server:fail({cnode, timeout}) + ct:fail({cnode, timeout}) end. start_cnode(Cnode) -> @@ -1105,35 +1048,33 @@ start_cnode(Cnode) -> rec_cnode() -> receive - X -> - io:format("from cnode: ~p~n", [X]), - rec_cnode() + X -> + io:format("from cnode: ~p~n", [X]), + rec_cnode() end. nc2vinfo(Pid) when is_pid(Pid) -> - ?line [_NodeStr, NumberStr, SerialStr] - = string:tokens(pid_to_list(Pid), "<.>"), - ?line Number = list_to_integer(NumberStr), - ?line Serial = list_to_integer(SerialStr), - ?line {pid, node(Pid), Number, Serial}; + [_NodeStr, NumberStr, SerialStr] + = string:tokens(pid_to_list(Pid), "<.>"), + Number = list_to_integer(NumberStr), + Serial = list_to_integer(SerialStr), + {pid, node(Pid), Number, Serial}; nc2vinfo(Port) when is_port(Port) -> - ?line ["#Port", _NodeStr, NumberStr] - = string:tokens(erlang:port_to_list(Port), "<.>"), - ?line Number = list_to_integer(NumberStr), - ?line {port, node(Port), Number}; + ["#Port", _NodeStr, NumberStr] + = string:tokens(erlang:port_to_list(Port), "<.>"), + Number = list_to_integer(NumberStr), + {port, node(Port), Number}; nc2vinfo(Ref) when is_reference(Ref) -> - ?line ["#Ref", _NodeStr | NumStrList] - = string:tokens(erlang:ref_to_list(Ref), "<.>"), - ?line {Len, RevNumList} = lists:foldl(fun ("0", {N, []}) -> - {N+1, []}; - (IStr, {N, Is}) -> - {N+1, - [list_to_integer(IStr)|Is]} - end, - {0, []}, - NumStrList), - ?line {ref, node(Ref), Len, lists:reverse(RevNumList)}; + ["#Ref", _NodeStr | NumStrList] + = string:tokens(erlang:ref_to_list(Ref), "<.>"), + {Len, RevNumList} = lists:foldl(fun ("0", {N, []}) -> + {N+1, []}; + (IStr, {N, Is}) -> + {N+1, + [list_to_integer(IStr)|Is]} + end, + {0, []}, + NumStrList), + {ref, node(Ref), Len, lists:reverse(RevNumList)}; nc2vinfo(Other) -> - ?line {badarg, Other}. - - + {badarg, Other}. diff --git a/lib/erl_interface/test/erl_eterm_SUITE_data/Makefile.first b/lib/erl_interface/test/erl_eterm_SUITE_data/Makefile.first index 4a8664429e..0ea872ef49 100644 --- a/lib/erl_interface/test/erl_eterm_SUITE_data/Makefile.first +++ b/lib/erl_interface/test/erl_eterm_SUITE_data/Makefile.first @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2000-2009. All Rights Reserved. +# Copyright Ericsson AB 2000-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/erl_eterm_SUITE_data/Makefile.src b/lib/erl_interface/test/erl_eterm_SUITE_data/Makefile.src index 31584ff686..4b1ddf77b6 100644 --- a/lib/erl_interface/test/erl_eterm_SUITE_data/Makefile.src +++ b/lib/erl_interface/test/erl_eterm_SUITE_data/Makefile.src @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 1997-2009. All Rights Reserved. +# Copyright Ericsson AB 1997-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/erl_eterm_SUITE_data/cnode.c b/lib/erl_interface/test/erl_eterm_SUITE_data/cnode.c index df40a4414e..bead0f8413 100644 --- a/lib/erl_interface/test/erl_eterm_SUITE_data/cnode.c +++ b/lib/erl_interface/test/erl_eterm_SUITE_data/cnode.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1999-2009. All Rights Reserved. + * Copyright Ericsson AB 1999-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/erl_eterm_SUITE_data/eterm_test.c b/lib/erl_interface/test/erl_eterm_SUITE_data/eterm_test.c index 0a2ecf9dcc..687a45bbab 100644 --- a/lib/erl_interface/test/erl_eterm_SUITE_data/eterm_test.c +++ b/lib/erl_interface/test/erl_eterm_SUITE_data/eterm_test.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1997-2010. All Rights Reserved. + * Copyright Ericsson AB 1997-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/erl_eterm_SUITE_data/print_term.c b/lib/erl_interface/test/erl_eterm_SUITE_data/print_term.c index e474e8f7ab..5b7cb1aec8 100644 --- a/lib/erl_interface/test/erl_eterm_SUITE_data/print_term.c +++ b/lib/erl_interface/test/erl_eterm_SUITE_data/print_term.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1997-2013. All Rights Reserved. + * Copyright Ericsson AB 1997-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/erl_ext_SUITE.erl b/lib/erl_interface/test/erl_ext_SUITE.erl index f73c15e15f..afaba1fd93 100644 --- a/lib/erl_interface/test/erl_ext_SUITE.erl +++ b/lib/erl_interface/test/erl_ext_SUITE.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2002-2011. All Rights Reserved. +%% Copyright Ericsson AB 2002-2016. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -21,77 +21,47 @@ %% -module(erl_ext_SUITE). --include_lib("test_server/include/test_server.hrl"). +-include_lib("common_test/include/ct.hrl"). -include("erl_ext_SUITE_data/ext_test_cases.hrl"). --export([ - all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, - init_per_group/2,end_per_group/2, - compare_tuple/1, - compare_list/1, - compare_string/1, - compare_list_string/1, - compare_nc_ext/1 - ]). +-export([all/0, suite/0, + compare_tuple/1, + compare_list/1, + compare_string/1, + compare_list_string/1, + compare_nc_ext/1]). -import(runner, [get_term/1]). -suite() -> [{ct_hooks,[ts_install_cth]}]. +suite() -> + [{ct_hooks,[ts_install_cth]}]. all() -> [compare_tuple, compare_list, compare_string, compare_list_string, compare_nc_ext]. -groups() -> - []. -init_per_suite(Config) -> - Config. - -end_per_suite(_Config) -> - ok. - -init_per_group(_GroupName, Config) -> - Config. - -end_per_group(_GroupName, Config) -> - Config. - - -compare_tuple(suite) -> []; -compare_tuple(doc) -> []; compare_tuple(Config) when is_list(Config) -> - ?line P = runner:start(?compare_tuple), - ?line runner:recv_eot(P), + P = runner:start(?compare_tuple), + runner:recv_eot(P), ok. -compare_list(suite) -> []; -compare_list(doc) -> []; compare_list(Config) when is_list(Config) -> - ?line P = runner:start(?compare_list), - ?line runner:recv_eot(P), + P = runner:start(?compare_list), + runner:recv_eot(P), ok. -compare_string(suite) -> []; -compare_string(doc) -> []; compare_string(Config) when is_list(Config) -> - ?line P = runner:start(?compare_string), - ?line runner:recv_eot(P), + P = runner:start(?compare_string), + runner:recv_eot(P), ok. -compare_list_string(suite) -> []; -compare_list_string(doc) -> []; compare_list_string(Config) when is_list(Config) -> - ?line P = runner:start(?compare_list_string), - ?line runner:recv_eot(P), + P = runner:start(?compare_list_string), + runner:recv_eot(P), ok. -compare_nc_ext(suite) -> []; -compare_nc_ext(doc) -> []; compare_nc_ext(Config) when is_list(Config) -> - ?line P = runner:start(?compare_nc_ext), - ?line runner:recv_eot(P), + P = runner:start(?compare_nc_ext), + runner:recv_eot(P), ok. - - - diff --git a/lib/erl_interface/test/erl_ext_SUITE_data/Makefile.first b/lib/erl_interface/test/erl_ext_SUITE_data/Makefile.first index ddff1ba13f..9ca8f7f8a3 100644 --- a/lib/erl_interface/test/erl_ext_SUITE_data/Makefile.first +++ b/lib/erl_interface/test/erl_ext_SUITE_data/Makefile.first @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2002-2009. All Rights Reserved. +# Copyright Ericsson AB 2002-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/erl_ext_SUITE_data/Makefile.src b/lib/erl_interface/test/erl_ext_SUITE_data/Makefile.src index 6f3fdec8a4..fe8caebbd6 100644 --- a/lib/erl_interface/test/erl_ext_SUITE_data/Makefile.src +++ b/lib/erl_interface/test/erl_ext_SUITE_data/Makefile.src @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2002-2009. All Rights Reserved. +# Copyright Ericsson AB 2002-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/erl_ext_SUITE_data/ext_test.c b/lib/erl_interface/test/erl_ext_SUITE_data/ext_test.c index 65d5f0d2e0..36cf086ed2 100644 --- a/lib/erl_interface/test/erl_ext_SUITE_data/ext_test.c +++ b/lib/erl_interface/test/erl_ext_SUITE_data/ext_test.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2002-2011. All Rights Reserved. + * Copyright Ericsson AB 2002-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/erl_format_SUITE.erl b/lib/erl_interface/test/erl_format_SUITE.erl index 8c01a9914f..c1a7d8377e 100644 --- a/lib/erl_interface/test/erl_format_SUITE.erl +++ b/lib/erl_interface/test/erl_format_SUITE.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1997-2011. All Rights Reserved. +%% Copyright Ericsson AB 1997-2016. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -21,137 +21,111 @@ %% -module(erl_format_SUITE). --include_lib("test_server/include/test_server.hrl"). +-include_lib("common_test/include/ct.hrl"). -include("erl_format_SUITE_data/format_test_cases.hrl"). --export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, - init_per_group/2,end_per_group/2, atoms/1, tuples/1, lists/1]). +-export([all/0, suite/0, + atoms/1, tuples/1, lists/1]). -import(runner, [get_term/1]). %% This test suite test the erl_format() function. %% It uses the port program "format_test". -suite() -> [{ct_hooks,[ts_install_cth]}]. +suite() -> + [{ct_hooks,[ts_install_cth]}]. all() -> [atoms, tuples, lists]. -groups() -> - []. - -init_per_suite(Config) -> - Config. - -end_per_suite(_Config) -> - ok. - -init_per_group(_GroupName, Config) -> - Config. - -end_per_group(_GroupName, Config) -> - Config. - - %% Tests formatting various atoms. -atoms(suite) -> []; atoms(Config) when is_list(Config) -> - ?line P = runner:start(?atoms), - - ?line {term, ''} = get_term(P), - ?line {term, 'a'} = get_term(P), - ?line {term, 'A'} = get_term(P), - ?line {term, 'abc'} = get_term(P), - ?line {term, 'Abc'} = get_term(P), - ?line {term, 'ab@c'} = get_term(P), - ?line {term, 'The rain in Spain stays mainly in the plains'} = - get_term(P), - - ?line {term, a} = get_term(P), - ?line {term, ab} = get_term(P), - ?line {term, abc} = get_term(P), - ?line {term, ab@c} = get_term(P), - ?line {term, abcdefghijklmnopq} = get_term(P), - - ?line {term, ''} = get_term(P), - ?line {term, 'a'} = get_term(P), - ?line {term, 'A'} = get_term(P), - ?line {term, 'abc'} = get_term(P), - ?line {term, 'Abc'} = get_term(P), - ?line {term, 'ab@c'} = get_term(P), - ?line {term, 'The rain in Spain stays mainly in the plains'} = - get_term(P), - - ?line {term, a} = get_term(P), - ?line {term, ab} = get_term(P), - ?line {term, abc} = get_term(P), - ?line {term, ab@c} = get_term(P), - ?line {term, ' abcdefghijklmnopq '} = get_term(P), - - ?line runner:recv_eot(P), + P = runner:start(?atoms), + + {term, ''} = get_term(P), + {term, 'a'} = get_term(P), + {term, 'A'} = get_term(P), + {term, 'abc'} = get_term(P), + {term, 'Abc'} = get_term(P), + {term, 'ab@c'} = get_term(P), + {term, 'The rain in Spain stays mainly in the plains'} = get_term(P), + + {term, a} = get_term(P), + {term, ab} = get_term(P), + {term, abc} = get_term(P), + {term, ab@c} = get_term(P), + {term, abcdefghijklmnopq} = get_term(P), + + {term, ''} = get_term(P), + {term, 'a'} = get_term(P), + {term, 'A'} = get_term(P), + {term, 'abc'} = get_term(P), + {term, 'Abc'} = get_term(P), + {term, 'ab@c'} = get_term(P), + {term, 'The rain in Spain stays mainly in the plains'} = get_term(P), + + {term, a} = get_term(P), + {term, ab} = get_term(P), + {term, abc} = get_term(P), + {term, ab@c} = get_term(P), + {term, ' abcdefghijklmnopq '} = get_term(P), + + runner:recv_eot(P), ok. %% Tests formatting various tuples -tuples(suite) -> []; tuples(Config) when is_list(Config) -> - ?line P = runner:start(?tuples), - - ?line {term, {}} = get_term(P), - ?line {term, {a}} = get_term(P), - ?line {term, {a, b}} = get_term(P), - ?line {term, {a, b, c}} = get_term(P), - ?line {term, {1}} = get_term(P), - ?line {term, {[]}} = get_term(P), - ?line {term, {[], []}} = get_term(P), - ?line {term, {[], a, b, c}} = get_term(P), - ?line {term, {[], a, [], b, c}} = get_term(P), - ?line {term, {[], a, '', b, c}} = get_term(P), - - ?line runner:recv_eot(P), + P = runner:start(?tuples), + + {term, {}} = get_term(P), + {term, {a}} = get_term(P), + {term, {a, b}} = get_term(P), + {term, {a, b, c}} = get_term(P), + {term, {1}} = get_term(P), + {term, {[]}} = get_term(P), + {term, {[], []}} = get_term(P), + {term, {[], a, b, c}} = get_term(P), + {term, {[], a, [], b, c}} = get_term(P), + {term, {[], a, '', b, c}} = get_term(P), + + runner:recv_eot(P), ok. %% Tests formatting various lists -lists(suite) -> []; lists(Config) when is_list(Config) -> - ?line P = runner:start(?lists), - - ?line {term, []} = get_term(P), - ?line {term, [a]} = get_term(P), - ?line {term, [a, b]} = get_term(P), - ?line {term, [a, b, c]} = get_term(P), - ?line {term, [1]} = get_term(P), - ?line {term, [[]]} = get_term(P), - ?line {term, [[], []]} = get_term(P), - ?line {term, [[], a, b, c]} = get_term(P), - ?line {term, [[], a, [], b, c]} = get_term(P), - ?line {term, [[], a, '', b, c]} = get_term(P), - - ?line {term, [{name, 'Madonna'}, {age, 21}, {data, [{addr, "E-street", 42}]}]} = - get_term(P), + P = runner:start(?lists), + + {term, []} = get_term(P), + {term, [a]} = get_term(P), + {term, [a, b]} = get_term(P), + {term, [a, b, c]} = get_term(P), + {term, [1]} = get_term(P), + {term, [[]]} = get_term(P), + {term, [[], []]} = get_term(P), + {term, [[], a, b, c]} = get_term(P), + {term, [[], a, [], b, c]} = get_term(P), + {term, [[], a, '', b, c]} = get_term(P), + + {term, [{name, 'Madonna'}, {age, 21}, {data, [{addr, "E-street", 42}]}]} = get_term(P), case os:type() of - vxworks -> - ?line {term, [{pi, _}, {'cos(70)', _}]} = get_term(P), - ?line {term, [[pi, _], ['cos(70)', _]]} = get_term(P), - ?line {term, [[pi, _], [], ["cos(70)", _]]} = - get_term(P); - _ -> - ?line {term, [{pi, 3.1415}, {'cos(70)', 0.34202}]} = get_term(P), - ?line {term, [[pi, 3.1415], ['cos(70)', 0.34202]]} = get_term(P), - ?line {term, [[pi, 3.1415], [], ["cos(70)", 0.34202]]} = - get_term(P) + vxworks -> + {term, [{pi, _}, {'cos(70)', _}]} = get_term(P), + {term, [[pi, _], ['cos(70)', _]]} = get_term(P), + {term, [[pi, _], [], ["cos(70)", _]]} = get_term(P); + _ -> + {term, [{pi, 3.1415}, {'cos(70)', 0.34202}]} = get_term(P), + {term, [[pi, 3.1415], ['cos(70)', 0.34202]]} = get_term(P), + {term, [[pi, 3.1415], [], ["cos(70)", 0.34202]]} = get_term(P) end, - ?line {term, [-1]} = get_term(P), + {term, [-1]} = get_term(P), - ?line runner:recv_eot(P), + runner:recv_eot(P), ok. - - - diff --git a/lib/erl_interface/test/erl_format_SUITE_data/Makefile.first b/lib/erl_interface/test/erl_format_SUITE_data/Makefile.first index 9fc4e742bd..acbb8c98bb 100644 --- a/lib/erl_interface/test/erl_format_SUITE_data/Makefile.first +++ b/lib/erl_interface/test/erl_format_SUITE_data/Makefile.first @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2000-2009. All Rights Reserved. +# Copyright Ericsson AB 2000-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/erl_format_SUITE_data/Makefile.src b/lib/erl_interface/test/erl_format_SUITE_data/Makefile.src index 4f5f780f31..2ba59ab651 100644 --- a/lib/erl_interface/test/erl_format_SUITE_data/Makefile.src +++ b/lib/erl_interface/test/erl_format_SUITE_data/Makefile.src @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 1997-2009. All Rights Reserved. +# Copyright Ericsson AB 1997-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/erl_format_SUITE_data/format_test.c b/lib/erl_interface/test/erl_format_SUITE_data/format_test.c index 179327ede0..258ae92e0f 100644 --- a/lib/erl_interface/test/erl_format_SUITE_data/format_test.c +++ b/lib/erl_interface/test/erl_format_SUITE_data/format_test.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1997-2009. All Rights Reserved. + * Copyright Ericsson AB 1997-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/erl_global_SUITE.erl b/lib/erl_interface/test/erl_global_SUITE.erl index b719ad5c6a..ecc6753c7f 100644 --- a/lib/erl_interface/test/erl_global_SUITE.erl +++ b/lib/erl_interface/test/erl_global_SUITE.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2000-2011. All Rights Reserved. +%% Copyright Ericsson AB 2000-2016. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -21,12 +21,12 @@ %% -module(erl_global_SUITE). --include_lib("test_server/include/test_server.hrl"). +-include_lib("common_test/include/ct.hrl"). -include("erl_global_SUITE_data/erl_global_test_cases.hrl"). --export([all/0,suite/0,init_per_suite/1,end_per_suite/1, - init_per_testcase/2,end_per_testcase/2, - erl_global_registration/1, erl_global_whereis/1, erl_global_names/1]). +-export([all/0,suite/0, + erl_global_registration/1, + erl_global_whereis/1, erl_global_names/1]). -import(runner, [get_term/1,send_term/2]). @@ -35,62 +35,50 @@ all() -> [erl_global_registration, erl_global_whereis, erl_global_names]. -suite() -> [{ct_hooks,[ts_install_cth]}]. +suite() -> + [{ct_hooks,[ts_install_cth]}, + {timetrap, {seconds, 30}}]. -init_per_suite(Config) -> - Config. - -end_per_suite(_Config) -> - ok. - -init_per_testcase(_Case, Config) -> - Dog = ?t:timetrap(?t:minutes(0.25)), - [{watchdog, Dog}|Config]. - -end_per_testcase(_Case, Config) -> - Dog = ?config(watchdog, Config), - test_server:timetrap_cancel(Dog), - ok. erl_global_registration(Config) when is_list(Config) -> - ?line P = runner:start(?interpret), - ?line {ok, Fd} = erl_connect(P, node(), 42, erlang:get_cookie(), 0), + P = runner:start(?interpret), + {ok, Fd} = erl_connect(P, node(), 42, erlang:get_cookie(), 0), - ?line ok = erl_global_register(P, Fd, ?GLOBAL_NAME), - ?line ok = erl_global_unregister(P, Fd, ?GLOBAL_NAME), + ok = erl_global_register(P, Fd, ?GLOBAL_NAME), + ok = erl_global_unregister(P, Fd, ?GLOBAL_NAME), - ?line 0 = erl_close_connection(P,Fd), - ?line runner:send_eot(P), - ?line runner:recv_eot(P), + 0 = erl_close_connection(P,Fd), + runner:send_eot(P), + runner:recv_eot(P), ok. erl_global_whereis(Config) when is_list(Config) -> - ?line P = runner:start(?interpret), - ?line {ok, Fd} = erl_connect(P, node(), 42, erlang:get_cookie(), 0), - - ?line Self = self(), - ?line yes = global:register_name(?GLOBAL_NAME, Self), - ?line Self = erl_global_whereis(P, Fd, ?GLOBAL_NAME), - ?line global:unregister_name(?GLOBAL_NAME), - ?line 0 = erl_close_connection(P, Fd), - ?line runner:send_eot(P), - ?line runner:recv_eot(P), + P = runner:start(?interpret), + {ok, Fd} = erl_connect(P, node(), 42, erlang:get_cookie(), 0), + + Self = self(), + yes = global:register_name(?GLOBAL_NAME, Self), + Self = erl_global_whereis(P, Fd, ?GLOBAL_NAME), + global:unregister_name(?GLOBAL_NAME), + 0 = erl_close_connection(P, Fd), + runner:send_eot(P), + runner:recv_eot(P), ok. erl_global_names(Config) when is_list(Config) -> - ?line P = runner:start(?interpret), - ?line {ok, Fd} = erl_connect(P, node(), 42, erlang:get_cookie(), 0), - - ?line Self = self(), - ?line global:register_name(?GLOBAL_NAME, Self), - ?line {Names1, _N1} = erl_global_names(P, Fd), - ?line true = lists:member(atom_to_list(?GLOBAL_NAME), Names1), - ?line global:unregister_name(?GLOBAL_NAME), - ?line {Names2, _N2} = erl_global_names(P, Fd), - ?line false = lists:member(atom_to_list(?GLOBAL_NAME), Names2), - ?line 0 = erl_close_connection(P, Fd), - ?line runner:send_eot(P), - ?line runner:recv_eot(P), + P = runner:start(?interpret), + {ok, Fd} = erl_connect(P, node(), 42, erlang:get_cookie(), 0), + + Self = self(), + global:register_name(?GLOBAL_NAME, Self), + {Names1, _N1} = erl_global_names(P, Fd), + true = lists:member(atom_to_list(?GLOBAL_NAME), Names1), + global:unregister_name(?GLOBAL_NAME), + {Names2, _N2} = erl_global_names(P, Fd), + false = lists:member(atom_to_list(?GLOBAL_NAME), Names2), + 0 = erl_close_connection(P, Fd), + runner:send_eot(P), + runner:recv_eot(P), ok. %%% Interface functions for erl_interface functions. @@ -98,14 +86,14 @@ erl_global_names(Config) when is_list(Config) -> erl_connect(P, Node, Num, Cookie, Creation) -> send_command(P, erl_connect, [Num, Node, Cookie, Creation]), case get_term(P) of - {term,{Fd,_}} when Fd >= 0 -> {ok,Fd}; - {term,{-1,Errno}} -> {error,Errno} + {term,{Fd,_}} when Fd >= 0 -> {ok,Fd}; + {term,{-1,Errno}} -> {error,Errno} end. erl_close_connection(P, FD) -> send_command(P, erl_close_connection, [FD]), case get_term(P) of - {term,Int} when is_integer(Int) -> Int + {term,Int} when is_integer(Int) -> Int end. erl_global_register(P, Fd, Name) -> @@ -115,15 +103,15 @@ erl_global_register(P, Fd, Name) -> erl_global_whereis(P, Fd, Name) -> send_command(P, erl_global_whereis, [Fd,Name]), case get_term(P) of - {term, What} -> - What + {term, What} -> + What end. erl_global_names(P, Fd) -> send_command(P, erl_global_names, [Fd]), case get_term(P) of - {term, What} -> - What + {term, What} -> + What end. erl_global_unregister(P, Fd, Name) -> @@ -132,11 +120,11 @@ erl_global_unregister(P, Fd, Name) -> get_send_result(P) -> case get_term(P) of - {term,{1,_}} -> ok; - {term,{0, 0}} -> ok; - {term,{-1, Errno}} -> {error,Errno}; - {term,{_,_}}-> - ?t:fail(bad_return_value) + {term,{1,_}} -> ok; + {term,{0, 0}} -> ok; + {term,{-1, Errno}} -> {error,Errno}; + {term,{_,_}}-> + ct:fail(bad_return_value) end. send_command(P, Name, Args) -> diff --git a/lib/erl_interface/test/erl_global_SUITE_data/Makefile.first b/lib/erl_interface/test/erl_global_SUITE_data/Makefile.first index ec77ef3dc2..b2c62be1f2 100644 --- a/lib/erl_interface/test/erl_global_SUITE_data/Makefile.first +++ b/lib/erl_interface/test/erl_global_SUITE_data/Makefile.first @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2001-2010. All Rights Reserved. +# Copyright Ericsson AB 2001-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/erl_global_SUITE_data/Makefile.src b/lib/erl_interface/test/erl_global_SUITE_data/Makefile.src index 4cbf51713b..1c1530d1b6 100644 --- a/lib/erl_interface/test/erl_global_SUITE_data/Makefile.src +++ b/lib/erl_interface/test/erl_global_SUITE_data/Makefile.src @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2000-2010. All Rights Reserved. +# Copyright Ericsson AB 2000-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/erl_global_SUITE_data/erl_global_test.c b/lib/erl_interface/test/erl_global_SUITE_data/erl_global_test.c index 5a17069751..0f08727225 100644 --- a/lib/erl_interface/test/erl_global_SUITE_data/erl_global_test.c +++ b/lib/erl_interface/test/erl_global_SUITE_data/erl_global_test.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2000-2010. All Rights Reserved. + * Copyright Ericsson AB 2000-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/erl_match_SUITE.erl b/lib/erl_interface/test/erl_match_SUITE.erl index d8f7bd89b4..5566714092 100644 --- a/lib/erl_interface/test/erl_match_SUITE.erl +++ b/lib/erl_interface/test/erl_match_SUITE.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. +%% Copyright Ericsson AB 1997-2016. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -21,249 +21,221 @@ %% -module(erl_match_SUITE). --include_lib("test_server/include/test_server.hrl"). +-include_lib("common_test/include/ct.hrl"). -include("erl_match_SUITE_data/match_test_cases.hrl"). --export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, - init_per_group/2,end_per_group/2, - atoms/1, lists/1, tuples/1, references/1, pids/1, ports/1, - bind/1, integers/1, floats/1, binaries/1, strings/1]). +-export([all/0, suite/0, + atoms/1, lists/1, tuples/1, references/1, pids/1, ports/1, + bind/1, integers/1, floats/1, binaries/1, strings/1]). %% For interactive running of matcher. -export([start_matcher/1, erl_match/3]). %% This test suite tests the erl_match() function. -suite() -> [{ct_hooks,[ts_install_cth]}]. +suite() -> + [{ct_hooks,[ts_install_cth]}]. all() -> [atoms, lists, tuples, references, pids, ports, bind, integers, floats, binaries, strings]. -groups() -> - []. -init_per_suite(Config) -> - Config. - -end_per_suite(_Config) -> - ok. - -init_per_group(_GroupName, Config) -> - Config. - -end_per_group(_GroupName, Config) -> - Config. - - -atoms(suite) -> []; atoms(Config) when is_list(Config) -> - ?line P = start_matcher(Config), + P = start_matcher(Config), - ?line eq(P, '', ''), - ?line eq(P, a, a), - ?line ne(P, a, b), - ?line ne(P, a, aa), - ?line eq(P, kalle, kalle), - ?line ne(P, kalle, arne), + eq(P, '', ''), + eq(P, a, a), + ne(P, a, b), + ne(P, a, aa), + eq(P, kalle, kalle), + ne(P, kalle, arne), - ?line ne(P, kalle, 42), - ?line ne(P, 42, kalle), + ne(P, kalle, 42), + ne(P, 42, kalle), - ?line runner:finish(P), + runner:finish(P), ok. -lists(suite) -> []; lists(Config) when is_list(Config) -> - ?line P = start_matcher(Config), - ?line eq(P, [], []), + P = start_matcher(Config), + eq(P, [], []), - ?line ne(P, [], [a]), - ?line ne(P, [a], []), + ne(P, [], [a]), + ne(P, [a], []), - ?line eq(P, [a], [a]), - ?line ne(P, [a], [b]), + eq(P, [a], [a]), + ne(P, [a], [b]), - ?line eq(P, [a|b], [a|b]), - ?line ne(P, [a|b], [a|x]), + eq(P, [a|b], [a|b]), + ne(P, [a|b], [a|x]), - ?line eq(P, [a, b], [a, b]), - ?line ne(P, [a, b], [a, x]), + eq(P, [a, b], [a, b]), + ne(P, [a, b], [a, x]), - ?line eq(P, [a, b, c], [a, b, c]), - ?line ne(P, [a, b|c], [a, b|x]), - ?line ne(P, [a, b, c], [a, b, x]), - ?line ne(P, [a, b|c], [a, b|x]), - ?line ne(P, [a, x|c], [a, b|c]), - ?line ne(P, [a, b, c], [a, x, c]), + eq(P, [a, b, c], [a, b, c]), + ne(P, [a, b|c], [a, b|x]), + ne(P, [a, b, c], [a, b, x]), + ne(P, [a, b|c], [a, b|x]), + ne(P, [a, x|c], [a, b|c]), + ne(P, [a, b, c], [a, x, c]), - ?line runner:finish(P), + runner:finish(P), ok. -tuples(suite) -> []; tuples(Config) when is_list(Config) -> - ?line P = start_matcher(Config), + P = start_matcher(Config), - ?line ne(P, {}, {a, b}), - ?line ne(P, {a, b}, {}), - ?line ne(P, {a}, {a, b}), - ?line ne(P, {a, b}, {a}), + ne(P, {}, {a, b}), + ne(P, {a, b}, {}), + ne(P, {a}, {a, b}), + ne(P, {a, b}, {a}), - ?line eq(P, {}, {}), + eq(P, {}, {}), - ?line eq(P, {a}, {a}), - ?line ne(P, {a}, {b}), + eq(P, {a}, {a}), + ne(P, {a}, {b}), - ?line eq(P, {1}, {1}), - ?line ne(P, {1}, {2}), + eq(P, {1}, {1}), + ne(P, {1}, {2}), - ?line eq(P, {a, b}, {a, b}), - ?line ne(P, {x, b}, {a, b}), + eq(P, {a, b}, {a, b}), + ne(P, {x, b}, {a, b}), - ?line ne(P, {error, x}, {error, y}), - ?line ne(P, {error, {undefined, {subscriber, last}}}, - {error, {undefined, {subscriber, name}}}), + ne(P, {error, x}, {error, y}), + ne(P, {error, {undefined, {subscriber, last}}}, + {error, {undefined, {subscriber, name}}}), - ?line runner:finish(P), + runner:finish(P), ok. -references(suite) -> []; references(Config) when is_list(Config) -> - ?line P = start_matcher(Config), - ?line Ref1 = make_ref(), - ?line Ref2 = make_ref(), - - ?line eq(P, Ref1, Ref1), - ?line eq(P, Ref2, Ref2), - ?line ne(P, Ref1, Ref2), - ?line ne(P, Ref2, Ref1), - - ?line runner:finish(P), + P = start_matcher(Config), + Ref1 = make_ref(), + Ref2 = make_ref(), + + eq(P, Ref1, Ref1), + eq(P, Ref2, Ref2), + ne(P, Ref1, Ref2), + ne(P, Ref2, Ref1), + + runner:finish(P), ok. -pids(suite) -> []; pids(Config) when is_list(Config) -> - ?line P = start_matcher(Config), - ?line Pid1 = c:pid(0,1,2), - ?line Pid2 = c:pid(0,1,3), - - ?line eq(P, self(), self()), - ?line eq(P, Pid1, Pid1), - ?line ne(P, Pid1, self()), - ?line ne(P, Pid2, Pid1), - - ?line runner:finish(P), + P = start_matcher(Config), + Pid1 = c:pid(0,1,2), + Pid2 = c:pid(0,1,3), + + eq(P, self(), self()), + eq(P, Pid1, Pid1), + ne(P, Pid1, self()), + ne(P, Pid2, Pid1), + + runner:finish(P), ok. -ports(suite) -> []; ports(Config) when is_list(Config) -> case os:type() of - vxworks -> - {skipped,"not on vxworks, pucko"}; - _ -> - ?line P = start_matcher(Config), - ?line P2 = start_matcher(Config), - - ?line eq(P, P, P), - ?line ne(P, P, P2), - - ?line runner:finish(P), - ?line runner:finish(P2), - ok + vxworks -> + {skipped,"not on vxworks, pucko"}; + _ -> + P = start_matcher(Config), + P2 = start_matcher(Config), + + eq(P, P, P), + ne(P, P, P2), + + runner:finish(P), + runner:finish(P2), + ok end. -integers(suite) -> []; integers(Config) when is_list(Config) -> - ?line P = start_matcher(Config), - ?line I1 = 123, - ?line I2 = 12345, - ?line I3 = -123, - ?line I4 = 2234, - - ?line eq(P, I1, I1), - ?line eq(P, I2, I2), - ?line ne(P, I1, I2), - ?line ne(P, I1, I3), - ?line eq(P, I4, I4), - - ?line runner:finish(P), + P = start_matcher(Config), + I1 = 123, + I2 = 12345, + I3 = -123, + I4 = 2234, + + eq(P, I1, I1), + eq(P, I2, I2), + ne(P, I1, I2), + ne(P, I1, I3), + eq(P, I4, I4), + + runner:finish(P), ok. -floats(suite) -> []; floats(Config) when is_list(Config) -> - ?line P = start_matcher(Config), - ?line F1 = 3.1414, - ?line F2 = 3.1415, - ?line F3 = 3.1416, - - ?line S1 = "string", - ?line S2 = "string2", - - ?line eq(P, F1, F1), - ?line eq(P, F2, F2), - ?line ne(P, F1, F2), - ?line ne(P, F3, F2), - - ?line eq(P, S2, S2), - ?line ne(P, S1, S2), - - ?line runner:finish(P), + P = start_matcher(Config), + F1 = 3.1414, + F2 = 3.1415, + F3 = 3.1416, + + S1 = "string", + S2 = "string2", + + eq(P, F1, F1), + eq(P, F2, F2), + ne(P, F1, F2), + ne(P, F3, F2), + + eq(P, S2, S2), + ne(P, S1, S2), + + runner:finish(P), ok. -binaries(suite) -> []; binaries(Config) when is_list(Config) -> - ?line P = start_matcher(Config), - ?line Bin1 = term_to_binary({kalle, 146015, {kungsgatan, 23}}), - ?line Bin2 = term_to_binary(sune), - ?line Bin3 = list_to_binary("sune"), - - ?line eq(P, Bin1, Bin1), - ?line eq(P, Bin2, Bin2), - ?line eq(P, Bin3, Bin3), - ?line ne(P, Bin1, Bin2), - ?line ne(P, Bin1, Bin3), - ?line ne(P, Bin2, Bin3), - - ?line runner:finish(P), + P = start_matcher(Config), + Bin1 = term_to_binary({kalle, 146015, {kungsgatan, 23}}), + Bin2 = term_to_binary(sune), + Bin3 = list_to_binary("sune"), + + eq(P, Bin1, Bin1), + eq(P, Bin2, Bin2), + eq(P, Bin3, Bin3), + ne(P, Bin1, Bin2), + ne(P, Bin1, Bin3), + ne(P, Bin2, Bin3), + + runner:finish(P), ok. - -strings(suite) -> []; strings(Config) when is_list(Config) -> - ?line P = start_matcher(Config), + P = start_matcher(Config), - ?line S1 = "string", - ?line S2 = "streng", - ?line S3 = "String", - - ?line eq(P, S1, S1), - ?line ne(P, S1, S2), - ?line ne(P, S1, S3), + S1 = "string", + S2 = "streng", + S3 = "String", - ?line runner:finish(P), - ok. + eq(P, S1, S1), + ne(P, S1, S2), + ne(P, S1, S3), + runner:finish(P), + ok. -bind(suite) -> []; bind(Config) when is_list(Config) -> - ?line P = start_bind(Config), - ?line S = "[X,Y,Z]", - ?line L1 = [301,302,302], - ?line L2 = [65,66,67], - - ?line bind_ok(P, S, L1), - ?line bind_ok(P, S, L2), - - ?line runner:finish(P), + P = start_bind(Config), + S = "[X,Y,Z]", + L1 = [301,302,302], + L2 = [65,66,67], + + bind_ok(P, S, L1), + bind_ok(P, S, L2), + + runner:finish(P), ok. start_bind(Config) -> @@ -279,15 +251,12 @@ erl_bind(Port, Pattern, Term) -> Port ! {self(), {command, [$b, Pattern, 0]}}, runner:send_term(Port, Term), case runner:get_term(Port) of - {term, 0} -> false; - {term, 1} -> true + {term, 0} -> false; + {term, 1} -> true end. - - - start_matcher(Config) -> runner:start(?erl_match_server). @@ -303,8 +272,6 @@ erl_match(Port, Pattern, Term) -> runner:send_term(Port, Pattern), runner:send_term(Port, Term), case runner:get_term(Port) of - {term, 0} -> false; - {term, 1} -> true + {term, 0} -> false; + {term, 1} -> true end. - - diff --git a/lib/erl_interface/test/erl_match_SUITE_data/Makefile.first b/lib/erl_interface/test/erl_match_SUITE_data/Makefile.first index 867c59802f..459b5c14c2 100644 --- a/lib/erl_interface/test/erl_match_SUITE_data/Makefile.first +++ b/lib/erl_interface/test/erl_match_SUITE_data/Makefile.first @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2000-2009. All Rights Reserved. +# Copyright Ericsson AB 2000-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/erl_match_SUITE_data/Makefile.src b/lib/erl_interface/test/erl_match_SUITE_data/Makefile.src index 5753a417fb..156214a269 100644 --- a/lib/erl_interface/test/erl_match_SUITE_data/Makefile.src +++ b/lib/erl_interface/test/erl_match_SUITE_data/Makefile.src @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 1997-2009. All Rights Reserved. +# Copyright Ericsson AB 1997-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/erl_match_SUITE_data/match_test.c b/lib/erl_interface/test/erl_match_SUITE_data/match_test.c index c508786ba8..d577417f5b 100644 --- a/lib/erl_interface/test/erl_match_SUITE_data/match_test.c +++ b/lib/erl_interface/test/erl_match_SUITE_data/match_test.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1997-2009. All Rights Reserved. + * Copyright Ericsson AB 1997-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/port_call_SUITE.erl b/lib/erl_interface/test/port_call_SUITE.erl index b0f5ed4fe9..fb10bd895f 100644 --- a/lib/erl_interface/test/port_call_SUITE.erl +++ b/lib/erl_interface/test/port_call_SUITE.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2001-2011. All Rights Reserved. +%% Copyright Ericsson AB 2001-2016. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -32,96 +32,78 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, init_per_group/2,end_per_group/2, basic/1]). -% Private exports --include_lib("test_server/include/test_server.hrl"). +-export([all/0, suite/0, basic/1]). +% Private exports +-include_lib("common_test/include/ct.hrl"). -suite() -> [{ct_hooks,[ts_install_cth]}]. +suite() -> + [{ct_hooks,[ts_install_cth]}, + {timetrap, {seconds, 10}}]. all() -> -[basic]. - -groups() -> - []. - -init_per_suite(Config) -> - Config. - -end_per_suite(_Config) -> - ok. - -init_per_group(_GroupName, Config) -> - Config. - -end_per_group(_GroupName, Config) -> - Config. + [basic]. -basic(suite) -> []; basic(Config) when is_list(Config) -> case os:type() of - {unix, linux} -> - do_basic(Config); - {unix, sunos} -> - do_basic(Config); - {win32,_} -> - do_basic(Config); - _ -> - {skipped, "Dynamic linking and erl_interface not fully examined" - " on this platform..."} + {unix, linux} -> + do_basic(Config); + {unix, sunos} -> + do_basic(Config); + {win32,_} -> + do_basic(Config); + _ -> + {skipped, "Dynamic linking and erl_interface not fully examined" + " on this platform..."} end. do_basic(Config) -> - ?line Dog = test_server:timetrap(test_server:seconds(10)), - ?line Path = ?config(data_dir, Config), + Path = proplists:get_value(data_dir, Config), - ?line erl_ddll:start(), + erl_ddll:start(), %% Load the echo driver and verify that it was loaded. {ok,L1,L2}=load_port_call_driver(Path), %% Verify that the driver works. - ?line Port = open_port({spawn, port_call_drv}, [eof]), - ?line {hej, "hopp",4711,123445567436543653} = - erlang:port_call(Port,{hej, "hopp",4711,123445567436543653}), - ?line {hej, "hopp",4711,123445567436543653} = - erlang:port_call(Port,0,{hej, "hopp",4711,123445567436543653}), - ?line {[], a, [], b, c} = - erlang:port_call(Port,1,{hej, "hopp",4711,123445567436543653}), - ?line {return, {[], a, [], b, c}} = - erlang:port_call(Port,2,{[], a, [], b, c}), - ?line List = lists:duplicate(200,5), - ?line {return, List} = erlang:port_call(Port,2,List), - ?line {'EXIT',{badarg,_}} = (catch erlang:port_call(Port,4711,[])), - ?line {'EXIT',{badarg,_}} = (catch erlang:port_call(sune,2,[])), - ?line register(gunnar,Port), - ?line {return, List} = erlang:port_call(gunnar,2,List), - ?line {return, a} = erlang:port_call(gunnar,2,a), - ?line erlang:port_close(Port), + Port = open_port({spawn, port_call_drv}, [eof]), + {hej, "hopp",4711,123445567436543653} = + erlang:port_call(Port,{hej, "hopp",4711,123445567436543653}), + {hej, "hopp",4711,123445567436543653} = + erlang:port_call(Port,0,{hej, "hopp",4711,123445567436543653}), + {[], a, [], b, c} = + erlang:port_call(Port,1,{hej, "hopp",4711,123445567436543653}), + {return, {[], a, [], b, c}} = + erlang:port_call(Port,2,{[], a, [], b, c}), + List = lists:duplicate(200,5), + {return, List} = erlang:port_call(Port,2,List), + {'EXIT',{badarg,_}} = (catch erlang:port_call(Port,4711,[])), + {'EXIT',{badarg,_}} = (catch erlang:port_call(sune,2,[])), + register(gunnar,Port), + {return, List} = erlang:port_call(gunnar,2,List), + {return, a} = erlang:port_call(gunnar,2,a), + erlang:port_close(Port), %% Unload the driver and verify that it was unloaded. ok=unload_port_call_driver(L1,L2), - ?line {error, {already_started, _}} = erl_ddll:start(), - ?line ok = erl_ddll:stop(), - - ?line test_server:timetrap_cancel(Dog), + {error, {already_started, _}} = erl_ddll:start(), + ok = erl_ddll:stop(), ok. load_port_call_driver(Path) -> - ?line {ok, L1} = erl_ddll:loaded_drivers(), - ?line ok = erl_ddll:load_driver(Path, port_call_drv), - ?line {ok, L2} = erl_ddll:loaded_drivers(), - ?line ["port_call_drv"] = ordsets:to_list(ordsets:subtract(ordsets:from_list(L2), - ordsets:from_list(L1))), + {ok, L1} = erl_ddll:loaded_drivers(), + ok = erl_ddll:load_driver(Path, port_call_drv), + {ok, L2} = erl_ddll:loaded_drivers(), + ["port_call_drv"] = ordsets:to_list(ordsets:subtract(ordsets:from_list(L2), + ordsets:from_list(L1))), {ok,L1,L2}. unload_port_call_driver(L1,L2) -> - ?line {ok, L2} = erl_ddll:loaded_drivers(), - ?line ok = erl_ddll:unload_driver(port_call_drv), - ?line {ok, L3} = erl_ddll:loaded_drivers(), - ?line [] = ordsets:to_list(ordsets:subtract(ordsets:from_list(L3), - ordsets:from_list(L1))), + {ok, L2} = erl_ddll:loaded_drivers(), + ok = erl_ddll:unload_driver(port_call_drv), + {ok, L3} = erl_ddll:loaded_drivers(), + [] = ordsets:to_list(ordsets:subtract(ordsets:from_list(L3), + ordsets:from_list(L1))), ok. - diff --git a/lib/erl_interface/test/port_call_SUITE_data/Makefile.src b/lib/erl_interface/test/port_call_SUITE_data/Makefile.src index 12b9fcae76..0f97ce9f70 100644 --- a/lib/erl_interface/test/port_call_SUITE_data/Makefile.src +++ b/lib/erl_interface/test/port_call_SUITE_data/Makefile.src @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2001-2011. All Rights Reserved. +# Copyright Ericsson AB 2001-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/port_call_SUITE_data/port_call_drv.c b/lib/erl_interface/test/port_call_SUITE_data/port_call_drv.c index ac23a650c1..4617cb0316 100644 --- a/lib/erl_interface/test/port_call_SUITE_data/port_call_drv.c +++ b/lib/erl_interface/test/port_call_SUITE_data/port_call_drv.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 2001-2011. All Rights Reserved. + * Copyright Ericsson AB 2001-2016. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/erl_interface/test/runner.erl b/lib/erl_interface/test/runner.erl index ae2598abf8..1084eec2a3 100644 --- a/lib/erl_interface/test/runner.erl +++ b/lib/erl_interface/test/runner.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1997-2010. All Rights Reserved. +%% Copyright Ericsson AB 1997-2016. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -25,7 +25,7 @@ start/1, send_term/2, finish/1, send_eot/1, recv_eot/1, get_term/1, get_term/2]). --define(default_timeout, test_server:seconds(5)). +-define(default_timeout, 5000). %% Executes a test case in a C program. %% @@ -45,7 +45,7 @@ test(Tc, Timeout) -> io:format("In this test case, a success/failure result was"), io:format("expected from the C program.\n"), io:format("Received: ~p", [Other]), - test_server:fail() + ct:fail(badresult) end. %% Executes a test case in a C program. Returns the port. @@ -55,7 +55,7 @@ test(Tc, Timeout) -> %% Returns: {ok, Port} start({Prog, Tc}) when is_list(Prog), is_integer(Tc) -> - Port = open_port({spawn, Prog}, [{packet, 4}]), + Port = open_port({spawn, Prog}, [{packet, 4}, exit_status]), Command = [Tc div 256, Tc rem 256], Port ! {self(), {command, Command}}, Port. @@ -80,7 +80,7 @@ send_eot(Port) when is_port(Port) -> Port ! {self(), {command, [$e]}}. %% Waits for an 'eot' indication from the C program. -%% Either returns 'ok' or invokes test_server:fail(). +%% Either returns 'ok' or invokes ct:fail(badresult). recv_eot(Port) when is_port(Port) -> case get_term(Port) of @@ -90,12 +90,12 @@ recv_eot(Port) when is_port(Port) -> io:format("Error finishing test case. Expected eof from"), io:format("C program, but got:"), io:format("~p", [Other]), - test_server:fail() + ct:fail(badresult) end. %% Reads a term from the C program. %% -%% Returns: {term, Term}|eot|'NULL' or calls test_server:fail/1,2. +%% Returns: {term, Term}|eot|'NULL' or calls ct:fail/1,2. get_term(Port) -> get_term(Port, ?default_timeout). @@ -105,9 +105,9 @@ get_term(Port, Timeout) -> [$b|Bytes] -> {bytes, Bytes}; [$f] -> - test_server:fail(); + ct:fail(failure); [$f|Reason] -> - test_server:fail(Reason); + ct:fail(Reason); [$t|Term] -> {term, binary_to_term(list_to_binary(Term))}; [$N] -> @@ -119,13 +119,15 @@ get_term(Port, Timeout) -> get_term(Port, Timeout); Other -> io:format("Garbage received from C program: ~p", [Other]), - test_server:fail("Illegal response from C program") + ct:fail("Illegal response from C program") end. get_reply(Port, Timeout) when is_port(Port) -> receive {Port, {data, Reply}} -> - Reply + Reply; + Fail when element(1, Fail) == Port -> + ct:fail("Got unexpected message from port: ~p",[Fail]) after Timeout -> - test_server:fail("No response from C program") + ct:fail("No response from C program") end. |