aboutsummaryrefslogblamecommitdiffstats
path: root/lib/common_test/test/ct_repeat_1_SUITE.erl
blob: 5f85a6b61d81acb53dc91579c39e6212013e6dd8 (plain) (tree)
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537






























                                                                         
                                           

























                                                                      

















                                                    
















































































































                                                                                 
                         















                                                                                   

                                 

















































                                                                                        
 



















                                                                         
 

































































                                                                                  

                                      

































































































































                                                                       

                                        






































































































































































































































































































































































































                                                                            

                                      























































































































































                                                                                   

                                        





























































































































































































































































































































































































































































































































                                                                                   
%%
%% %CopyrightBegin%
%%
%% Copyright Ericsson AB 2009-2010. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
%% compliance with the License. You should have received a copy of the
%% Erlang Public License along with this software. If not, it can be
%% retrieved online at http://www.erlang.org/.
%%
%% Software distributed under the License is distributed on an "AS IS"
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
%% the License for the specific language governing rights and limitations
%% under the License.
%%
%% %CopyrightEnd%
%%

%%%-------------------------------------------------------------------
%%% File: ct_repeat_1_SUITE.erl
%%%
%%% Description:
%%% Test some simple test case group scenarios with repeat.
%%%
%%% The suites used for the test are located in the data directory.
%%%-------------------------------------------------------------------
-module(ct_repeat_1_SUITE).

-compile(export_all).

-include_lib("common_test/include/ct.hrl").
-include_lib("common_test/include/ct_event.hrl").

-define(eh, ct_test_support_eh).

%%--------------------------------------------------------------------
%% TEST SERVER CALLBACK FUNCTIONS
%%--------------------------------------------------------------------

%%--------------------------------------------------------------------
%% Description: Since Common Test starts another Test Server
%% instance, the tests need to be performed on a separate node (or
%% there will be clashes with logging processes etc).
%%--------------------------------------------------------------------
init_per_suite(Config) ->
    Config1 = ct_test_support:init_per_suite(Config),
    Config1.

end_per_suite(Config) ->
    ct_test_support:end_per_suite(Config).

init_per_testcase(TestCase, Config) ->
    ct_test_support:init_per_testcase(TestCase, Config).

end_per_testcase(TestCase, Config) ->
    ct_test_support:end_per_testcase(TestCase, Config).

all() -> 
[repeat_cs, repeat_cs_and_grs, repeat_seq,
 repeat_cs_until_any_ok, repeat_gr_until_any_ok,
 repeat_cs_until_any_fail, repeat_gr_until_any_fail,
 repeat_cs_until_all_ok, repeat_gr_until_all_ok,
 repeat_cs_until_all_fail, repeat_gr_until_all_fail,
 repeat_seq_until_any_fail,
 repeat_shuffled_seq_until_any_fail].

groups() -> 
    [].

init_per_group(_GroupName, Config) ->
	Config.

end_per_group(_GroupName, Config) ->
	Config.


%%--------------------------------------------------------------------
%% TEST CASES
%%--------------------------------------------------------------------

repeat_cs(Config) when is_list(Config) ->
    execute(repeat_cs,
	    "repeat_1_SUITE", repeat_cs,
	    Config).
%%%-------------------------------------------------------------------
repeat_cs_and_grs(Config) when is_list(Config) ->
    execute(repeat_cs_and_grs,
	    "repeat_1_SUITE", repeat_cs_and_grs,
	    Config).
%%%-------------------------------------------------------------------
repeat_seq(Config) when is_list(Config) ->
    execute(repeat_seq,
	    "repeat_1_SUITE", repeat_seq,
	    Config).
%%%-------------------------------------------------------------------
repeat_cs_until_any_ok(Config) when is_list(Config) ->
    execute(repeat_cs_until_any_ok,
	    "repeat_1_SUITE", repeat_cs_until_any_ok,
	    Config).
%%%-------------------------------------------------------------------
repeat_gr_until_any_ok(Config) when is_list(Config) ->
    execute(repeat_gr_until_any_ok,
	    "repeat_1_SUITE", repeat_gr_until_any_ok,
	    Config).
%%%-------------------------------------------------------------------
repeat_cs_until_any_fail(Config) when is_list(Config) ->
    execute(repeat_cs_until_any_fail,
	    "repeat_1_SUITE", repeat_cs_until_any_fail,
	    Config).
%%%-------------------------------------------------------------------
repeat_gr_until_any_fail(Config) when is_list(Config) ->
    execute(repeat_gr_until_any_fail,
	    "repeat_1_SUITE", repeat_gr_until_any_fail,
	    Config).
%%%-------------------------------------------------------------------
repeat_cs_until_all_ok(Config) when is_list(Config) ->
    execute(repeat_cs_until_all_ok,
	    "repeat_1_SUITE", repeat_cs_until_all_ok,
	    Config).
%%%-------------------------------------------------------------------
repeat_gr_until_all_ok(Config) when is_list(Config) ->
    execute(repeat_gr_until_all_ok,
	    "repeat_1_SUITE", repeat_gr_until_all_ok,
	    Config).
%%%-------------------------------------------------------------------
repeat_cs_until_all_fail(Config) when is_list(Config) ->
    execute(repeat_cs_until_all_fail,
	    "repeat_1_SUITE", repeat_cs_until_all_fail,
	    Config).
%%%-------------------------------------------------------------------
repeat_gr_until_all_fail(Config) when is_list(Config) ->
    execute(repeat_gr_until_all_fail,
	    "repeat_1_SUITE", repeat_gr_until_all_fail,
	    Config).
%%%-------------------------------------------------------------------
repeat_seq_until_any_fail(Config) when is_list(Config) ->
    execute(repeat_seq_until_any_fail,
	    "repeat_1_SUITE", repeat_seq_until_any_fail,
	    Config).
%%%-------------------------------------------------------------------
repeat_shuffled_seq_until_any_fail(Config) when is_list(Config) ->
    execute(repeat_shuffled_seq_until_any_fail,
	    "repeat_1_SUITE", repeat_shuffled_seq_until_any_fail,
	    Config).

%%%-----------------------------------------------------------------
%%% HELP FUNCTIONS
%%%-----------------------------------------------------------------
execute(TestCase, SuiteName, Group, Config) ->
    DataDir = ?config(data_dir, Config),
    Suite = filename:join(DataDir, SuiteName),

    {Opts,ERPid} = setup([{suite,Suite},{group,Group},{label,TestCase}], Config),
    ok = ct_test_support:run(Opts, Config),
    Events = ct_test_support:get_events(ERPid, Config),

    ct_test_support:log_events(TestCase,
			       reformat(Events, ?eh),
			       ?config(priv_dir, Config)),

    TestEvents = events_to_check(TestCase),
    ok = ct_test_support:verify_events(TestEvents, Events, Config).

setup(Test, Config) ->
    Opts0 = ct_test_support:get_opts(Config),
    Level = ?config(trace_level, Config),
    EvHArgs = [{cbm,ct_test_support},{trace_level,Level}],
    Opts = Opts0 ++ [{event_handler,{?eh,EvHArgs}} | Test],
    ERPid = ct_test_support:start_event_receiver(Config),
    {Opts,ERPid}.

reformat(Events, EH) ->
    ct_test_support:reformat(Events, EH).
%reformat(Events, _EH) ->
%    Events.

%%%-----------------------------------------------------------------
%%% TEST EVENTS
%%%-----------------------------------------------------------------
events_to_check(Test) ->
    %% 2 tests (ct:run_test + script_start) is default
    events_to_check(Test, 2).

events_to_check(_, 0) ->
    [];
