annotate vendor/instaclick/php-webdriver/lib/WebDriver/SauceLabs/SauceRest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 1fec387a4317
children
rev   line source
Chris@14 1 <?php
Chris@14 2 /**
Chris@14 3 * Copyright 2012-2017 Anthon Pang. All Rights Reserved.
Chris@14 4 *
Chris@14 5 * Licensed under the Apache License, Version 2.0 (the "License");
Chris@14 6 * you may not use this file except in compliance with the License.
Chris@14 7 * You may obtain a copy of the License at
Chris@14 8 *
Chris@14 9 * http://www.apache.org/licenses/LICENSE-2.0
Chris@14 10 *
Chris@14 11 * Unless required by applicable law or agreed to in writing, software
Chris@14 12 * distributed under the License is distributed on an "AS IS" BASIS,
Chris@14 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Chris@14 14 * See the License for the specific language governing permissions and
Chris@14 15 * limitations under the License.
Chris@14 16 *
Chris@14 17 * @package WebDriver
Chris@14 18 *
Chris@14 19 * @author Anthon Pang <apang@softwaredevelopment.ca>
Chris@14 20 * @author Fabrizio Branca <mail@fabrizio-branca.de>
Chris@14 21 */
Chris@14 22
Chris@14 23 namespace WebDriver\SauceLabs;
Chris@14 24
Chris@14 25 use WebDriver\ServiceFactory;
Chris@14 26
Chris@14 27 /**
Chris@14 28 * WebDriver\SauceLabs\SauceRest class
Chris@14 29 *
Chris@14 30 * @package WebDriver
Chris@14 31 */
Chris@14 32 class SauceRest
Chris@14 33 {
Chris@14 34 /**
Chris@14 35 * @var string
Chris@14 36 */
Chris@14 37 private $userId;
Chris@14 38
Chris@14 39 /**
Chris@14 40 * @var string
Chris@14 41 */
Chris@14 42 private $accessKey;
Chris@14 43
Chris@14 44 /**
Chris@14 45 * Constructor
Chris@14 46 *
Chris@14 47 * @param string $userId Your Sauce user name
Chris@14 48 * @param string $accessKey Your Sauce API key
Chris@14 49 */
Chris@14 50 public function __construct($userId, $accessKey)
Chris@14 51 {
Chris@14 52 $this->userId = $userId;
Chris@14 53 $this->accessKey = $accessKey;
Chris@14 54 }
Chris@14 55
Chris@14 56 /**
Chris@14 57 * Execute Sauce Labs REST API command
Chris@14 58 *
Chris@14 59 * @param string $requestMethod HTTP request method
Chris@14 60 * @param string $url URL
Chris@14 61 * @param mixed $parameters Parameters
Chris@14 62 *
Chris@14 63 * @return mixed
Chris@14 64 *
Chris@14 65 * @throws \WebDriver\Exception\CurlExec
Chris@14 66 *
Chris@14 67 * @see http://saucelabs.com/docs/saucerest
Chris@14 68 */
Chris@14 69 protected function execute($requestMethod, $url, $parameters = null)
Chris@14 70 {
Chris@14 71 $extraOptions = array(
Chris@14 72 CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
Chris@14 73 CURLOPT_USERPWD => $this->userId . ':' . $this->accessKey,
Chris@14 74
Chris@14 75 // don't verify SSL certificates
Chris@14 76 CURLOPT_SSL_VERIFYPEER => false,
Chris@14 77 CURLOPT_SSL_VERIFYHOST => false,
Chris@14 78
Chris@14 79 CURLOPT_HTTPHEADER => array('Expect:'),
Chris@14 80 CURLOPT_FAILONERROR => true,
Chris@14 81 );
Chris@14 82
Chris@14 83 $url = 'https://saucelabs.com/rest/v1/' . $url;
Chris@14 84
Chris@14 85 list($rawResult, $info) = ServiceFactory::getInstance()->getService('service.curl')->execute($requestMethod, $url, $parameters, $extraOptions);
Chris@14 86
Chris@14 87 return json_decode($rawResult, true);
Chris@14 88 }
Chris@14 89
Chris@14 90 /**
Chris@14 91 * Get account details: /rest/v1/users/:userId (GET)
Chris@14 92 *
Chris@14 93 * @param string $userId
Chris@14 94 *
Chris@14 95 * @return array
Chris@14 96 */
Chris@14 97 public function getAccountDetails($userId)
Chris@14 98 {
Chris@14 99 return $this->execute('GET', 'users/' . $userId);
Chris@14 100 }
Chris@14 101
Chris@14 102 /**
Chris@14 103 * Check account limits: /rest/v1/limits (GET)
Chris@14 104 *
Chris@14 105 * @return array
Chris@14 106 */
Chris@14 107 public function getAccountLimits()
Chris@14 108 {
Chris@14 109 return $this->execute('GET', 'limits');
Chris@14 110 }
Chris@14 111
Chris@14 112 /**
Chris@14 113 * Create new sub-account: /rest/v1/users/:userId (POST)
Chris@14 114 *
Chris@14 115 * For "partners", $accountInfo also contains 'plan' => (one of 'free', 'small', 'team', 'com', or 'complus')
Chris@14 116 *
Chris@14 117 * @param array $accountInfo array('username' => ..., 'password' => ..., 'name' => ..., 'email' => ...)
Chris@14 118 *
Chris@14 119 * @return array array('access_key' => ..., 'minutes' => ..., 'id' => ...)
Chris@14 120 */
Chris@14 121 public function createSubAccount($accountInfo)
Chris@14 122 {
Chris@14 123 return $this->execute('POST', 'users/' . $this->userId, $accountInfo);
Chris@14 124 }
Chris@14 125
Chris@14 126 /**
Chris@14 127 * Update sub-account service plan: /rest/v1/users/:userId/subscription (POST)
Chris@14 128 *
Chris@14 129 * @param string $userId User ID
Chris@14 130 * @param string $plan Plan
Chris@14 131 *
Chris@14 132 * @return array
Chris@14 133 */
Chris@14 134 public function updateSubAccount($userId, $plan)
Chris@14 135 {
Chris@14 136 return $this->execute('POST', 'users/' . $userId . '/subscription', array('plan' => $plan));
Chris@14 137 }
Chris@14 138
Chris@14 139 /**
Chris@14 140 * Unsubscribe a sub-account: /rest/v1/users/:userId/subscription (DELETE)
Chris@14 141 *
Chris@14 142 * @param string $userId User ID
Chris@14 143 *
Chris@14 144 * @return array
Chris@14 145 */
Chris@14 146 public function unsubscribeSubAccount($userId)
Chris@14 147 {
Chris@14 148 return $this->execute('DELETE', 'users/' . $userId . '/subscription');
Chris@14 149 }
Chris@14 150
Chris@14 151 /**
Chris@14 152 * Get current account activity: /rest/v1/:userId/activity (GET)
Chris@14 153 *
Chris@14 154 * @return array
Chris@14 155 */
Chris@14 156 public function getActivity()
Chris@14 157 {
Chris@14 158 return $this->execute('GET', $this->userId . '/activity');
Chris@14 159 }
Chris@14 160
Chris@14 161 /**
Chris@14 162 * Get historical account usage: /rest/v1/:userId/usage (GET)
Chris@14 163 *
Chris@14 164 * @param string $start Optional start date YYYY-MM-DD
Chris@14 165 * @param string $end Optional end date YYYY-MM-DD
Chris@14 166 *
Chris@14 167 * @return array
Chris@14 168 */
Chris@14 169 public function getUsage($start = null, $end = null)
Chris@14 170 {
Chris@14 171 $query = http_build_query(array(
Chris@14 172 'start' => $start,
Chris@14 173 'end' => $end,
Chris@14 174 ));
Chris@14 175
Chris@14 176 return $this->execute('GET', $this->userId . '/usage' . (strlen($query) ? '?' . $query : ''));
Chris@14 177 }
Chris@14 178
Chris@14 179 /**
Chris@14 180 * Get jobs: /rest/v1/:userId/jobs (GET)
Chris@14 181 *
Chris@14 182 * @param boolean $full
Chris@14 183 *
Chris@14 184 * @return array
Chris@14 185 */
Chris@14 186 public function getJobs($full = null)
Chris@14 187 {
Chris@14 188 $query = http_build_query(array(
Chris@14 189 'full' => (isset($full) && $full) ? 'true' : null,
Chris@14 190 ));
Chris@14 191
Chris@14 192 return $this->execute('GET', $this->userId . '/jobs' . (strlen($query) ? '?' . $query : ''));
Chris@14 193 }
Chris@14 194
Chris@14 195 /**
Chris@14 196 * Get full information for job: /rest/v1/:userId/jobs/:jobId (GET)
Chris@14 197 *
Chris@14 198 * @param string $jobId
Chris@14 199 *
Chris@14 200 * @return array
Chris@14 201 */
Chris@14 202 public function getJob($jobId)
Chris@14 203 {
Chris@14 204 return $this->execute('GET', $this->userId . '/jobs/' . $jobId);
Chris@14 205 }
Chris@14 206
Chris@14 207 /**
Chris@14 208 * Update existing job: /rest/v1/:userId/jobs/:jobId (PUT)
Chris@14 209 *
Chris@14 210 * @param string $jobId Job ID
Chris@14 211 * @param array $jobInfo Job information
Chris@14 212 *
Chris@14 213 * @return array
Chris@14 214 */
Chris@14 215 public function updateJob($jobId, $jobInfo)
Chris@14 216 {
Chris@14 217 return $this->execute('PUT', $this->userId . '/jobs/' . $jobId, $jobInfo);
Chris@14 218 }
Chris@14 219
Chris@14 220 /**
Chris@14 221 * Stop job: /rest/v1/:userId/jobs/:jobId/stop (PUT)
Chris@14 222 *
Chris@14 223 * @param string $jobId
Chris@14 224 *
Chris@14 225 * @return array
Chris@14 226 */
Chris@14 227 public function stopJob($jobId)
Chris@14 228 {
Chris@14 229 return $this->execute('PUT', $this->userId . '/jobs/' . $jobId . '/stop');
Chris@14 230 }
Chris@14 231
Chris@14 232 /**
Chris@14 233 * Delete job: /rest/v1/:userId/jobs/:jobId (DELETE)
Chris@14 234 *
Chris@14 235 * @param string $jobId
Chris@14 236 *
Chris@14 237 * @return array
Chris@14 238 */
Chris@14 239 public function deleteJob($jobId)
Chris@14 240 {
Chris@14 241 return $this->execute('DELETE', $this->userId . '/jobs/' . $jobId);
Chris@14 242 }
Chris@14 243
Chris@14 244 /**
Chris@14 245 * Get running tunnels for a given user: /rest/v1/:userId/tunnels (GET)
Chris@14 246 *
Chris@14 247 * @return array
Chris@14 248 */
Chris@14 249 public function getTunnels()
Chris@14 250 {
Chris@14 251 return $this->execute('GET', $this->userId . '/tunnels');
Chris@14 252 }
Chris@14 253
Chris@14 254 /**
Chris@14 255 * Get full information for a tunnel: /rest/v1/:userId/tunnels/:tunnelId (GET)
Chris@14 256 *
Chris@14 257 * @param string $tunnelId
Chris@14 258 *
Chris@14 259 * @return array
Chris@14 260 */
Chris@14 261 public function getTunnel($tunnelId)
Chris@14 262 {
Chris@14 263 return $this->execute('GET', $this->userId . '/tunnels/' . $tunnelId);
Chris@14 264 }
Chris@14 265
Chris@14 266 /**
Chris@14 267 * Shut down a tunnel: /rest/v1/:userId/tunnels/:tunnelId (DELETE)
Chris@14 268 *
Chris@14 269 * @param string $tunnelId
Chris@14 270 *
Chris@14 271 * @return array
Chris@14 272 */
Chris@14 273 public function shutdownTunnel($tunnelId)
Chris@14 274 {
Chris@14 275 return $this->execute('DELETE', $this->userId . '/tunnels/' . $tunnelId);
Chris@14 276 }
Chris@14 277
Chris@14 278 /**
Chris@14 279 * Get current status of Sauce Labs' services: /rest/v1/info/status (GET)
Chris@14 280 *
Chris@14 281 * @return array array('wait_time' => ..., 'service_operational' => ..., 'status_message' => ...)
Chris@14 282 */
Chris@14 283 public function getStatus()
Chris@14 284 {
Chris@14 285 return $this->execute('GET', 'info/status');
Chris@14 286 }
Chris@14 287
Chris@14 288 /**
Chris@14 289 * Get currently supported browsers: /rest/v1/info/browsers (GET)
Chris@14 290 *
Chris@14 291 * @param string $termination Optional termination (one of "all", "selenium-rc", or "webdriver')
Chris@14 292 *
Chris@14 293 * @return array
Chris@14 294 */
Chris@14 295 public function getBrowsers($termination = false)
Chris@14 296 {
Chris@14 297 if ($termination) {
Chris@14 298 return $this->execute('GET', 'info/browsers/' . $termination);
Chris@14 299 }
Chris@14 300
Chris@14 301 return $this->execute('GET', 'info/browsers');
Chris@14 302 }
Chris@14 303
Chris@14 304 /**
Chris@14 305 * Get number of tests executed so far on Sauce Labs: /rest/v1/info/counter (GET)
Chris@14 306 *
Chris@14 307 * @return array
Chris@14 308 */
Chris@14 309 public function getCounter()
Chris@14 310 {
Chris@14 311 return $this->execute('GET', 'info/counter');
Chris@14 312 }
Chris@14 313 }