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