events_to_check(Test, N) ->
    test_events(Test) ++ events_to_check(Test, N-1).

test_events(repeat_cs) ->
    [{?eh,start_logging,{'DEF','RUNDIR'}},
     {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
     {?eh,start_info,{1,1,unknown}},
     [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,repeat_cs,[]},ok}},
      [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,repeat_cs_1,[]},ok}},
       {?eh,test_stats,{2,0,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,{end_per_group,repeat_cs_1,[]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,repeat_cs_2,[{repeat,2}]},ok}},
       {?eh,test_stats,{4,0,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,{end_per_group,repeat_cs_2,[{repeat,2}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,repeat_cs_2,[]},ok}},
       {?eh,test_stats,{6,0,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,{end_per_group,repeat_cs_2,[]},ok}}],
      {?eh,tc_done,{repeat_1_SUITE,{end_per_group,repeat_cs,[]},ok}}],
     {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}];

test_events(repeat_cs_and_grs) ->
    [{?eh,start_logging,{'DEF','RUNDIR'}},
     {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
     {?eh,start_info,{1,1,unknown}},
     [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,repeat_cs_and_grs,[{repeat,2}]},ok}},
      [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,gr_ok_1,[]},ok}},
       {?eh,test_stats,{1,0,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
      {?eh,tc_done,{repeat_1_SUITE,tc_fail_1,{failed,{error,{{badmatch,2},'_'}}}}},
      {?eh,test_stats,{1,1,{0,0}}},
      [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,gr_fail_result,[]},ok}},
       {?eh,test_stats,{2,1,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_fail_result,[]},
		     {return_group_result,failed}}}],
      {?eh,test_stats,{3,1,{0,0}}},
      [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,gr_fail_init,[]},
		     {failed,{error,fails_on_purpose}}}},
       {?eh,tc_auto_skip,{repeat_1_SUITE,tc_ok_1,
			  {failed,{repeat_1_SUITE,init_per_group,
				   {'EXIT',fails_on_purpose}}}}},
       {?eh,test_stats,{3,1,{0,1}}},
       {?eh,tc_auto_skip,{repeat_1_SUITE,end_per_group,
			  {failed,{repeat_1_SUITE,init_per_group,
				   {'EXIT',fails_on_purpose}}}}}],
      {?eh,test_stats,{4,1,{0,1}}},
      {?eh,tc_done,{repeat_1_SUITE,{end_per_group,repeat_cs_and_grs,[{repeat,2}]},ok}}],
     [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,repeat_cs_and_grs,[]},ok}},
      [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,gr_ok_1,[]},ok}},
       {?eh,test_stats,{5,1,{0,1}}},
       {?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
      {?eh,tc_done,{repeat_1_SUITE,tc_fail_1,{failed,{error,{{badmatch,2},'_'}}}}},
      {?eh,test_stats,{5,2,{0,1}}},
      [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,gr_fail_result,[]},ok}},
       {?eh,test_stats,{6,2,{0,1}}},
       {?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_fail_result,[]},
		     {return_group_result,failed}}}],
      {?eh,test_stats,{7,2,{0,1}}},
      [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,gr_fail_init,[]},
		     {failed,{error,fails_on_purpose}}}},
       {?eh,tc_auto_skip,{repeat_1_SUITE,tc_ok_1,
			  {failed,{repeat_1_SUITE,init_per_group,
				   {'EXIT',fails_on_purpose}}}}},
       {?eh,test_stats,{7,2,{0,2}}},
       {?eh,tc_auto_skip,{repeat_1_SUITE,end_per_group,
			  {failed,{repeat_1_SUITE,init_per_group,
				   {'EXIT',fails_on_purpose}}}}}],
      {?eh,test_stats,{8,2,{0,2}}},
      {?eh,tc_done,{repeat_1_SUITE,{end_per_group,repeat_cs_and_grs,[]},ok}}],
     {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}
    ];

test_events(repeat_seq) ->
    [{?eh,start_logging,{'DEF','RUNDIR'}},
     {?eh,start_info,{1,1,unknown}},
     [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,repeat_seq,[]},ok}},
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_1,[sequence,{repeat,2}]},
		     ok}},
       {?eh,test_stats,{1,0,{0,0}}},
       {?eh,test_stats,{1,1,{0,0}}},
       {?eh,tc_auto_skip,{repeat_1_SUITE,tc_ok_2,
			  {failed,{repeat_1_SUITE,tc_fail_1}}}},
       {?eh,test_stats,{1,1,{0,1}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_1,[sequence,{repeat,2}]},
		     ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,repeat_seq_1,
				     [sequence]},ok}},
       {?eh,test_stats,{2,2,{0,2}}},
       {?eh,tc_done,{repeat_1_SUITE,{end_per_group,repeat_seq_1,
				     [sequence]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_2,[sequence,{repeat,2}]},
		     ok}},
       {?eh,test_stats,{3,2,{0,2}}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_result,[]},ok}},
	{?eh,test_stats,{4,2,{0,2}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,gr_fail_result,[]},
		      {return_group_result,failed}}}],
       {?eh,tc_auto_skip,{repeat_1_SUITE,tc_ok_2,
			  {group_result,gr_fail_result,failed}}},
       {?eh,test_stats,{4,2,{0,3}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_2,[sequence,{repeat,2}]},
		     ok}}],
      [{?eh,tc_done,
        {repeat_1_SUITE,{init_per_group,repeat_seq_2,[sequence]},ok}},
       {?eh,test_stats,{6,2,{0,4}}},
       {?eh,tc_done,{repeat_1_SUITE,{end_per_group,repeat_seq_2,
				     [sequence]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_3,[sequence,{repeat,2}]},
		     ok}},
       {?eh,test_stats,{7,2,{0,4}}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_init,[]},
		      {failed,{error,fails_on_purpose}}}},
	{?eh,test_stats,{7,2,{0,5}}},
	{?eh,tc_auto_skip,{repeat_1_SUITE,end_per_group,
			   {failed,
			    {repeat_1_SUITE,init_per_group,
			     {'EXIT',fails_on_purpose}}}}}],
       {?eh,tc_auto_skip,{repeat_1_SUITE,tc_ok_2,
			  {group_result,gr_fail_init,failed}}},
       {?eh,test_stats,{7,2,{0,6}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_3,[sequence,{repeat,2}]},
		     ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_3,[sequence]},ok}},
       {?eh,test_stats,{8,2,{0,8}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_3,[sequence]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_4,[sequence,{repeat,2}]},
		     ok}},
       {?eh,test_stats,{8,3,{0,8}}},
       {?eh,tc_auto_skip,{repeat_1_SUITE,
			  tc_ok_1,{failed,{repeat_1_SUITE,tc_fail_1}}}},
       {?eh,test_stats,{8,3,{0,9}}},
       {?eh,tc_auto_skip,{repeat_1_SUITE,
			  tc_ok_1,{failed,{repeat_1_SUITE,tc_fail_1}}}},
       {?eh,test_stats,{8,3,{0,10}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_4,[sequence,{repeat,2}]},
		     ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,repeat_seq_4,[sequence]},ok}},
       {?eh,test_stats,{8,4,{0,12}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_4,[sequence]},ok}}],

      {?eh,tc_done,{repeat_1_SUITE,{end_per_group,repeat_seq,[]},ok}}],
     {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}];

