From c0d8b96f24daf842f87d726d3a9d144e1c0a5a6c Mon Sep 17 00:00:00 2001 From: Marc Hoersken Date: Tue, 3 Mar 2020 12:37:40 +0100 Subject: [PATCH] ci/tests: Send test results to AppVeyor for status overview Closes #5021 --- tests/Makefile.am | 2 +- tests/appveyor.pm | 107 ++++++++++++++++++++++++++++++++++++++++++++++ tests/runtests.pl | 7 +++ 3 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 tests/appveyor.pm diff --git a/tests/Makefile.am b/tests/Makefile.am index 0e0296f91..95ee872b5 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -39,7 +39,7 @@ EXTRA_DIST = ftpserver.pl httpserver.pl secureserver.pl runtests.pl \ manpage-scan.pl nroff-scan.pl http2-server.pl dictserver.py \ negtelnetserver.py $(SMBDEPS) objnames-test08.sh objnames-test10.sh \ objnames.inc disable-scan.pl manpage-syntax.pl error-codes.pl badsymbols.pl \ - azure.pm + azure.pm appveyor.pm DISTCLEANFILES = configurehelp.pm diff --git a/tests/appveyor.pm b/tests/appveyor.pm new file mode 100644 index 000000000..abfb18523 --- /dev/null +++ b/tests/appveyor.pm @@ -0,0 +1,107 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) 2020, Daniel Stenberg, , et al. +# Copyright (C) 2020, Marc Hoersken, +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.haxx.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +########################################################################### + +use strict; +use warnings; + +my %APPVEYOR_TEST_NAMES; + +sub appveyor_check_environment { + if(defined $ENV{'APPVEYOR_API_URL'} && $ENV{'APPVEYOR_API_URL'}) { + return 1; + } + return 0; +} + +sub appveyor_create_test_result { + my ($testnum, $testname)=@_; + my $appveyor_baseurl="$ENV{'APPVEYOR_API_URL'}"; + my $appveyor_result=`curl --silent \\ + --header "Content-Type: application/json" \\ + --data " + { + 'testName': '$testname', + 'testFramework': 'runtests.pl', + 'fileName': 'tests/data/test$testnum', + 'outcome': 'Running' + } + " \\ + "$appveyor_baseurl/api/tests"`; + print $appveyor_result; + $APPVEYOR_TEST_NAMES{$testnum}=$testname; +} + +sub appveyor_update_test_result { + my ($testnum, $error, $start, $stop)=@_; + my $testname=$APPVEYOR_TEST_NAMES{$testnum}; + if(!defined $testname) { + return; + } + if(!defined $stop) { + $stop = $start; + } + my $appveyor_duration = sprintf("%.0f", ($stop-$start)*1000); + my $appveyor_outcome; + my $appveyor_category; + if($error < 0) { + $appveyor_outcome = 'NotRunnable'; + $appveyor_category = 'Warning'; + } + elsif(!$error) { + $appveyor_outcome = 'Passed'; + $appveyor_category = 'Information'; + } + else { + $appveyor_outcome = 'Failed'; + $appveyor_category = 'Error'; + } + my $appveyor_baseurl="$ENV{'APPVEYOR_API_URL'}"; + my $appveyor_result=`curl --silent --request PUT \\ + --header "Content-Type: application/json" \\ + --data " + { + 'testName': '$testname', + 'testFramework': 'runtests.pl', + 'fileName': 'tests/data/test$testnum', + 'outcome': '$appveyor_outcome', + 'durationMilliseconds': $appveyor_duration + } + " \\ + "$appveyor_baseurl/api/tests"`; + print $appveyor_result; + if($appveyor_category eq 'Error') { + $appveyor_result=`curl --silent \\ + --header "Content-Type: application/json" \\ + --data " + { + 'message': '$testname', + 'category': '$appveyor_category', + 'details': 'Test $testnum $appveyor_outcome' + } + " \\ + "$appveyor_baseurl/api/build/messages"`; + print $appveyor_result; + } +} + +1; diff --git a/tests/runtests.pl b/tests/runtests.pl index bc25dfed3..131aef926 100755 --- a/tests/runtests.pl +++ b/tests/runtests.pl @@ -112,6 +112,7 @@ require "getpart.pm"; # array functions require "valgrind.pm"; # valgrind report parser require "ftp.pm"; require "azure.pm"; +require "appveyor.pm"; my $HOSTIP="127.0.0.1"; # address on which the test server listens my $HOST6IP="[::1]"; # address on which the test server listens @@ -3745,6 +3746,9 @@ sub singletest { if(azure_check_environment() && $AZURE_RUN_ID) { $AZURE_RESULT_ID = azure_create_test_result($AZURE_RUN_ID, $testnum, $testname); } + elsif(appveyor_check_environment()) { + appveyor_create_test_result($testnum, $testname); + } # timestamp starting of test command $timetoolini{$testnum} = Time::HiRes::time(); @@ -5543,6 +5547,9 @@ foreach $testnum (@at) { $AZURE_RESULT_ID = azure_update_test_result($AZURE_RUN_ID, $AZURE_RESULT_ID, $testnum, $error, $timeprepini{$testnum}, $timevrfyend{$testnum}); } + elsif(appveyor_check_environment()) { + appveyor_update_test_result($testnum, $error, $timeprepini{$testnum}, $timevrfyend{$testnum}); + } if($error < 0) { # not a test we can run