1*6236dae4SAndroid Build Coastguard Worker#*************************************************************************** 2*6236dae4SAndroid Build Coastguard Worker# _ _ ____ _ 3*6236dae4SAndroid Build Coastguard Worker# Project ___| | | | _ \| | 4*6236dae4SAndroid Build Coastguard Worker# / __| | | | |_) | | 5*6236dae4SAndroid Build Coastguard Worker# | (__| |_| | _ <| |___ 6*6236dae4SAndroid Build Coastguard Worker# \___|\___/|_| \_\_____| 7*6236dae4SAndroid Build Coastguard Worker# 8*6236dae4SAndroid Build Coastguard Worker# Copyright (C) Daniel Stenberg, <[email protected]>, et al. 9*6236dae4SAndroid Build Coastguard Worker# Copyright (C) Marc Hoersken, <[email protected]> 10*6236dae4SAndroid Build Coastguard Worker# 11*6236dae4SAndroid Build Coastguard Worker# This software is licensed as described in the file COPYING, which 12*6236dae4SAndroid Build Coastguard Worker# you should have received as part of this distribution. The terms 13*6236dae4SAndroid Build Coastguard Worker# are also available at https://curl.se/docs/copyright.html. 14*6236dae4SAndroid Build Coastguard Worker# 15*6236dae4SAndroid Build Coastguard Worker# You may opt to use, copy, modify, merge, publish, distribute and/or sell 16*6236dae4SAndroid Build Coastguard Worker# copies of the Software, and permit persons to whom the Software is 17*6236dae4SAndroid Build Coastguard Worker# furnished to do so, under the terms of the COPYING file. 18*6236dae4SAndroid Build Coastguard Worker# 19*6236dae4SAndroid Build Coastguard Worker# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 20*6236dae4SAndroid Build Coastguard Worker# KIND, either express or implied. 21*6236dae4SAndroid Build Coastguard Worker# 22*6236dae4SAndroid Build Coastguard Worker# SPDX-License-Identifier: curl 23*6236dae4SAndroid Build Coastguard Worker# 24*6236dae4SAndroid Build Coastguard Worker########################################################################### 25*6236dae4SAndroid Build Coastguard Worker 26*6236dae4SAndroid Build Coastguard Workerpackage azure; 27*6236dae4SAndroid Build Coastguard Worker 28*6236dae4SAndroid Build Coastguard Workeruse strict; 29*6236dae4SAndroid Build Coastguard Workeruse warnings; 30*6236dae4SAndroid Build Coastguard Worker 31*6236dae4SAndroid Build Coastguard WorkerBEGIN { 32*6236dae4SAndroid Build Coastguard Worker use base qw(Exporter); 33*6236dae4SAndroid Build Coastguard Worker 34*6236dae4SAndroid Build Coastguard Worker our @EXPORT = qw( 35*6236dae4SAndroid Build Coastguard Worker azure_check_environment 36*6236dae4SAndroid Build Coastguard Worker azure_create_test_run 37*6236dae4SAndroid Build Coastguard Worker azure_create_test_result 38*6236dae4SAndroid Build Coastguard Worker azure_update_test_result 39*6236dae4SAndroid Build Coastguard Worker azure_update_test_run 40*6236dae4SAndroid Build Coastguard Worker ); 41*6236dae4SAndroid Build Coastguard Worker} 42*6236dae4SAndroid Build Coastguard Worker 43*6236dae4SAndroid Build Coastguard Workeruse POSIX qw(strftime); 44*6236dae4SAndroid Build Coastguard Worker 45*6236dae4SAndroid Build Coastguard Workersub azure_check_environment { 46*6236dae4SAndroid Build Coastguard Worker if(defined $ENV{'AZURE_ACCESS_TOKEN'} && $ENV{'AZURE_ACCESS_TOKEN'} && 47*6236dae4SAndroid Build Coastguard Worker defined $ENV{'AGENT_JOBNAME'} && $ENV{'BUILD_BUILDID'} && 48*6236dae4SAndroid Build Coastguard Worker defined $ENV{'SYSTEM_TEAMFOUNDATIONCOLLECTIONURI'} && 49*6236dae4SAndroid Build Coastguard Worker defined $ENV{'SYSTEM_TEAMPROJECTID'}) { 50*6236dae4SAndroid Build Coastguard Worker return 1; 51*6236dae4SAndroid Build Coastguard Worker } 52*6236dae4SAndroid Build Coastguard Worker return 0; 53*6236dae4SAndroid Build Coastguard Worker} 54*6236dae4SAndroid Build Coastguard Worker 55*6236dae4SAndroid Build Coastguard Workersub azure_create_test_run { 56*6236dae4SAndroid Build Coastguard Worker my ($curl)=@_; 57*6236dae4SAndroid Build Coastguard Worker my $azure_baseurl="$ENV{'SYSTEM_TEAMFOUNDATIONCOLLECTIONURI'}$ENV{'SYSTEM_TEAMPROJECTID'}"; 58*6236dae4SAndroid Build Coastguard Worker my $azure_run=`$curl --silent --noproxy "*" \\ 59*6236dae4SAndroid Build Coastguard Worker --header "Authorization: Bearer $ENV{'AZURE_ACCESS_TOKEN'}" \\ 60*6236dae4SAndroid Build Coastguard Worker --header "Content-Type: application/json" \\ 61*6236dae4SAndroid Build Coastguard Worker --data " 62*6236dae4SAndroid Build Coastguard Worker { 63*6236dae4SAndroid Build Coastguard Worker 'name': '$ENV{'AGENT_JOBNAME'}', 64*6236dae4SAndroid Build Coastguard Worker 'automated': true, 65*6236dae4SAndroid Build Coastguard Worker 'build': {'id': '$ENV{'BUILD_BUILDID'}'} 66*6236dae4SAndroid Build Coastguard Worker } 67*6236dae4SAndroid Build Coastguard Worker " \\ 68*6236dae4SAndroid Build Coastguard Worker "$azure_baseurl/_apis/test/runs?api-version=5.1"`; 69*6236dae4SAndroid Build Coastguard Worker if($azure_run =~ /"id":(\d+)/) { 70*6236dae4SAndroid Build Coastguard Worker return $1; 71*6236dae4SAndroid Build Coastguard Worker } 72*6236dae4SAndroid Build Coastguard Worker return ""; 73*6236dae4SAndroid Build Coastguard Worker} 74*6236dae4SAndroid Build Coastguard Worker 75*6236dae4SAndroid Build Coastguard Workersub azure_create_test_result { 76*6236dae4SAndroid Build Coastguard Worker my ($curl, $azure_run_id, $testnum, $testname)=@_; 77*6236dae4SAndroid Build Coastguard Worker $testname =~ s/\\/\\\\/g; 78*6236dae4SAndroid Build Coastguard Worker $testname =~ s/\"/\\\"/g; 79*6236dae4SAndroid Build Coastguard Worker $testname =~ s/\'/'"'"'/g; 80*6236dae4SAndroid Build Coastguard Worker my $title_testnum=sprintf("%04d", $testnum); 81*6236dae4SAndroid Build Coastguard Worker my $azure_baseurl="$ENV{'SYSTEM_TEAMFOUNDATIONCOLLECTIONURI'}$ENV{'SYSTEM_TEAMPROJECTID'}"; 82*6236dae4SAndroid Build Coastguard Worker my $azure_result=`$curl --silent --noproxy '*' \\ 83*6236dae4SAndroid Build Coastguard Worker --header "Authorization: Bearer $ENV{'AZURE_ACCESS_TOKEN'}" \\ 84*6236dae4SAndroid Build Coastguard Worker --header 'Content-Type: application/json' \\ 85*6236dae4SAndroid Build Coastguard Worker --data ' 86*6236dae4SAndroid Build Coastguard Worker [ 87*6236dae4SAndroid Build Coastguard Worker { 88*6236dae4SAndroid Build Coastguard Worker "build": {"id": "$ENV{'BUILD_BUILDID'}"}, 89*6236dae4SAndroid Build Coastguard Worker "testCase": {"id": $testnum}, 90*6236dae4SAndroid Build Coastguard Worker "testCaseTitle": "$title_testnum: $testname", 91*6236dae4SAndroid Build Coastguard Worker "testCaseRevision": 2, 92*6236dae4SAndroid Build Coastguard Worker "automatedTestName": "curl.tests.$testnum", 93*6236dae4SAndroid Build Coastguard Worker "outcome": "InProgress" 94*6236dae4SAndroid Build Coastguard Worker } 95*6236dae4SAndroid Build Coastguard Worker ] 96*6236dae4SAndroid Build Coastguard Worker ' \\ 97*6236dae4SAndroid Build Coastguard Worker '$azure_baseurl/_apis/test/runs/$azure_run_id/results?api-version=5.1'`; 98*6236dae4SAndroid Build Coastguard Worker if($azure_result =~ /\[\{"id":(\d+)/) { 99*6236dae4SAndroid Build Coastguard Worker return $1; 100*6236dae4SAndroid Build Coastguard Worker } 101*6236dae4SAndroid Build Coastguard Worker return ""; 102*6236dae4SAndroid Build Coastguard Worker} 103*6236dae4SAndroid Build Coastguard Worker 104*6236dae4SAndroid Build Coastguard Workersub azure_update_test_result { 105*6236dae4SAndroid Build Coastguard Worker my ($curl, $azure_run_id, $azure_result_id, $testnum, $error, $start, $stop)=@_; 106*6236dae4SAndroid Build Coastguard Worker if(!defined $stop) { 107*6236dae4SAndroid Build Coastguard Worker $stop = $start; 108*6236dae4SAndroid Build Coastguard Worker } 109*6236dae4SAndroid Build Coastguard Worker my $azure_start = strftime "%Y-%m-%dT%H:%M:%SZ", gmtime $start; 110*6236dae4SAndroid Build Coastguard Worker my $azure_complete = strftime "%Y-%m-%dT%H:%M:%SZ", gmtime $stop; 111*6236dae4SAndroid Build Coastguard Worker my $azure_duration = sprintf("%.0f", ($stop-$start)*1000); 112*6236dae4SAndroid Build Coastguard Worker my $azure_outcome; 113*6236dae4SAndroid Build Coastguard Worker if($error == 2) { 114*6236dae4SAndroid Build Coastguard Worker $azure_outcome = 'NotApplicable'; 115*6236dae4SAndroid Build Coastguard Worker } 116*6236dae4SAndroid Build Coastguard Worker elsif($error < 0) { 117*6236dae4SAndroid Build Coastguard Worker $azure_outcome = 'NotExecuted'; 118*6236dae4SAndroid Build Coastguard Worker } 119*6236dae4SAndroid Build Coastguard Worker elsif(!$error) { 120*6236dae4SAndroid Build Coastguard Worker $azure_outcome = 'Passed'; 121*6236dae4SAndroid Build Coastguard Worker } 122*6236dae4SAndroid Build Coastguard Worker else { 123*6236dae4SAndroid Build Coastguard Worker $azure_outcome = 'Failed'; 124*6236dae4SAndroid Build Coastguard Worker } 125*6236dae4SAndroid Build Coastguard Worker my $azure_baseurl="$ENV{'SYSTEM_TEAMFOUNDATIONCOLLECTIONURI'}$ENV{'SYSTEM_TEAMPROJECTID'}"; 126*6236dae4SAndroid Build Coastguard Worker my $azure_result=`$curl --silent --noproxy '*' --request PATCH \\ 127*6236dae4SAndroid Build Coastguard Worker --header "Authorization: Bearer $ENV{'AZURE_ACCESS_TOKEN'}" \\ 128*6236dae4SAndroid Build Coastguard Worker --header "Content-Type: application/json" \\ 129*6236dae4SAndroid Build Coastguard Worker --data ' 130*6236dae4SAndroid Build Coastguard Worker [ 131*6236dae4SAndroid Build Coastguard Worker { 132*6236dae4SAndroid Build Coastguard Worker "id": $azure_result_id, 133*6236dae4SAndroid Build Coastguard Worker "outcome": "$azure_outcome", 134*6236dae4SAndroid Build Coastguard Worker "startedDate": "$azure_start", 135*6236dae4SAndroid Build Coastguard Worker "completedDate": "$azure_complete", 136*6236dae4SAndroid Build Coastguard Worker "durationInMs": $azure_duration 137*6236dae4SAndroid Build Coastguard Worker } 138*6236dae4SAndroid Build Coastguard Worker ] 139*6236dae4SAndroid Build Coastguard Worker ' \\ 140*6236dae4SAndroid Build Coastguard Worker '$azure_baseurl/_apis/test/runs/$azure_run_id/results?api-version=5.1'`; 141*6236dae4SAndroid Build Coastguard Worker if($azure_result =~ /\[\{"id":(\d+)/) { 142*6236dae4SAndroid Build Coastguard Worker return $1; 143*6236dae4SAndroid Build Coastguard Worker } 144*6236dae4SAndroid Build Coastguard Worker return ""; 145*6236dae4SAndroid Build Coastguard Worker} 146*6236dae4SAndroid Build Coastguard Worker 147*6236dae4SAndroid Build Coastguard Workersub azure_update_test_run { 148*6236dae4SAndroid Build Coastguard Worker my ($curl, $azure_run_id)=@_; 149*6236dae4SAndroid Build Coastguard Worker my $azure_baseurl="$ENV{'SYSTEM_TEAMFOUNDATIONCOLLECTIONURI'}$ENV{'SYSTEM_TEAMPROJECTID'}"; 150*6236dae4SAndroid Build Coastguard Worker my $azure_run=`$curl --silent --noproxy '*' --request PATCH \\ 151*6236dae4SAndroid Build Coastguard Worker --header "Authorization: Bearer $ENV{'AZURE_ACCESS_TOKEN'}" \\ 152*6236dae4SAndroid Build Coastguard Worker --header 'Content-Type: application/json' \\ 153*6236dae4SAndroid Build Coastguard Worker --data ' 154*6236dae4SAndroid Build Coastguard Worker { 155*6236dae4SAndroid Build Coastguard Worker "state": "Completed" 156*6236dae4SAndroid Build Coastguard Worker } 157*6236dae4SAndroid Build Coastguard Worker ' \\ 158*6236dae4SAndroid Build Coastguard Worker '$azure_baseurl/_apis/test/runs/$azure_run_id?api-version=5.1'`; 159*6236dae4SAndroid Build Coastguard Worker if($azure_run =~ /"id":(\d+)/) { 160*6236dae4SAndroid Build Coastguard Worker return $1; 161*6236dae4SAndroid Build Coastguard Worker } 162*6236dae4SAndroid Build Coastguard Worker return ""; 163*6236dae4SAndroid Build Coastguard Worker} 164*6236dae4SAndroid Build Coastguard Worker 165*6236dae4SAndroid Build Coastguard Worker1; 166