test_events(repeat_cs_until_any_ok) ->
    [
     {?eh,start_logging,{'DEF','RUNDIR'}},
     {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
     {?eh,start_info,{1,1,unknown}},
     [{?eh,tc_done,{repeat_1_SUITE,
		    {init_per_group,repeat_cs_until_any_ok,[]},ok}},
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_cs_until_any_ok_1,
		      [{repeat_until_any_ok,3}]},ok}},
       {?eh,test_stats,{0,2,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_then_ok_1,
		     {failed,{error,failing_this_time}}}},
       {?eh,test_stats,{0,3,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_cs_until_any_ok_1,
		      [{repeat_until_any_ok,3}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_cs_until_any_ok_1,
		      [{repeat_until_any_ok,2}]},ok}},
       {?eh,test_stats,{0,5,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_then_ok_1,ok}},
       {?eh,test_stats,{1,5,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_cs_until_any_ok_1,
		      [{repeat_until_any_ok,2}]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_cs_until_any_ok_2,
		      [{repeat_until_any_ok,3}]},ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{2,5,{0,0}}},
       {?eh,test_stats,{2,6,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_cs_until_any_ok_2,
		      [{repeat_until_any_ok,3}]},ok}}],
      {?eh,tc_done,{repeat_1_SUITE,
		    {end_per_group,repeat_cs_until_any_ok,[]},ok}}],
     {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}];

test_events(repeat_gr_until_any_ok) ->
    [{?eh,start_logging,{'DEF','RUNDIR'}},
     {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
     {?eh,start_info,{1,1,unknown}},
     [{?eh,tc_done,
       {repeat_1_SUITE,{init_per_group,repeat_gr_until_any_ok,[]},ok}},
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_any_ok_1,
		      [{repeat_until_any_ok,3}]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_result,[]},ok}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,gr_fail_result,[]},
		      {return_group_result,failed}}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_1,
		     {failed,{error,{{badmatch,2},'_'}}}}},
       {?eh,test_stats,{1,1,{0,0}}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_init,[]},
		      {failed,{error,fails_on_purpose}}}},
	{?eh,test_stats,{1,1,{0,1}}},
	{?eh,tc_auto_skip,{repeat_1_SUITE,end_per_group,
			   {failed,{repeat_1_SUITE,init_per_group,
				    {'EXIT',fails_on_purpose}}}}}],
       {?eh,test_stats,{1,2,{0,1}}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_result_then_ok,[]},ok}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,gr_fail_result_then_ok,[]},
		      {return_group_result,failed}}}],
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_any_ok_1,
		      [{repeat_until_any_ok,3}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_any_ok_1,
		      [{repeat_until_any_ok,2}]},ok}},
       %% ...
       {?eh,test_stats,{3,4,{0,2}}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_result_then_ok,[]},ok}},
         {?eh,test_stats,{4,4,{0,2}}},
        {?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,gr_fail_result_then_ok,[]},ok}}],
      {?eh,tc_done,{repeat_1_SUITE,
		    {end_per_group,repeat_gr_until_any_ok_1,
		     [{repeat_until_any_ok,2}]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_any_ok_2,
		      [{repeat_until_any_ok,3}]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,gr_fail_result,[]},
		      {return_group_result,failed}}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_1,
		     {failed,{error,{{badmatch,2},'_'}}}}},
       {?eh,test_stats,{5,5,{0,2}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_then_ok_1,
		     {failed,{error,failing_this_time}}}},
       {?eh,test_stats,{5,6,{0,2}}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_init,[]},
		      {failed,{error,fails_on_purpose}}}},
         {?eh,test_stats,{5,6,{0,3}}},
         {?eh,tc_auto_skip,{repeat_1_SUITE,end_per_group,
			    {failed,{repeat_1_SUITE,init_per_group,
				     {'EXIT',fails_on_purpose}}}}}],
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_any_ok_2,
		      [{repeat_until_any_ok,3}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_any_ok_2,
		      [{repeat_until_any_ok,2}]},ok}},
        {?eh,test_stats,{6,7,{0,3}}},
        {?eh,tc_start,{repeat_1_SUITE,tc_fail_then_ok_1}},
        {?eh,tc_done,{repeat_1_SUITE,tc_fail_then_ok_1,ok}},
        {?eh,test_stats,{7,7,{0,3}}},
        [{?eh,tc_done,{repeat_1_SUITE,
		       {init_per_group,gr_fail_init,[]},
		       {failed,{error,fails_on_purpose}}}},
	 {?eh,test_stats,{7,7,{0,4}}},
	 {?eh,tc_auto_skip,{repeat_1_SUITE,end_per_group,
			    {failed,{repeat_1_SUITE,init_per_group,
				     {'EXIT',fails_on_purpose}}}}}],
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_any_ok_2,
		      [{repeat_until_any_ok,2}]},ok}}],
      {?eh,tc_done,{repeat_1_SUITE,
		    {end_per_group,repeat_gr_until_any_ok,[]},ok}}],
     {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}];

test_events(repeat_cs_until_any_fail) ->
    [{?eh,start_logging,{'DEF','RUNDIR'}},
     {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
     {?eh,start_info,{1,1,unknown}},
     {?eh,tc_start,{repeat_1_SUITE,init_per_suite}},
     {?eh,tc_done,{repeat_1_SUITE,init_per_suite,ok}},
     [{?eh,tc_start,
       {repeat_1_SUITE,{init_per_group,repeat_cs_until_any_fail,[]}}},
      {?eh,tc_done,
       {repeat_1_SUITE,{init_per_group,repeat_cs_until_any_fail,[]},ok}},
      [{?eh,tc_start,
        {repeat_1_SUITE,
	 {init_per_group,repeat_cs_until_any_fail_1,
	  [{repeat_until_any_fail,3}]}}},
       {?eh,tc_done,
        {repeat_1_SUITE,
	 {init_per_group,repeat_cs_until_any_fail_1,
	  [{repeat_until_any_fail,3}]},
	 ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{1,0,{0,0}}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_2}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
       {?eh,test_stats,{2,0,{0,0}}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_then_fail_1}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_1,ok}},
       {?eh,test_stats,{3,0,{0,0}}},
       {?eh,tc_start,
        {repeat_1_SUITE,
	 {end_per_group,repeat_cs_until_any_fail_1,
	  [{repeat_until_any_fail,3}]}}},
       {?eh,tc_done,
        {repeat_1_SUITE,
	 {end_per_group,repeat_cs_until_any_fail_1,
	  [{repeat_until_any_fail,3}]},
	 ok}}],
      [{?eh,tc_start,
        {repeat_1_SUITE,
	 {init_per_group,repeat_cs_until_any_fail_1,
	  [{repeat_until_any_fail,2}]}}},
       {?eh,tc_done,
        {repeat_1_SUITE,
	 {init_per_group,repeat_cs_until_any_fail_1,
	  [{repeat_until_any_fail,2}]},
	 ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{4,0,{0,0}}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_2}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
       {?eh,test_stats,{5,0,{0,0}}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_then_fail_1}},
       {?eh,tc_done,
	{repeat_1_SUITE,tc_ok_then_fail_1,
	 {failed,{error,failing_this_time}}}},
       {?eh,test_stats,{5,1,{0,0}}},
       {?eh,tc_start,
        {repeat_1_SUITE,
	 {end_per_group,repeat_cs_until_any_fail_1,
	  [{repeat_until_any_fail,2}]}}},
       {?eh,tc_done,
        {repeat_1_SUITE,
	 {end_per_group,repeat_cs_until_any_fail_1,
	  [{repeat_until_any_fail,2}]},
	 ok}}],
      [{?eh,tc_start,
        {repeat_1_SUITE,
	 {init_per_group,repeat_cs_until_any_fail_2,
	  [{repeat_until_any_fail,3}]}}},
       {?eh,tc_done,
        {repeat_1_SUITE,
	 {init_per_group,repeat_cs_until_any_fail_2,
	  [{repeat_until_any_fail,3}]},
	 ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_fail_1}},
       {?eh,tc_done,
	{repeat_1_SUITE,tc_fail_1,
	 {failed,
	  {error,
	   {{badmatch,2},
	    [{repeat_1_SUITE,tc_fail_1,1},
	     {repeat_1_SUITE,tc_fail_1,1},
	     {test_server,my_apply,3},
	     {test_server,ts_tc,3},
	     {test_server,run_test_case_eval1,6},
	     {test_server,run_test_case_eval,8}]}}}}},
       {?eh,test_stats,{5,2,{0,0}}},
       {?eh,tc_start,{repeat_1_SUITE,tc_fail_2}},
       {?eh,tc_done,
	{repeat_1_SUITE,tc_fail_2,{failed,{error,exit_on_purpose}}}},
       {?eh,test_stats,{5,3,{0,0}}},
       {?eh,tc_start,
        {repeat_1_SUITE,
	 {end_per_group,repeat_cs_until_any_fail_2,
	  [{repeat_until_any_fail,3}]}}},
       {?eh,tc_done,
        {repeat_1_SUITE,
	 {end_per_group,repeat_cs_until_any_fail_2,
	  [{repeat_until_any_fail,3}]},
	 ok}}],
      {?eh,tc_start,
       {repeat_1_SUITE,{end_per_group,repeat_cs_until_any_fail,[]}}},
      {?eh,tc_done,
       {repeat_1_SUITE,{end_per_group,repeat_cs_until_any_fail,[]},ok}}],
     {?eh,tc_start,{repeat_1_SUITE,end_per_suite}},
     {?eh,tc_done,{repeat_1_SUITE,end_per_suite,ok}},
     {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}];

