From 9b6ec1f545da1cc4088ddf9cc117747954e58e65 Mon Sep 17 00:00:00 2001 From: David Lawrence Date: Fri, 26 Feb 2016 17:57:55 +0000 Subject: Bug 1069799 - move the QA repository into the main repository r=LpSolit --- xt/lib/QA/REST.pm | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 xt/lib/QA/REST.pm (limited to 'xt/lib/QA/REST.pm') diff --git a/xt/lib/QA/REST.pm b/xt/lib/QA/REST.pm new file mode 100644 index 000000000..4de985668 --- /dev/null +++ b/xt/lib/QA/REST.pm @@ -0,0 +1,65 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +package QA::REST; + +use 5.10.1; +use strict; +use warnings; + +use FindBin qw($RealBin); +use lib "$RealBin/../../lib", "$RealBin/../../../local/lib/perl5"; + +use autodie; + +use LWP::UserAgent; +use JSON; +use QA::Util; + +use parent qw(LWP::UserAgent Exporter); + +@QA::REST::EXPORT = qw( + MUST_FAIL + get_rest_client +); + +use constant MUST_FAIL => 1; + +sub get_rest_client { + my $rest_client = LWP::UserAgent->new( ssl_opts => { verify_hostname => 0 } ); + bless($rest_client, 'QA::REST'); + my $config = $rest_client->{bz_config} = get_config(); + $rest_client->{bz_url} = $config->{browser_url} . '/' . $config->{bugzilla_installation} . '/rest/'; + $rest_client->{bz_default_headers} = {'Accept' => 'application/json', 'Content-Type' => 'application/json'}; + return $rest_client; +} + +sub bz_config { return $_[0]->{bz_config}; } + +sub call { + my ($self, $method, $data, $http_verb, $expect_to_fail) = @_; + $http_verb = lc($http_verb || 'GET'); + $data //= {}; + + my %args = %{ $self->{bz_default_headers} }; + # We do not pass the API key in the URL, so that it's not logged by the web server. + if ($http_verb eq 'get' && $data->{api_key}) { + $args{'X-BUGZILLA-API-KEY'} = $data->{api_key}; + } + elsif ($http_verb ne 'get') { + $args{Content} = encode_json($data); + } + + my $response = $self->$http_verb($self->{bz_url} . $method, %args); + my $res = decode_json($response->decoded_content); + if ($response->is_success xor $expect_to_fail) { + return $res; + } + else { + die 'error ' . $res->{code} . ': ' . $res->{message} . "\n"; + } +} -- cgit v1.2.3-24-g4f1b