def test_write_file_displays_errors(self, mock_open_file, mock_print_error): mock_open_file.side_effect = IOError() fileutils.write_file(self.fake_path, 'foo data', continue_on_error=True, display_errors=True) self.assertTrue(mock_print_error.called)
def test_write_file_exits_code_6_when_continue_on_error_is_false( self, mock_open_file): mock_open_file.side_effect = IOError() with self.assertRaises(SystemExit) as context: fileutils.write_file(self.fake_path, 'foo data', continue_on_error=False) self.assertEqual(context.exception.code, 6)
def test_write_file_writes_data_to_file(self, mock_open_file): fake_data = 'some fake data' fileutils.write_file(self.fake_path, fake_data) self.assertEqual(mock_open_file.call_args[0][0], self.fake_path) self.assertEqual(mock_open_file.call_args[0][1], 'w') opened_file = mock_open_file.return_value.__enter__() self.assertTrue(opened_file.write.called) self.assertEqual(opened_file.write.call_args[0][0], fake_data)
def _locked_write(self): """Writes credentials to disk while the file lock is held.""" assert self._lock.is_locked if not self.filename: # If no filename was provided to the constructor, these credentials cannot # be saved to disk. raise CredentialsError( 'The credentials have no associated filename and cannot be saved ' 'to disk.') fileutils.write_file(self._filename, self.to_json())
def test_write_file_continues_on_errors_without_displaying( self, mock_open_file, mock_print_error): mock_open_file.side_effect = IOError() status = fileutils.write_file(self.fake_path, 'foo data', continue_on_error=True, display_errors=False) self.assertFalse(status) self.assertFalse(mock_print_error.called)
def doGetCrosInfo(): cd = gapi_directory.build() i, devices = getCrOSDeviceEntity(3, cd) downloadfile = None targetFolder = GC_Values[GC_DRIVE_DIR] projection = None fieldsList = [] noLists = False startDate = endDate = None listLimit = 0 while i < len(sys.argv): myarg = sys.argv[i].lower().replace('_', '') if myarg == 'nolists': noLists = True i += 1 elif myarg == 'listlimit': listLimit = gam.getInteger(sys.argv[i + 1], myarg, minVal=-1) i += 2 elif myarg in CROS_START_ARGUMENTS: startDate = _getFilterDate(sys.argv[i + 1]) i += 2 elif myarg in CROS_END_ARGUMENTS: endDate = _getFilterDate(sys.argv[i + 1]) i += 2 elif myarg == 'allfields': projection = 'FULL' fieldsList = [] i += 1 elif myarg in PROJECTION_CHOICES_MAP: projection = PROJECTION_CHOICES_MAP[myarg] if projection == 'FULL': fieldsList = [] else: fieldsList = CROS_BASIC_FIELDS_LIST[:] i += 1 elif myarg in CROS_ARGUMENT_TO_PROPERTY_MAP: fieldsList.extend(CROS_ARGUMENT_TO_PROPERTY_MAP[myarg]) i += 1 elif myarg == 'fields': fieldNameList = sys.argv[i + 1] for field in fieldNameList.lower().replace(',', ' ').split(): if field in CROS_ARGUMENT_TO_PROPERTY_MAP: fieldsList.extend(CROS_ARGUMENT_TO_PROPERTY_MAP[field]) if field in CROS_ACTIVE_TIME_RANGES_ARGUMENTS + \ CROS_DEVICE_FILES_ARGUMENTS + \ CROS_RECENT_USERS_ARGUMENTS: projection = 'FULL' noLists = False else: controlflow.invalid_argument_exit(field, 'gam info cros fields') i += 2 elif myarg == 'downloadfile': downloadfile = sys.argv[i + 1] if downloadfile.lower() == 'latest': downloadfile = downloadfile.lower() i += 2 elif myarg == 'targetfolder': targetFolder = os.path.expanduser(sys.argv[i + 1]) if not os.path.isdir(targetFolder): os.makedirs(targetFolder) i += 2 else: controlflow.invalid_argument_exit(sys.argv[i], 'gam info cros') if fieldsList: fieldsList.append('deviceId') fields = ','.join(set(fieldsList)).replace('.', '/') else: fields = None i = 0 device_count = len(devices) for deviceId in devices: i += 1 cros = gapi.call(cd.chromeosdevices(), 'get', customerId=GC_Values[GC_CUSTOMER_ID], deviceId=deviceId, projection=projection, fields=fields) print(f'CrOS Device: {deviceId} ({i} of {device_count})') if 'notes' in cros: cros['notes'] = cros['notes'].replace('\n', '\\n') if 'autoUpdateExpiration' in cros: cros['autoUpdateExpiration'] = utils.formatTimestampYMD( cros['autoUpdateExpiration']) _checkTPMVulnerability(cros) for up in CROS_SCALAR_PROPERTY_PRINT_ORDER: if up in cros: if isinstance(cros[up], str): print(f' {up}: {cros[up]}') else: sys.stdout.write(f' {up}:') display.print_json(cros[up], ' ') if not noLists: activeTimeRanges = _filterTimeRanges( cros.get('activeTimeRanges', []), startDate, endDate) lenATR = len(activeTimeRanges) if lenATR: print(' activeTimeRanges') num_ranges = min(lenATR, listLimit or lenATR) for activeTimeRange in activeTimeRanges[:num_ranges]: active_date = activeTimeRange['date'] active_time = activeTimeRange['activeTime'] duration = utils.formatMilliSeconds(active_time) minutes = active_time // 60000 print(f' date: {active_date}') print(f' activeTime: {active_time}') print(f' duration: {duration}') print(f' minutes: {minutes}') recentUsers = cros.get('recentUsers', []) lenRU = len(recentUsers) if lenRU: print(' recentUsers') num_ranges = min(lenRU, listLimit or lenRU) for recentUser in recentUsers[:num_ranges]: useremail = recentUser.get('email') if not useremail: if recentUser['type'] == 'USER_TYPE_UNMANAGED': useremail = 'UnmanagedUser' else: useremail = 'Unknown' print(f' type: {recentUser["type"]}') print(f' email: {useremail}') deviceFiles = _filterCreateReportTime(cros.get('deviceFiles', []), 'createTime', startDate, endDate) lenDF = len(deviceFiles) if lenDF: num_ranges = min(lenDF, listLimit or lenDF) print(' deviceFiles') for deviceFile in deviceFiles[:num_ranges]: device_type = deviceFile['type'] create_time = deviceFile['createTime'] print(f' {device_type}: {create_time}') if downloadfile: deviceFiles = cros.get('deviceFiles', []) lenDF = len(deviceFiles) if lenDF: if downloadfile == 'latest': deviceFile = deviceFiles[-1] else: for deviceFile in deviceFiles: if deviceFile['createTime'] == downloadfile: break else: print(f'ERROR: file {downloadfile} not ' \ f'available to download.') deviceFile = None if deviceFile: created = deviceFile['createTime'] downloadfile = f'cros-logs-{deviceId}-{created}.zip' downloadfilename = os.path.join( targetFolder, downloadfile) dl_url = deviceFile['downloadUrl'] _, content = cd._http.request(dl_url) fileutils.write_file(downloadfilename, content, mode='wb', continue_on_error=True) print(f'Downloaded: {downloadfilename}') elif downloadfile: print('ERROR: no files to download.') cpuStatusReports = _filterCreateReportTime( cros.get('cpuStatusReports', []), 'reportTime', startDate, endDate) lenCSR = len(cpuStatusReports) if lenCSR: print(' cpuStatusReports') num_ranges = min(lenCSR, listLimit or lenCSR) for cpuStatusReport in cpuStatusReports[:num_ranges]: print(f' reportTime: {cpuStatusReport["reportTime"]}') print(' cpuTemperatureInfo') tempInfos = cpuStatusReport.get('cpuTemperatureInfo', []) for tempInfo in tempInfos: temp_label = tempInfo['label'].strip() temperature = tempInfo['temperature'] print(f' {temp_label}: {temperature}') if 'cpuUtilizationPercentageInfo' in cpuStatusReport: pct_info = cpuStatusReport[ 'cpuUtilizationPercentageInfo'] util = ','.join([str(x) for x in pct_info]) print(f' cpuUtilizationPercentageInfo: {util}') diskVolumeReports = cros.get('diskVolumeReports', []) lenDVR = len(diskVolumeReports) if lenDVR: print(' diskVolumeReports') print(' volumeInfo') num_ranges = min(lenDVR, listLimit or lenDVR) for diskVolumeReport in diskVolumeReports[:num_ranges]: volumeInfo = diskVolumeReport['volumeInfo'] for volume in volumeInfo: vid = volume['volumeId'] vstorage_free = volume['storageFree'] vstorage_total = volume['storageTotal'] print(f' volumeId: {vid}') print(f' storageFree: {vstorage_free}') print(f' storageTotal: {vstorage_total}') systemRamFreeReports = _filterCreateReportTime( cros.get('systemRamFreeReports', []), 'reportTime', startDate, endDate) lenSRFR = len(systemRamFreeReports) if lenSRFR: print(' systemRamFreeReports') num_ranges = min(lenSRFR, listLimit or lenSRFR) for systemRamFreeReport in systemRamFreeReports[:num_ranges]: report_time = systemRamFreeReport['reportTime'] free_info = systemRamFreeReport['systemRamFreeInfo'] free_ram = ','.join(free_info) print(f' reportTime: {report_time}') print(f' systemRamFreeInfo: {free_ram}')
def create(): verif = build() a_domain = sys.argv[3] txt_record = gapi.call(verif.webResource(), 'getToken', body={ 'site': { 'type': 'INET_DOMAIN', 'identifier': a_domain }, 'verificationMethod': 'DNS_TXT' }) print(f'TXT Record Name: {a_domain}') print(f'TXT Record Value: {txt_record["token"]}') print() cname_record = gapi.call(verif.webResource(), 'getToken', body={ 'site': { 'type': 'INET_DOMAIN', 'identifier': a_domain }, 'verificationMethod': 'DNS_CNAME' }) cname_token = cname_record['token'] cname_list = cname_token.split(' ') cname_subdomain = cname_list[0] cname_value = cname_list[1] print(f'CNAME Record Name: {cname_subdomain}.{a_domain}') print(f'CNAME Record Value: {cname_value}') print('') webserver_file_record = gapi.call( verif.webResource(), 'getToken', body={ 'site': { 'type': 'SITE', 'identifier': f'http://{a_domain}/' }, 'verificationMethod': 'FILE' }) webserver_file_token = webserver_file_record['token'] print(f'Saving web server verification file to: {webserver_file_token}') fileutils.write_file(webserver_file_token, f'google-site-verification: {webserver_file_token}', continue_on_error=True) print(f'Verification File URL: http://{a_domain}/{webserver_file_token}') print() webserver_meta_record = gapi.call( verif.webResource(), 'getToken', body={ 'site': { 'type': 'SITE', 'identifier': f'http://{a_domain}/' }, 'verificationMethod': 'META' }) print(f'Meta URL: http://{a_domain}/') print(f'Meta HTML Header Data: {webserver_meta_record["token"]}') print()