test_events(repeat_gr_until_any_fail) ->
    [{?eh,start_logging,{'DEF','RUNDIR'}},
 {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
 {?eh,start_info,{1,1,unknown}},
 {?eh,tc_start,{repeat_1_SUITE,init_per_suite}},
 {?eh,tc_done,{repeat_1_SUITE,init_per_suite,ok}},
 [{?eh,tc_start,
      {repeat_1_SUITE,{init_per_group,repeat_gr_until_any_fail,[]}}},
  {?eh,tc_done,
      {repeat_1_SUITE,{init_per_group,repeat_gr_until_any_fail,[]},ok}},
   [{?eh,tc_start,
        {repeat_1_SUITE,
            {init_per_group,repeat_gr_until_any_fail_1,
                [{repeat_until_any_fail,3}]}}},
    {?eh,tc_done,
        {repeat_1_SUITE,
            {init_per_group,repeat_gr_until_any_fail_1,
                [{repeat_until_any_fail,3}]},
            ok}},
     [{?eh,tc_start,
                          {repeat_1_SUITE,{init_per_group,gr_ok_1,[]}}},
      {?eh,tc_done,
                          {repeat_1_SUITE,{init_per_group,gr_ok_1,[]},ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{1,0,{0,0}}},
      {?eh,tc_start,
                          {repeat_1_SUITE,{end_per_group,gr_ok_1,[]}}},
      {?eh,tc_done,
                          {repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
     {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
     {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
     {?eh,test_stats,{2,0,{0,0}}},
     [{?eh,tc_start,
          {repeat_1_SUITE,{init_per_group,gr_ok_then_fail_result,[]}}},
      {?eh,tc_done,
          {repeat_1_SUITE,{init_per_group,gr_ok_then_fail_result,[]},ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{3,0,{0,0}}},
      {?eh,tc_start,
          {repeat_1_SUITE,{end_per_group,gr_ok_then_fail_result,[]}}},
      {?eh,tc_done,
          {repeat_1_SUITE,{end_per_group,gr_ok_then_fail_result,[]},ok}}],
     {?eh,tc_start,{repeat_1_SUITE,tc_ok_2}},
     {?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
     {?eh,test_stats,{4,0,{0,0}}},
    {?eh,tc_start,
        {repeat_1_SUITE,
            {end_per_group,repeat_gr_until_any_fail_1,
                [{repeat_until_any_fail,3}]}}},
    {?eh,tc_done,
        {repeat_1_SUITE,
            {end_per_group,repeat_gr_until_any_fail_1,
                [{repeat_until_any_fail,3}]},
            ok}}],
   [{?eh,tc_start,
        {repeat_1_SUITE,
            {init_per_group,repeat_gr_until_any_fail_1,
                [{repeat_until_any_fail,2}]}}},
    {?eh,tc_done,
        {repeat_1_SUITE,
            {init_per_group,repeat_gr_until_any_fail_1,
                [{repeat_until_any_fail,2}]},
            ok}},
     [{?eh,tc_start,
                          {repeat_1_SUITE,{init_per_group,gr_ok_1,[]}}},
      {?eh,tc_done,
                          {repeat_1_SUITE,{init_per_group,gr_ok_1,[]},ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{5,0,{0,0}}},
      {?eh,tc_start,
                          {repeat_1_SUITE,{end_per_group,gr_ok_1,[]}}},
      {?eh,tc_done,
                          {repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
     {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
     {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
     {?eh,test_stats,{6,0,{0,0}}},
     [{?eh,tc_start,
          {repeat_1_SUITE,{init_per_group,gr_ok_then_fail_result,[]}}},
      {?eh,tc_done,
          {repeat_1_SUITE,{init_per_group,gr_ok_then_fail_result,[]},ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{7,0,{0,0}}},
      {?eh,tc_start,
          {repeat_1_SUITE,{end_per_group,gr_ok_then_fail_result,[]}}},
      {?eh,tc_done,
          {repeat_1_SUITE,
              {end_per_group,gr_ok_then_fail_result,[]},
              {return_group_result,failed}}}],
     {?eh,tc_start,{repeat_1_SUITE,tc_ok_2}},
     {?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
     {?eh,test_stats,{8,0,{0,0}}},
    {?eh,tc_start,
        {repeat_1_SUITE,
            {end_per_group,repeat_gr_until_any_fail_1,
                [{repeat_until_any_fail,2}]}}},
    {?eh,tc_done,
        {repeat_1_SUITE,
            {end_per_group,repeat_gr_until_any_fail_1,
                [{repeat_until_any_fail,2}]},
            ok}}],
   [{?eh,tc_start,
        {repeat_1_SUITE,
            {init_per_group,repeat_gr_until_any_fail_2,
                [{repeat_until_any_fail,3}]}}},
    {?eh,tc_done,
        {repeat_1_SUITE,
            {init_per_group,repeat_gr_until_any_fail_2,
                [{repeat_until_any_fail,3}]},
            ok}},
     [{?eh,tc_start,
                          {repeat_1_SUITE,{init_per_group,gr_ok_1,[]}}},
      {?eh,tc_done,
                          {repeat_1_SUITE,{init_per_group,gr_ok_1,[]},ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{9,0,{0,0}}},
      {?eh,tc_start,
                          {repeat_1_SUITE,{end_per_group,gr_ok_1,[]}}},
      {?eh,tc_done,
                          {repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
     {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
     {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
     {?eh,test_stats,{10,0,{0,0}}},
     [{?eh,tc_start,
          {repeat_1_SUITE,{init_per_group,gr_ok_then_fail_init,[]}}},
      {?eh,tc_done,
          {repeat_1_SUITE,{init_per_group,gr_ok_then_fail_init,[]},ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{11,0,{0,0}}},
      {?eh,tc_start,
          {repeat_1_SUITE,{end_per_group,gr_ok_then_fail_init,[]}}},
      {?eh,tc_done,
          {repeat_1_SUITE,{end_per_group,gr_ok_then_fail_init,[]},ok}}],
     {?eh,tc_start,{repeat_1_SUITE,tc_ok_2}},
     {?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
     {?eh,test_stats,{12,0,{0,0}}},
    {?eh,tc_start,
        {repeat_1_SUITE,
            {end_per_group,repeat_gr_until_any_fail_2,
                [{repeat_until_any_fail,3}]}}},
    {?eh,tc_done,
        {repeat_1_SUITE,
            {end_per_group,repeat_gr_until_any_fail_2,
                [{repeat_until_any_fail,3}]},
            ok}}],
   [{?eh,tc_start,
        {repeat_1_SUITE,
            {init_per_group,repeat_gr_until_any_fail_2,
                [{repeat_until_any_fail,2}]}}},
    {?eh,tc_done,
        {repeat_1_SUITE,
            {init_per_group,repeat_gr_until_any_fail_2,
                [{repeat_until_any_fail,2}]},
            ok}},
     [{?eh,tc_start,
                          {repeat_1_SUITE,{init_per_group,gr_ok_1,[]}}},
      {?eh,tc_done,
                          {repeat_1_SUITE,{init_per_group,gr_ok_1,[]},ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{13,0,{0,0}}},
      {?eh,tc_start,
                          {repeat_1_SUITE,{end_per_group,gr_ok_1,[]}}},
      {?eh,tc_done,
                          {repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
     {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
     {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
     {?eh,test_stats,{14,0,{0,0}}},
     [{?eh,tc_start,
          {repeat_1_SUITE,{init_per_group,gr_ok_then_fail_init,[]}}},
      {?eh,tc_done,
          {repeat_1_SUITE,
              {init_per_group,gr_ok_then_fail_init,[]},
              {failed,{error,failing_this_time}}}},
       {?eh,tc_auto_skip,
           {repeat_1_SUITE,tc_ok_1,
               {failed,
                   {repeat_1_SUITE,init_per_group,
                       {'EXIT',failing_this_time}}}}},
       {?eh,test_stats,{14,0,{0,1}}},
       {?eh,tc_auto_skip,
           {repeat_1_SUITE,end_per_group,
               {failed,
                   {repeat_1_SUITE,init_per_group,
                       {'EXIT',failing_this_time}}}}}],
      {?eh,tc_start,{repeat_1_SUITE,tc_ok_2}},
      {?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
      {?eh,test_stats,{15,0,{0,1}}},
     {?eh,tc_start,
         {repeat_1_SUITE,
             {end_per_group,repeat_gr_until_any_fail_2,
                 [{repeat_until_any_fail,2}]}}},
     {?eh,tc_done,
         {repeat_1_SUITE,
             {end_per_group,repeat_gr_until_any_fail_2,
                 [{repeat_until_any_fail,2}]},
             ok}}],
    [{?eh,tc_start,
         {repeat_1_SUITE,
             {init_per_group,repeat_gr_until_any_fail_3,
                 [{repeat_until_any_fail,3}]}}},
     {?eh,tc_done,
         {repeat_1_SUITE,
             {init_per_group,repeat_gr_until_any_fail_3,
                 [{repeat_until_any_fail,3}]},
             ok}},
      {?eh,tc_start,{repeat_1_SUITE,tc_ok_then_fail_1}},
      {?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_1,ok}},
      {?eh,test_stats,{16,0,{0,1}}},
      [{?eh,tc_start,
                           {repeat_1_SUITE,{init_per_group,gr_ok_1,[]}}},
       {?eh,tc_done,
                           {repeat_1_SUITE,{init_per_group,gr_ok_1,[]},ok}},
        {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
        {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
        {?eh,test_stats,{17,0,{0,1}}},
       {?eh,tc_start,
                           {repeat_1_SUITE,{end_per_group,gr_ok_1,[]}}},
       {?eh,tc_done,
                           {repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
      {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
      {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
      {?eh,test_stats,{18,0,{0,1}}},
     {?eh,tc_start,
         {repeat_1_SUITE,
             {end_per_group,repeat_gr_until_any_fail_3,
                 [{repeat_until_any_fail,3}]}}},
     {?eh,tc_done,
         {repeat_1_SUITE,
             {end_per_group,repeat_gr_until_any_fail_3,
                 [{repeat_until_any_fail,3}]},
             ok}}],
    [{?eh,tc_start,
         {repeat_1_SUITE,
             {init_per_group,repeat_gr_until_any_fail_3,
                 [{repeat_until_any_fail,2}]}}},
     {?eh,tc_done,
         {repeat_1_SUITE,
             {init_per_group,repeat_gr_until_any_fail_3,
                 [{repeat_until_any_fail,2}]},
             ok}},
      {?eh,tc_start,{repeat_1_SUITE,tc_ok_then_fail_1}},
      {?eh,tc_done,
          {repeat_1_SUITE,tc_ok_then_fail_1,
              {failed,{error,failing_this_time}}}},
      {?eh,test_stats,{18,1,{0,1}}},
      [{?eh,tc_start,
                           {repeat_1_SUITE,{init_per_group,gr_ok_1,[]}}},
       {?eh,tc_done,
                           {repeat_1_SUITE,{init_per_group,gr_ok_1,[]},ok}},
        {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
        {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
        {?eh,test_stats,{19,1,{0,1}}},
       {?eh,tc_start,
                           {repeat_1_SUITE,{end_per_group,gr_ok_1,[]}}},
       {?eh,tc_done,
                           {repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
      {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
      {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
      {?eh,test_stats,{20,1,{0,1}}},
     {?eh,tc_start,
         {repeat_1_SUITE,
             {end_per_group,repeat_gr_until_any_fail_3,
                 [{repeat_until_any_fail,2}]}}},
     {?eh,tc_done,
         {repeat_1_SUITE,
             {end_per_group,repeat_gr_until_any_fail_3,
                 [{repeat_until_any_fail,2}]},
             ok}}],
   {?eh,tc_start,
       {repeat_1_SUITE,{end_per_group,repeat_gr_until_any_fail,[]}}},
   {?eh,tc_done,
       {repeat_1_SUITE,{end_per_group,repeat_gr_until_any_fail,[]},ok}}],
  {?eh,tc_start,{repeat_1_SUITE,end_per_suite}},
  {?eh,tc_done,{repeat_1_SUITE,end_per_suite,ok}},
  {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}];

test_events(repeat_cs_until_all_ok) ->
    [{?eh,start_logging,{'DEF','RUNDIR'}},
     {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
     {?eh,start_info,{1,1,unknown}},
     [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,repeat_cs_until_all_ok,[]},ok}},
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_cs_until_all_ok_1,
		      [{repeat_until_all_ok,3}]},ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_then_ok_1,
		     {failed,{error,failing_this_time}}}},
       {?eh,test_stats,{0,1,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{1,1,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_then_ok_2,
		     {failed,{error,failing_this_time}}}},
       {?eh,test_stats,{1,2,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_cs_until_all_ok_1,
		      [{repeat_until_all_ok,3}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_cs_until_all_ok_1,
		      [{repeat_until_all_ok,2}]},ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_then_ok_1,ok}},
       {?eh,test_stats,{2,2,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{3,2,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_then_ok_2,ok}},
       {?eh,test_stats,{4,2,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_cs_until_all_ok_1,
		      [{repeat_until_all_ok,2}]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_cs_until_all_ok_2,
		      [{repeat_until_all_ok,3}]},ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
       {?eh,test_stats,{6,2,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_cs_until_all_ok_2,
		      [{repeat_until_all_ok,3}]},ok}}],

      {?eh,tc_done,{repeat_1_SUITE,
		    {end_per_group,repeat_cs_until_all_ok,[]},ok}}],
     {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}];

test_events(repeat_gr_until_all_ok) ->
    [{?eh,start_logging,{'DEF','RUNDIR'}},
     {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
     {?eh,start_info,{1,1,unknown}},
     [{?eh,tc_done,{repeat_1_SUITE,
		    {init_per_group,repeat_gr_until_all_ok,[]},ok}},
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_all_ok_1,
		      [{repeat_until_all_ok,3}]},ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{1,0,{0,0}}},
       [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,gr_ok_1,[]},ok}},
	{?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
	{?eh,test_stats,{2,0,{0,0}}},
	{?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_then_ok_1,
		     {failed,{error,failing_this_time}}}},
       {?eh,test_stats,{2,1,{0,0}}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_result_then_ok,[]},ok}},
	{?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
	{?eh,test_stats,{3,1,{0,0}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,gr_fail_result_then_ok,[]},
		      {return_group_result,failed}}}],
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_all_ok_1,
		      [{repeat_until_all_ok,3}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_all_ok_1,
		      [{repeat_until_all_ok,2}]},ok}},
       {?eh,test_stats,{5,1,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_then_ok_1,ok}},
       {?eh,test_stats,{6,1,{0,0}}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_result_then_ok,[]},ok}},
	{?eh,test_stats,{7,1,{0,0}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,gr_fail_result_then_ok,[]},ok}}],
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_all_ok_1,
		      [{repeat_until_all_ok,2}]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_all_ok_2,
		      [{repeat_until_all_ok,3}]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_init_then_ok,[]},
		      {failed,{error,failing_this_time}}}},
	{?eh,tc_auto_skip,{repeat_1_SUITE,tc_ok_1,
			   {failed,{repeat_1_SUITE,init_per_group,
				    {'EXIT',failing_this_time}}}}},
	{?eh,test_stats,{7,1,{0,1}}},
	{?eh,tc_auto_skip,{repeat_1_SUITE,end_per_group,
			   {failed,{repeat_1_SUITE,init_per_group,
				    {'EXIT',failing_this_time}}}}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{8,1,{0,1}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_all_ok_2,
		      [{repeat_until_all_ok,3}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_all_ok_2,
		      [{repeat_until_all_ok,2}]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_init_then_ok,[]},ok}},
        {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
        {?eh,test_stats,{9,1,{0,1}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,gr_fail_init_then_ok,[]},ok}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{10,1,{0,1}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_all_ok_2,
		      [{repeat_until_all_ok,2}]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_all_ok_3,
		      [{repeat_until_all_ok,3}]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,gr_ok_1,[]},ok}},
        {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
        {?eh,test_stats,{11,1,{0,1}}},
	{?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_then_ok_1,
		     {failed,{error,failing_this_time}}}},
       {?eh,test_stats,{11,2,{0,1}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_all_ok_3,
		      [{repeat_until_all_ok,3}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_all_ok_3,
		      [{repeat_until_all_ok,2}]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,gr_ok_1,[]},ok}},
        {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
        {?eh,test_stats,{12,2,{0,1}}},
	{?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_then_ok_1,ok}},
       {?eh,test_stats,{13,2,{0,1}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_all_ok_3,
		      [{repeat_until_all_ok,2}]},ok}}],

      {?eh,tc_done,{repeat_1_SUITE,
		    {end_per_group,repeat_gr_until_all_ok,[]},ok}}],
     {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}];

test_events(repeat_cs_until_all_fail) ->
    [{?eh,start_logging,{'DEF','RUNDIR'}},
     {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
     {?eh,start_info,{1,1,unknown}},
     [{?eh,tc_done,{repeat_1_SUITE,
		    {init_per_group,repeat_cs_until_all_fail,[]},ok}},
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_cs_until_all_fail_1,
		      [{repeat_until_all_fail,3}]},ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_1,ok}},
       {?eh,test_stats,{1,0,{0,0}}},
       {?eh,tc_start,{repeat_1_SUITE,tc_fail_1}},
       {?eh,test_stats,{1,1,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_2,ok}},
       {?eh,test_stats,{2,1,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_cs_until_all_fail_1,
		      [{repeat_until_all_fail,3}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_cs_until_all_fail_1,
		      [{repeat_until_all_fail,2}]},ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_1,
		     {failed,{error,failing_this_time}}}},
       {?eh,test_stats,{2,2,{0,0}}},
       {?eh,tc_start,{repeat_1_SUITE,tc_fail_1}},
       {?eh,test_stats,{2,3,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_2,
		     {failed,{error,failing_this_time}}}},
       {?eh,test_stats,{2,4,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_cs_until_all_fail_1,
		      [{repeat_until_all_fail,2}]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_cs_until_all_fail_2,
		      [{repeat_until_all_fail,3}]},ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_fail_1}},
       {?eh,test_stats,{2,5,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_cs_until_all_fail_2,
		      [{repeat_until_all_fail,3}]},ok}}],
      {?eh,tc_done,{repeat_1_SUITE,
		    {end_per_group,repeat_cs_until_all_fail,[]},ok}}],

     {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}];

test_events(repeat_gr_until_all_fail) ->
    [{?eh,start_logging,{'DEF','RUNDIR'}},
     {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
     {?eh,start_info,{1,1,unknown}},
     [{?eh,tc_done,{repeat_1_SUITE,
		    {init_per_group,repeat_gr_until_all_fail,[]},ok}},
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_all_fail_1,
		      [{repeat_until_all_fail,3}]},ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_fail_1}},
       {?eh,test_stats,{0,1,{0,0}}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_init,[]},
		      {failed,{error,fails_on_purpose}}}},
	{?eh,test_stats,{0,1,{0,1}}},
	{?eh,tc_auto_skip,{repeat_1_SUITE,end_per_group,
			   {failed,{repeat_1_SUITE,init_per_group,
				    {'EXIT',fails_on_purpose}}}}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_1,ok}},
       {?eh,test_stats,{1,1,{0,1}}},
       [{?eh,tc_done,{repeat_1_SUITE,{end_per_group,
				      gr_ok_then_fail_result,[]},ok}}],
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_all_fail_1,
		      [{repeat_until_all_fail,3}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_all_fail_1,
		      [{repeat_until_all_fail,2}]},ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_fail_1}},
       {?eh,test_stats,{2,2,{0,1}}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_init,[]},
		      {failed,{error,fails_on_purpose}}}},
        {?eh,test_stats,{2,2,{0,2}}},
        {?eh,tc_auto_skip,{repeat_1_SUITE,end_per_group,
			   {failed,{repeat_1_SUITE,init_per_group,
				    {'EXIT',fails_on_purpose}}}}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_1,
		     {failed,{error,failing_this_time}}}},
       {?eh,test_stats,{2,3,{0,2}}},
       [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,
				      gr_ok_then_fail_result,[]},ok}},
	{?eh,test_stats,{3,3,{0,2}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,gr_ok_then_fail_result,[]},
		      {return_group_result,failed}}}],
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_all_fail_1,
		      [{repeat_until_all_fail,2}]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_all_fail_2,
		      [{repeat_until_all_fail,3}]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_then_fail_init,[]},ok}}],
       {?eh,tc_start,{repeat_1_SUITE,tc_fail_1}},
       {?eh,test_stats,{4,4,{0,2}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_all_fail_2,
		      [{repeat_until_all_fail,3}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_all_fail_2,
		      [{repeat_until_all_fail,2}]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_ok_then_fail_init,[]},
		      {failed,{error,failing_this_time}}}},
	{?eh,test_stats,{4,4,{0,3}}},
	{?eh,tc_auto_skip,{repeat_1_SUITE,end_per_group,
			   {failed,{repeat_1_SUITE,init_per_group,
				    {'EXIT',failing_this_time}}}}}],
       {?eh,tc_start,{repeat_1_SUITE,tc_fail_1}},
       {?eh,test_stats,{4,5,{0,3}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_all_fail_2,
		      [{repeat_until_all_fail,2}]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_all_fail_3,
		      [{repeat_until_all_fail,3}]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,gr_fail_result,[]},
		      {return_group_result,failed}}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_1,ok}},
       {?eh,test_stats,{6,5,{0,3}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_all_fail_3,
		      [{repeat_until_all_fail,3}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_all_fail_3,
		      [{repeat_until_all_fail,2}]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,gr_fail_result,[]},
		      {return_group_result,failed}}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_1,
		     {failed,{error,failing_this_time}}}},
       {?eh,test_stats,{7,6,{0,3}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_all_fail_3,
		      [{repeat_until_all_fail,2}]},ok}}],
      {?eh,tc_done,{repeat_1_SUITE,
		    {end_per_group,repeat_gr_until_all_fail,[]},ok}}],
     {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}];

