Best Phoronix-test-suite code snippet using must.bios_version
phodevi_motherboard.php
Source:phodevi_motherboard.php
...24 'identifier' => new phodevi_device_property('motherboard_string', phodevi::smart_caching),25 'serial-number' => new phodevi_device_property('serial_number', phodevi::smart_caching),26 'power-mode' => new phodevi_device_property('power_mode', phodevi::smart_caching),27 'pci-devices' => new phodevi_device_property('pci_devices', phodevi::smart_caching),28 'bios-version' => new phodevi_device_property('bios_version', phodevi::smart_caching),29 'secure-boot' => new phodevi_device_property('secure_boot', phodevi::smart_caching),30 'boot-mode' => new phodevi_device_property('boot_mode', phodevi::smart_caching),31 'tpm-devices' => new phodevi_device_property('tpm_devices', phodevi::smart_caching),32 'usb-devices' => new phodevi_device_property('usb_devices', phodevi::std_caching),33 );34 }35 public static function secure_boot()36 {37 $status = 'Unknown';38 if(pts_client::executable_in_path('mokutil'))39 {40 $mokutil = shell_exec('mokutil --sb-state 2>&1');41 if(stripos($mokutil, 'enabled') !== false)42 {43 $status = 'Enabled';44 }45 else if(stripos($mokutil, 'disabled') !== false)46 {47 $status = 'Disabled';48 }49 }50 else if(phodevi::is_windows())51 {52 $confirm = shell_exec('powershell -NoProfile "Confirm-SecureBootUEFI"');53 if(strpos($confirm, 'True') !== false)54 {55 $status = 'Enabled';56 }57 else if(strpos($confirm, 'False') !== false)58 {59 $status = 'Disabled';60 }61 }62 return $status;63 }64 public static function boot_mode()65 {66 $boot_mode = 'Unknown';67 if(phodevi::is_linux())68 {69 if(!is_dir('/sys/firmware/efi'))70 {71 $boot_mode = 'Legacy BIOS';72 }73 else74 {75 $boot_mode = 'EFI';76 }77 }78 else if(phodevi::is_windows())79 {80 $bcdedit = shell_exec('bcdedit');81 if(strpos($bcdedit, '.efi') !== false)82 {83 $boot_mode = 'EFI';84 }85 else if(strpos($bcdedit, 'path') !== false)86 {87 $boot_mode = 'Legacy BIOS';88 }89 }90 return $boot_mode;91 }92 public static function tpm_devices()93 {94 $tpm = array();95 if(phodevi::is_linux())96 {97 foreach(pts_file_io::glob('/sys/class/tpm/tpm*/device/description') as $tpm_desc)98 {99 $model = pts_file_io::file_get_contents($tpm_desc);100 $dir = dirname($tpm_desc);101 if(is_file($dir . '/hid'))102 {103 $model .= ' ' . pts_file_io::file_get_contents($dir . '/hid');104 }105 $tpm[] = $model;106 }107 }108 return implode(' + ', $tpm);109 }110 public static function usb_devices()111 {112 $usb = array();113 if(phodevi::is_linux())114 {115 foreach(pts_file_io::glob('/sys/bus/usb/devices/*-*/manufacturer') as $usb_dir)116 {117 $usb_dir = dirname($usb_dir) . '/';118 if(!is_file($usb_dir . 'product') || !is_file($usb_dir . 'idProduct') || !is_file($usb_dir . 'idVendor'))119 {120 continue;121 }122 $vendor = pts_strings::trim_search_query(pts_strings::strip_string(pts_file_io::file_get_contents($usb_dir . 'manufacturer')));123 $device = pts_strings::trim_search_query(pts_strings::strip_string(str_replace($vendor, '', pts_file_io::file_get_contents($usb_dir . 'product'))));124 $device = pts_strings::keep_in_string($device, pts_strings::CHAR_LETTER | pts_strings::CHAR_NUMERIC | pts_strings::CHAR_DECIMAL | pts_strings::CHAR_SPACE | pts_strings::CHAR_DASH | pts_strings::CHAR_UNDERSCORE | pts_strings::CHAR_COLON | pts_strings::CHAR_COMMA);125 if($vendor == null || $device == null || $vendor == 'Generic')126 {127 continue;128 }129 array_push($usb, array(130 'Class' => pts_file_io::file_get_contents($usb_dir . 'bDeviceClass'),131 'Vendor' => $vendor,132 'Device' => $device,133 'VendorID' => pts_file_io::file_get_contents($usb_dir . 'idVendor'),134 'DeviceID' => pts_file_io::file_get_contents($usb_dir . 'idProduct')135 ));136 }137 }138 return $usb;139 }140 public static function is_genuine($mobo)141 {142 return strpos($mobo, ' ') > 1 && !pts_strings::has_in_istring($mobo, array('Virtual', 'Bochs', '440BX', 'Megatrends', 'Award ', 'Software', 'Xen', 'HVM ', 'Notebook', 'OEM ', ' KVM', 'unknown')) && !is_numeric(substr($mobo, 0, strpos($mobo, ' ')));143 // pts_strings::string_contains($mobo, pts_strings::CHAR_NUMERIC);144 }145 public static function pci_devices()146 {147 $pci_devices = array();148 if(phodevi::is_linux() && isset(phodevi::$vfs->lspci))149 {150 $lspci = phodevi::$vfs->lspci;151 $lspci = explode("\n\n", $lspci);152 foreach($lspci as $o => &$lspci_section)153 {154 $lspci_section = explode("\n", $lspci_section);155 $formatted_section = array();156 foreach($lspci_section as $i => &$line)157 {158 $line = explode(':', $line);159 if(count($line) == 2 && in_array($line[0], array('Class', 'Vendor', 'Device', 'Driver', 'Rev', 'Module')))160 {161 $line[1] = trim($line[1]);162 if(($c = strrpos($line[1], ' [')) !== false)163 {164 $id = substr($line[1], ($c + 2));165 $id = '0x' . substr($id, 0, strpos($id, ']'));166 switch($line[0])167 {168 case 'Vendor':169 $formatted_section['VendorID'] = $id;170 break;171 case 'Device':172 $formatted_section['DeviceID'] = $id;173 break;174 }175 $line[1] = substr($line[1], 0, $c);176 }177 if($line[0] == 'Class')178 {179 switch($line[1])180 {181 case 'Ethernet controller':182 case 'Network controller':183 $line[1] = 'Network';184 break;185 case 'VGA compatible controller':186 $line[1] = 'GPU';187 break;188 case 'Audio device':189 case 'Multimedia audio controller':190 $line[1] = 'Audio';191 break;192 // case 'RAM memory':193 // case 'Host bridge':194 // $line[1] = 'Chipset';195 // break;196 default:197 $line[1] = null;198 break;199 }200 }201 else if($line[0] == 'Device' || $line[0] == 'Vendor')202 {203 $line[1] = pts_strings::trim_search_query(pts_strings::strip_string($line[1]));204 $line[1] = pts_strings::keep_in_string($line[1], pts_strings::CHAR_LETTER | pts_strings::CHAR_NUMERIC | pts_strings::CHAR_DECIMAL | pts_strings::CHAR_SPACE | pts_strings::CHAR_DASH | pts_strings::CHAR_UNDERSCORE | pts_strings::CHAR_COLON | pts_strings::CHAR_COMMA);205 }206 $formatted_section[$line[0]] = $line[1];207 }208 }209 if(count($formatted_section) > 0 && $formatted_section['Class'] != null)210 {211 array_push($pci_devices, $formatted_section);212 }213 }214 }215 return $pci_devices;216 }217 public static function parse_pci_device_data(&$lspci, &$dmesg, $ignore_external_pci_devices = false)218 {219 $pci_devices = explode(PHP_EOL . PHP_EOL, $lspci);220 $sanitized_devices = array();221 foreach($pci_devices as &$device)222 {223 $device .= PHP_EOL;224 $location = substr($device, 0, strpos($device, ' '));225 if(!strpos($location, ':') || !strpos($location, '.'))226 {227 // If it's not a valid PCI bus location (i.e. XX:YY.Z), it's probably not formatted well or wrong228 continue;229 }230 $class = substr($device, ($s = (strpos($device, '[') + 1)), (strpos($device, ']', $s) - $s));231 if(!(isset($class[3]) && !isset($class[4])))232 {233 // class must be 4 characters: 2 for class, 2 for sub-class234 continue;235 }236 // 0300 is GPUs237 if($ignore_external_pci_devices && in_array($class, array('0300')))238 {239 // Don't report external PCI devices240 continue;241 }242 $device_class = substr($class, 0, 2);243 $sub_class = substr($class, 2, 2);244 $device_name = substr($device, ($l = strpos($device, ']:') + 3), ($s = strpos($device, ':', $l)) - $l);245 $device_name = substr($device_name, 0, strrpos($device_name, ' ['));246 $device_name = str_replace('/', '-', str_replace(array('[AMD]', '[SiS]'), '', $device_name));247 $device_name = pts_strings::strip_string($device_name);248 if($device_name == null || strpos($device_name, ' ') === false)249 {250 // it must be junk not worth reporting251 continue;252 }253 $temp = substr($device, $s - 5);254 if($temp[0] != '[' || $temp[10] != ']')255 {256 continue;257 }258 $vendor_id = substr($temp, 1, 4);259 $device_id = substr($temp, 6, 4);260 $drivers = array();261 if(($s = strpos($device, 'Kernel driver in use:')) !== false)262 {263 $temp = substr($device, ($s = $s + 22), (strpos($device, PHP_EOL, $s) - $s));264 if($temp != null)265 {266 array_push($drivers, $temp);267 }268 }269 if(($s = strpos($device, 'Kernel modules:')) !== false)270 {271 $temp = substr($device, ($s = $s + 16), (strpos($device, PHP_EOL, $s) - $s));272 if($temp != null)273 {274 foreach(explode(' ', trim($temp)) as $temp)275 {276 $temp = str_replace(',', '', $temp);277 if($temp != null && !in_array($temp, $drivers))278 {279 array_push($drivers, $temp);280 }281 }282 }283 }284 if(empty($drivers))285 {286 // If there's no drivers, nothing to report287 continue;288 }289 if(!in_array($vendor_id . ':' . $device_id, array_keys($sanitized_devices)))290 {291 $dmesg_example = array();292 if($dmesg != null)293 {294 foreach($drivers as $driver)295 {296 $offset = 1;297 while($offset != false && ($offset = strpos($dmesg, $driver, $offset)) !== false)298 {299 $line = substr($dmesg, 0, strpos($dmesg, "\n", $offset));300 $line = substr($line, strrpos($line, "\n"));301 $line = trim(substr($line, strpos($line, '] ') + 2));302 if($line != null && !isset($line[128]))303 {304 array_push($dmesg_example, $line);305 }306 $offset = strpos($dmesg, "\n", ($offset + 1));307 }308 }309 }310 $sanitized_devices[$vendor_id . ':' . $device_id] = array(311 $vendor_id,312 $device_id,313 $device_name,314 $device_class,315 $sub_class,316 $drivers,317 trim($device),318 implode(PHP_EOL, $dmesg_example)319 );320 }321 }322 return $sanitized_devices;323 }324 public static function power_mode()325 {326 // Returns the power mode327 $return_status = null;328 if(phodevi::is_linux())329 {330 $sysfs_checked = false;331 foreach(pts_file_io::glob('/sys/class/power_supply/AC*/online') as $online)332 {333 if(pts_file_io::file_get_contents($online) == '0')334 {335 $return_status = 'This computer was running on battery power';336 break;337 }338 $sysfs_checked = true;339 }340 if(!$sysfs_checked)341 {342 // There likely was no sysfs power_supply support for that power adapter343 $power_state = phodevi_linux_parser::read_acpi('/ac_adapter/AC/state', 'state');344 if($power_state == 'off-line')345 {346 $return_status = 'This computer was running on battery power';347 }348 }349 }350 return $return_status;351 }352 public static function serial_number()353 {354 $serial = null;355 if(phodevi::is_linux())356 {357 $serial = phodevi_linux_parser::read_dmidecode('system', 'System Information', 'Serial Number', true, array());358 if($serial == null)359 {360 $serial = phodevi_linux_parser::read_sys_dmi('board_serial');361 }362 if($serial == null)363 {364 $serial = phodevi_linux_parser::read_sys_dmi('product_serial');365 }366 if($serial == null)367 {368 $serial = phodevi_linux_parser::read_sys_dmi('product_uuid');369 }370 }371 else if(phodevi::is_windows())372 {373 $serial = phodevi_windows_parser::get_wmi_object('Win32_BaseBoard', 'SerialNumber');374 }375 return $serial;376 }377 public static function bios_version()378 {379 $bios_version = null;380 if(phodevi::is_bsd())381 {382 $bios_version = phodevi_bsd_parser::read_kenv('smbios.system.version');383 if($bios_version == 'System Version')384 {385 $bios_version = null;386 }387 }388 else if(phodevi::is_linux())389 {390 $bios_version = phodevi_linux_parser::read_sys_dmi('bios_version');391 }392 else if(phodevi::is_windows())393 {394 $bios_version = trim(str_ireplace(array('smbiosbiosversion', "\n"), '', shell_exec('wmic bios get smbiosbiosversion')));395 }396 if($bios_version == 'Google')397 {398 $bios_version = null;399 }400 return empty($bios_version) ? '' : trim(str_replace(array('(', ')'), '', $bios_version));401 }402 public static function motherboard_string()403 {404 // Returns the motherboard / system model name or number405 $info = null;406 if(phodevi::is_macos())407 {408 $info = phodevi_osx_parser::read_osx_system_profiler('SPHardwareDataType', 'ModelName');409 }410 else if(phodevi::is_solaris())411 {412 $manufacturer = phodevi_solaris_parser::read_sun_ddu_dmi_info(array('MotherBoardInformation,Manufacturer', 'SystemInformation,Manufacturer'));413 $product = phodevi_solaris_parser::read_sun_ddu_dmi_info(array('MotherBoardInformation,Product', 'SystemInformation,Product', 'SystemInformation,Model'));414 if(count($manufacturer) == 1 && count($product) == 1)415 {416 $info = $manufacturer[0] . ' ' . $product[0];417 }418 }419 else if(phodevi::is_bsd())420 {421 $vendor = phodevi_bsd_parser::read_kenv('smbios.system.maker');422 $product = phodevi_bsd_parser::read_kenv('smbios.system.product');423 $version = phodevi_bsd_parser::read_kenv('smbios.system.version'); // for at least Lenovo ThinkPads this is where it displays ThinkPad model424 if($vendor != null && ($product != null || $version != null) && strpos($product, 'System') === false)425 {426 $info = $vendor . ' ' . $product . ' ' . $version;427 }428 else if(($vendor = phodevi_bsd_parser::read_sysctl('hw.vendor')) != false && ($version = phodevi_bsd_parser::read_sysctl(array('hw.version', 'hw.product'))) != false)429 {430 $info = trim($vendor . ' ' . $version);431 }432 else if(($product = phodevi_bsd_parser::read_kenv('smbios.planar.product')))433 {434 $info = trim(phodevi_bsd_parser::read_kenv('smbios.planar.maker') . ' ' . $product);435 }436 else if(($acpi = phodevi_bsd_parser::read_sysctl('dev.acpi.0.%desc')) != false && strpos($acpi, ' ') != null)437 {438 $info = trim($acpi);439 }440 }441 else if(phodevi::is_linux())442 {443 $vendor = phodevi_linux_parser::read_sys_dmi(array('board_vendor', 'sys_vendor'));444 $name = phodevi_linux_parser::read_sys_dmi(array('board_name', 'product_name'));445 $version = phodevi_linux_parser::read_sys_dmi(array('board_version', 'product_version'));446 if($vendor != false && $name != false)447 {448 $info = strpos($name . ' ', $vendor . ' ') === false ? $vendor . ' ' : null;449 $info .= $name;450 if($version != false && strpos($info, $version) === false && pts_strings::string_only_contains($version, pts_strings::CHAR_NUMERIC | pts_strings::CHAR_DECIMAL))451 {452 $info .= (substr($version, 0, 1) == 'v' ? ' ' : ' v') . $version;453 }454 if((phodevi::is_root() || is_readable('/dev/mem')) && pts_client::executable_in_path('dmidecode'))455 {456 // For some vendors, it's better to read system-product-name457 // Unfortunately other vendors report garbage here, also demidecode only works as root on Linux458 foreach(array('Dell', 'Apple') as $vend)459 {460 if(stripos($info, $vend . ' ') !== false)461 {462 $dmi_output = shell_exec('dmidecode -s system-product-name 2>&1');463 if($dmi_output != null && stripos($dmi_output, ' ') !== false && stripos($dmi_output, 'invalid') === false && stripos($dmi_output, 'System Product') === false && stripos($dmi_output, 'not ') === false)464 {465 $old_info = trim(str_ireplace(array($vend . ' ', 'Inc.'), '', $info));466 $info = trim($dmi_output) . (!empty($old_info) && strpos($dmi_output, $old_info) === false ? ' [' . $old_info . ']' : '');467 }468 if($info != null && stripos($info, $vend) === false)469 {470 $info = $vend . ' ' . $info;471 break;472 }473 }474 }475 }476 }477 if(empty($info))478 {479 $from_cpuinfo = false;480 if($info == null)481 {482 $hw_string = phodevi_linux_parser::read_cpuinfo('Hardware');483 if(count($hw_string) == 1)484 {485 $info = $hw_string[0];486 $from_cpuinfo = true;487 }488 }489 $bios_vendor = phodevi_linux_parser::read_sys_dmi('bios_vendor');490 $bios_version = phodevi_linux_parser::read_sys_dmi('bios_version');491 if($bios_vendor != null)492 {493 $info = $bios_vendor . ' ' . $bios_version;494 }495 if($info == null)496 {497 $hw_string = phodevi_linux_parser::read_cpuinfo('machine');498 if(count($hw_string) == 1)499 {500 $info = $hw_string[0];501 $from_cpuinfo = true;502 }503 }504 if($from_cpuinfo && is_readable('/sys/firmware/devicetree/base/model'))505 {506 $dt_model = pts_file_io::file_get_contents('/sys/firmware/devicetree/base/model');507 if($info == null || stripos($dt_model, $info) === false)...
m_bios.php
Source:m_bios.php
...44 bios_description,45 bios_manufacturer,46 bios_serial,47 bios_smversion,48 bios_version49 FROM50 sys_hw_bios,51 system52 WHERE53 sys_hw_bios.system_id = system.system_id AND54 sys_hw_bios.timestamp = system.timestamp AND55 system.system_id = ?56 LIMIT 1";57 $sql = $this->clean_sql($sql);58 $data = array("$system_id");59 $query = $this->db->query($sql, $data);60 $result = $query->result();61 return ($result);62 }63 public function process_bios($input, $details)64 {65 if (((string) $details->first_timestamp == (string) $details->original_timestamp) and ($details->original_last_seen_by != 'audit')) {66 # we have only seen this system once, and not via an audit script67 # insert the software and set the first_timestamp == system.first_timestamp68 # otherwise we cause alerts69 $sql = "INSERT INTO sys_hw_bios70 ( system_id,71 bios_description,72 bios_manufacturer,73 bios_serial,74 bios_smversion,75 bios_version,76 bios_asset_tag,77 timestamp,78 first_timestamp )79 VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ? )";80 $sql = $this->clean_sql($sql);81 $data = array("$details->system_id",82 "$input->bios_description",83 "$input->bios_manufacturer",84 "$input->bios_serial",85 "$input->bios_smversion",86 "$input->bios_version",87 "$input->bios_asset_tag",88 "$details->timestamp",89 "$details->first_timestamp", );90 $query = $this->db->query($sql, $data);91 } else {92 // check for processor changes93 $sql = "SELECT94 sys_hw_bios.bios_id95 FROM96 sys_hw_bios,97 system98 WHERE99 sys_hw_bios.system_id = system.system_id AND100 system.system_id = ? AND101 system.man_status = 'production' AND102 bios_description = ? AND103 bios_manufacturer = ? AND104 bios_serial = ? AND105 bios_smversion = ? AND106 bios_version = ? AND107 ( sys_hw_bios.timestamp = ? OR sys_hw_bios.timestamp = ? )108 LIMIT 1";109 $sql = $this->clean_sql($sql);110 $data = array( "$details->system_id",111 "$input->bios_description",112 "$input->bios_manufacturer",113 "$input->bios_serial",114 "$input->bios_smversion",115 "$input->bios_version",116 "$details->original_timestamp",117 "$details->timestamp", );118 $query = $this->db->query($sql, $data);119 if ($query->num_rows() > 0) {120 $row = $query->row();121 // the processor exists - need to update it122 $sql = "UPDATE sys_hw_bios SET bios_asset_tag = ?, timestamp = ? WHERE bios_id = ? ";123 $data = array("$input->bios_asset_tag", "$details->timestamp", "$row->bios_id");124 $query = $this->db->query($sql, $data);125 } else {126 // the bios does not exist - insert it127 $sql = "INSERT INTO sys_hw_bios128 ( system_id,129 bios_description,130 bios_manufacturer,131 bios_serial,132 bios_smversion,133 bios_version,134 bios_asset_tag,135 timestamp,136 first_timestamp )137 VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ? )";138 $sql = $this->clean_sql($sql);139 $data = array("$details->system_id",140 "$input->bios_description",141 "$input->bios_manufacturer",142 "$input->bios_serial",143 "$input->bios_smversion",144 "$input->bios_version",145 "$input->bios_asset_tag",146 "$details->timestamp",147 "$details->timestamp", );148 $query = $this->db->query($sql, $data);149 }150 }151 } // end of function152 public function alert_bios($details)153 {154 // only detect new bios155 $sql = "SELECT sys_hw_bios.bios_id, sys_hw_bios.bios_description156 FROM157 sys_hw_bios LEFT JOIN system ON (sys_hw_bios.system_id = system.system_id)158 WHERE...
bios_version
Using AI Code Generation
1$must = new must;2echo $must->bios_version();3$must = new must;4echo $must->bios_version();5$must = new must;6echo $must->bios_version();7$must = new must;8echo $must->bios_version();9$must = new must;10echo $must->bios_version();11$must = new must;12echo $must->bios_version();13$must = new must;14echo $must->bios_version();15$must = new must;16echo $must->bios_version();17$must = new must;18echo $must->bios_version();19$must = new must;20echo $must->bios_version();21$must = new must;22echo $must->bios_version();23$must = new must;24echo $must->bios_version();25$must = new must;26echo $must->bios_version();27$must = new must;28echo $must->bios_version();29$must = new must;30echo $must->bios_version();31$must = new must;32echo $must->bios_version();
bios_version
Using AI Code Generation
1require_once 'must.php';2$must=new must();3echo $must->bios_version();4require_once 'must.php';5$must=new must();6echo $must->bios_version();7require_once 'must.php';8$must=new must();9echo $must->bios_version();10require_once 'must.php';11$must=new must();12echo $must->bios_version();13require_once 'must.php';14$must=new must();15echo $must->bios_version();16require_once 'must.php';17$must=new must();18echo $must->bios_version();19require_once 'must.php';20$must=new must();21echo $must->bios_version();22require_once 'must.php';23$must=new must();24echo $must->bios_version();25require_once 'must.php';26$must=new must();27echo $must->bios_version();28require_once 'must.php';29$must=new must();30echo $must->bios_version();31require_once 'must.php';32$must=new must();33echo $must->bios_version();34require_once 'must.php';35$must=new must();36echo $must->bios_version();37require_once 'must.php';38$must=new must();39echo $must->bios_version();40require_once 'must.php';41$must=new must();42echo $must->bios_version();
bios_version
Using AI Code Generation
1$must->bios_version();2$must->bios_version();3$must->bios_version();4$must->bios_version();5$must->bios_version();6$must->bios_version();7$must->bios_version();8$must->bios_version();9$must->bios_version();10$must->bios_version();11$must->bios_version();12$must->bios_version();13$must->bios_version();14$must->bios_version();15$must->bios_version();16$must->bios_version();17$must->bios_version();18$must->bios_version();
bios_version
Using AI Code Generation
1$must = new must;2echo $must->bios_version();3$must = new must;4echo $must->bios_version();5$must = new must;6echo $must->bios_version();7$must = new must;8echo $must->bios_version();
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Execute automation tests with bios_version on a cloud-based Grid of 3000+ real browsers and operating systems for both web and mobile applications.
Test now for FreeGet 100 minutes of automation test minutes FREE!!