test_events(repeat_seq_until_any_fail) ->
    [{?eh,start_logging,{'DEF','RUNDIR'}},
     {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
     {?eh,start_info,{1,1,unknown}},

     [{?eh,tc_done,{repeat_1_SUITE,
		    {init_per_group,repeat_seq_until_any_fail,[]},ok}},
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_until_any_fail_1,
		      [sequence,{repeat_until_any_fail,2}]},ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
       {?eh,test_stats,{2,0,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_until_any_fail_1,
		      [sequence,{repeat_until_any_fail,2}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,
		      repeat_seq_until_any_fail_1,[sequence]},ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
       {?eh,test_stats,{4,0,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,
		      repeat_seq_until_any_fail_1,[sequence]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_until_any_fail_2,
		      [{repeat_until_any_fail,2},sequence]},ok}},
       {?eh,test_stats,{5,0,{0,0}}},
       [{?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
       {?eh,test_stats,{7,0,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_until_any_fail_2,
		      [{repeat_until_any_fail,2},sequence]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_until_any_fail_2,[sequence]},
		     ok}},
       {?eh,test_stats,{8,0,{0,0}}},
       [{?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
       {?eh,test_stats,{10,0,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_until_any_fail_2,[sequence]},
		     ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_until_any_fail_3,
		      [sequence,{repeat_until_any_fail,3}]},ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{11,0,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_1,ok}},
       {?eh,test_stats,{12,0,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
       {?eh,test_stats,{13,0,{0,0}}},
       [{?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_until_any_fail_3,
		      [sequence,{repeat_until_any_fail,3}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_until_any_fail_3,
		      [{repeat_until_any_fail,2},sequence]},ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{15,0,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_1,
		     {failed,{error,failing_this_time}}}},
       {?eh,test_stats,{15,1,{0,0}}},
       {?eh,tc_auto_skip,{repeat_1_SUITE,tc_ok_2,
			  {failed,{repeat_1_SUITE,tc_ok_then_fail_1}}}},
       {?eh,test_stats,{15,1,{0,1}}},
       {?eh,tc_auto_skip,{repeat_1_SUITE,tc_ok_1,
			  {failed,{repeat_1_SUITE,tc_ok_then_fail_1}}}},
       {?eh,test_stats,{15,1,{0,2}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_until_any_fail_3,
		      [{repeat_until_any_fail,2},sequence]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_until_any_fail_4,
		      [{repeat_until_any_fail,3},sequence]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,{end_per_group,
				      gr_ok_then_fail_result,[]},ok}}],
       [{?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{18,1,{0,2}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_until_any_fail_4,
		      [{repeat_until_any_fail,3},sequence]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_until_any_fail_4,
		      [{repeat_until_any_fail,2},sequence]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,gr_ok_then_fail_result,[]},
		      {return_group_result,failed}}}],
       {?eh,tc_auto_skip,{repeat_1_SUITE,tc_ok_1,
			  {group_result,gr_ok_then_fail_result,failed}}},
       {?eh,test_stats,{19,1,{0,3}}},
       {?eh,tc_auto_skip,{repeat_1_SUITE,tc_ok_1,
			  {group_result,gr_ok_then_fail_result,failed}}},
       {?eh,test_stats,{19,1,{0,4}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_until_any_fail_4,
		      [{repeat_until_any_fail,2},sequence]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_until_any_fail_5,
		      [{repeat_until_any_fail,3},sequence]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
       [{?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_then_fail_init,[]},ok}}],
       [{?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_2,[]},ok}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{23,1,{0,4}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_until_any_fail_5,
		      [{repeat_until_any_fail,3},sequence]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_until_any_fail_5,
		      [{repeat_until_any_fail,2},sequence]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_ok_then_fail_init,[]},
		      {failed,{error,failing_this_time}}}},
	{?eh,test_stats,{24,1,{0,5}}},
	{?eh,tc_auto_skip,{repeat_1_SUITE,end_per_group,
			   {failed,{repeat_1_SUITE,init_per_group,
				    {'EXIT',failing_this_time}}}}}],
       {?eh,tc_auto_skip,{repeat_1_SUITE,tc_ok_1,
			  {group_result,gr_ok_then_fail_init,failed}}},
       {?eh,test_stats,{24,1,{0,6}}},
      {?eh,tc_auto_skip,{repeat_1_SUITE,tc_ok_1,
			 {group_result,gr_ok_then_fail_init,failed}}},
       {?eh,test_stats,{24,1,{0,7}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_until_any_fail_5,
		      [{repeat_until_any_fail,2},sequence]},ok}}],
      {?eh,tc_done,{repeat_1_SUITE,
		    {end_per_group,repeat_seq_until_any_fail,[]},ok}}],

     {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}];

%%! Note that when testing shuffled groups, ct_test_support expects
%%! both the start and done event for cases and init/end_per_group
test_events(repeat_shuffled_seq_until_any_fail) ->
    [{?eh,start_logging,{'DEF','RUNDIR'}},
     {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
     {?eh,start_info,{1,1,unknown}},

     [{?eh,tc_done,{repeat_1_SUITE,
		    {init_per_group,repeat_shuffled_seq_until_any_fail,[]},
		    ok}},

      {shuffle,
       [{?eh,tc_start,{repeat_1_SUITE,
		       {init_per_group,repeat_shuffled_seq_until_any_fail_1,
			[{shuffle,'_'},sequence,
			 {repeat_until_any_fail,2}]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_1,
		       [{shuffle,'_'},sequence,
			{repeat_until_any_fail,2}]},ok}},
	{?eh,test_stats,{2,0,{0,0}}},
	{?eh,tc_start,{repeat_1_SUITE,
		       {end_per_group,repeat_shuffled_seq_until_any_fail_1,
			[sequence,shuffle,{repeat_until_any_fail,2}]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,repeat_shuffled_seq_until_any_fail_1,
		       [sequence,shuffle,{repeat_until_any_fail,2}]},ok}}]},
      {shuffle,
       [{?eh,tc_start,{repeat_1_SUITE,
		       {init_per_group,repeat_shuffled_seq_until_any_fail_1,
			[{shuffle,'_'},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_1,
		       [{shuffle,'_'},sequence]},ok}},
	{?eh,test_stats,{4,0,{0,0}}},
	{?eh,tc_start,{repeat_1_SUITE,
		      {end_per_group,repeat_shuffled_seq_until_any_fail_1,
		       [{shuffle,repeated},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,repeat_shuffled_seq_until_any_fail_1,
		       [{shuffle,repeated},sequence]},ok}}]},

      {shuffle,
       [{?eh,tc_start,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_2,
		       [{shuffle,{1,2,3}},{repeat_until_any_fail,2},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_2,
		       [{shuffle,{1,2,3}},{repeat_until_any_fail,2},sequence]},
		      ok}},
	{?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
	{?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
	{?eh,tc_start,{repeat_1_SUITE,tc_ok_2}},
	{?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
	[{?eh,tc_start,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]}}},
	 {?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
	{?eh,test_stats,{7,0,{0,0}}},
	{?eh,tc_start,{repeat_1_SUITE,
		       {end_per_group,repeat_shuffled_seq_until_any_fail_2,
			[{repeat_until_any_fail,2},{shuffle,{1,2,3}},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,repeat_shuffled_seq_until_any_fail_2,
		       [{repeat_until_any_fail,2},{shuffle,{1,2,3}},sequence]},
		      ok}}]},
      {shuffle,
       [{?eh,tc_start,{repeat_1_SUITE,
		       {init_per_group,repeat_shuffled_seq_until_any_fail_2,
			[{shuffle,'_'},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_2,
		       [{shuffle,'_'},sequence]},ok}},
	{?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
	{?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
	{?eh,tc_start,{repeat_1_SUITE,tc_ok_2}},
	{?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
	[{?eh,tc_start,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]}}},
	 {?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
	{?eh,tc_start,{repeat_1_SUITE,
		       {end_per_group,repeat_shuffled_seq_until_any_fail_2,
			[{shuffle,repeated},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,repeat_shuffled_seq_until_any_fail_2,
		       [{shuffle,repeated},sequence]},ok}}]},

      {shuffle,
       [{?eh,tc_start,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_3,
		       [{shuffle,'_'},sequence,
			{repeat_until_any_fail,3}]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_3,
		       [{shuffle,'_'},sequence,
			{repeat_until_any_fail,3}]},ok}},
	{?eh,tc_start,{repeat_1_SUITE,tc_ok_then_fail_1}},
	{?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_1,ok}},
	{?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
	{?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
	{?eh,tc_start,{repeat_1_SUITE,tc_ok_2}},
	{?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
	[{?eh,tc_start,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]}}},
	 {?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
	{?eh,test_stats,{14,0,{0,0}}},
	{?eh,tc_start,{repeat_1_SUITE,
		       {end_per_group,repeat_shuffled_seq_until_any_fail_3,
			[shuffle,sequence,{repeat_until_any_fail,3}]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,repeat_shuffled_seq_until_any_fail_3,
		       [shuffle,sequence,{repeat_until_any_fail,3}]},ok}}]},
      {shuffle,
       [{?eh,tc_start,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_3,
		       [{shuffle,'_'},{repeat_until_any_fail,2},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_3,
		       [{shuffle,'_'},{repeat_until_any_fail,2},sequence]},
		      ok}},
	{?eh,tc_start,{repeat_1_SUITE,tc_ok_then_fail_1}},
	{?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_1,
		      {failed,{error,failing_this_time}}}},
	{?eh,tc_start,{repeat_1_SUITE,
		      {end_per_group,repeat_shuffled_seq_until_any_fail_3,
		       [{shuffle,repeated},{repeat_until_any_fail,2},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,repeat_shuffled_seq_until_any_fail_3,
		       [{shuffle,repeated},{repeat_until_any_fail,2},sequence]},
		      ok}}]},

      {shuffle,
       [{?eh,tc_start,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_4,
		       [{shuffle,{1,2,3}},{repeat_until_any_fail,3},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_4,
		       [{shuffle,{1,2,3}},{repeat_until_any_fail,3},sequence]},
		      ok}},
	{?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
	{?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
	[{?eh,tc_start,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]}}},
	 {?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
	[{?eh,tc_start,{repeat_1_SUITE,{end_per_group,
					gr_ok_then_fail_result,[]}}},
	 {?eh,tc_done,{repeat_1_SUITE,{end_per_group,
				       gr_ok_then_fail_result,[]},ok}}],
	{?eh,tc_start,{repeat_1_SUITE,
		       {end_per_group,repeat_shuffled_seq_until_any_fail_4,
			[{repeat_until_any_fail,3},sequence,{shuffle,{1,2,3}}]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,repeat_shuffled_seq_until_any_fail_4,
		       [{repeat_until_any_fail,3},sequence,{shuffle,{1,2,3}}]},
		      ok}}]},
      {shuffle,
       [{?eh,tc_start,{repeat_1_SUITE,
		       {init_per_group,repeat_shuffled_seq_until_any_fail_4,
			[{shuffle,'_'},{repeat_until_any_fail,2},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_4,
		       [{shuffle,'_'},{repeat_until_any_fail,2},sequence]},
		      ok}},
	[{?eh,tc_start,{repeat_1_SUITE,
			{end_per_group,gr_ok_then_fail_result,[]}}},
	 {?eh,tc_done,{repeat_1_SUITE,
		       {end_per_group,gr_ok_then_fail_result,[]},
		       {return_group_result,failed}}}],
	{?eh,tc_start,{repeat_1_SUITE,
		       {end_per_group,repeat_shuffled_seq_until_any_fail_4,
			[{shuffle,repeated},{repeat_until_any_fail,2},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,repeat_shuffled_seq_until_any_fail_4,
		       [{shuffle,repeated},{repeat_until_any_fail,2},sequence]},
		      ok}}]},

      {shuffle,
       [{?eh,tc_start,{repeat_1_SUITE,
		       {init_per_group,repeat_shuffled_seq_until_any_fail_5,
			[{shuffle,{1,2,3}},{repeat_until_any_fail,3},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_5,
		       [{shuffle,{1,2,3}},{repeat_until_any_fail,3},sequence]},
		      ok}},
	{?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
	{?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
	[{?eh,tc_start,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]}}},
	 {?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
	[{?eh,tc_start,{repeat_1_SUITE,{end_per_group,gr_ok_2,[]}}},
	 {?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_2,[]},ok}}],
	[{?eh,tc_start,{repeat_1_SUITE,{end_per_group,
					gr_ok_then_fail_init,[]}}},
	 {?eh,tc_done,{repeat_1_SUITE,{end_per_group,
				       gr_ok_then_fail_init,[]},ok}}],
	{?eh,tc_start,{repeat_1_SUITE,
		       {end_per_group,repeat_shuffled_seq_until_any_fail_5,
			[{repeat_until_any_fail,3},sequence,{shuffle,{1,2,3}}]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,repeat_shuffled_seq_until_any_fail_5,
		       [{repeat_until_any_fail,3},sequence,{shuffle,{1,2,3}}]},
		      ok}}]},
      {shuffle,
       [{?eh,tc_start,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_5,
		       [{shuffle,'_'},{repeat_until_any_fail,2},
			sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_5,
		       [{shuffle,'_'},{repeat_until_any_fail,2},
			sequence]},ok}},
	[{?eh,tc_auto_skip,{repeat_1_SUITE,end_per_group,
			    {failed,{repeat_1_SUITE,init_per_group,
				     {'EXIT',failing_this_time}}}}}],
	{?eh,tc_start,{repeat_1_SUITE,
		       {end_per_group,repeat_shuffled_seq_until_any_fail_5,
			[{shuffle,repeated},{repeat_until_any_fail,2},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,repeat_shuffled_seq_until_any_fail_5,
		       [{shuffle,repeated},{repeat_until_any_fail,2},sequence]},
		      ok}}]},

       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_shuffled_seq_until_any_fail,[]},
		     ok}}],
     {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}].