def test_01_get_default_routes(): results = GET("/network/general/summary/") assert results.status_code == 200 assert isinstance(results.json(), dict), results.text assert isinstance(results.json()['default_routes'], list), results.text global gateway gateway = results.json()['default_routes'][0]
def test_16_verify_jail_stopped(): global freeze global freeze_msg if freeze is True: pytest.skip(freeze_msg) freeze = False stop_time = time.time() + 600 while True: get_job = GET(f'/core/get_jobs/?id={JOB_ID}') job_status = get_job.json()[0] if job_status['state'] in ('RUNNING', 'WAITING'): if stop_time <= time.time(): freeze = True freeze_msg = f"Failed to stop jail: {JAIL_NAME}" assert False, get_job.text break time.sleep(3) else: results = GET('/jail/') assert results.status_code == 200, results.text assert len(results.json()) > 0, get_job.text assert results.json()[0]['state'].lower() == 'down', results.text break
def test_03_Checking_that_API_reports_LLDP_configuration_as_saved(): results = GET("/lldp") assert results.status_code == 200, results.text data = results.json() assert data["country"] == COUNTRY assert data["intdesc"] == INTDESC assert data["location"] == LOCATION
def test_01_get_ups_service_id(): global ups_id results = GET('/service/?service=ups') assert results.status_code == 200, results.text assert results.json()[0]['state'] == 'STOPPED', results.text assert results.json()[0]['enable'] is False, results.text ups_id = results.json()[0]['id']
def test_02_Check_ntpserver_configured_using_api(ntp_dict): results = GET('/system/ntpserver/?id=1') assert results.status_code == 200, results.text data = results.json() assert isinstance(data, list), data assert len(data) == 1, data assert data[0]['address'] == ntpServer, data
def test_14_verify_exec_call(): global freeze global freeze_msg if freeze is True: pytest.skip(freeze_msg) freeze = False stop_time = time.time() + 600 while True: get_job = GET(f'/core/get_jobs/?id={JOB_ID}') job_status = get_job.json()[0] if job_status['state'] in ('RUNNING', 'WAITING'): if stop_time <= time.time(): freeze = True freeze_msg = f"Failed to exec into jail: {JAIL_NAME}" assert False, get_job.text break time.sleep(3) else: results = job_status['result'] assert get_job.status_code == 200, results.text assert 'exec successful' in results, results.text break
def test_02_system_advanced_serial_port_choices(sysadv_dict): results = GET('/system/advanced/serial_port_choices/') assert results.status_code == 200, results.text data = results.json() sysadv_dict['serial_choices'] = data assert isinstance(data, list), data assert len(data) > 0, data
def test_04_ipmi_is_loaded(): global IPMI_LOADED result = GET( '/ipmi/is_loaded' ) IPMI_LOADED = result.json() assert isinstance(result.json(), bool), result.text
def test_02_check_staticroute_configured_using_api(sr_dict): results = GET(f'/staticroute/?id={sr_dict["newroute"]["id"]}') assert results.status_code == 200, results.text data = results.json() assert isinstance(data, list), data assert len(data) == 1, data assert data[0]['destination'] == DESTINATION, data assert data[0]['gateway'] == GATEWAY, data
def test_03_get_vm_query(data): if nested_vm is False: pytest.skip(message) else: results = GET(f'/vm/?id={data["vmid"]}') assert results.status_code == 200, results.text assert isinstance(results.json(), list) is True, results.text global vmware_query vmware_query = results
def test_05_get_download_update(): if update_version is None: pytest.skip('No update found') else: results = GET('/update/download/') global JOB_ID assert results.status_code == 200, results.text assert isinstance(results.json(), int) is True, results.text JOB_ID = results.json()
def test_07_Validate_that_SNMP_settings_are_preserved(): results = GET('/snmp') assert results.status_code == 200, results.text data = results.json() assert data['community'] == COMMUNITY assert data['traps'] == TRAPS assert data['contact'] == CONTACT assert data['location'] == LOCATION assert data['v3_password'] == PASSWORD
def test_03_get_interface_aliases_broadcast_ip(): results = GET(f'/interface?name={interface}') assert results.status_code == 200, results.text assert isinstance(results.json(), list) is True, results.text for aliases_list in results.json()[0]['state']['aliases']: if ip in aliases_list['address']: broadcast_ip = aliases_list['broadcast'] break assert isinstance(broadcast_ip, str) is True, results.text aliases['broadcast'] = broadcast_ip
def test_05_get_interface_aliases_netmask(): results = GET(f'/interface?name={interface}') assert results.status_code == 200, results.text assert isinstance(results.json(), list) is True, results.text for aliases_list in results.json()[0]['state']['aliases']: if ip in aliases_list['address']: netmask = aliases_list['netmask'] break assert isinstance(netmask, int) is True, results.text aliases['netmask'] = netmask
def test_02_get_interface_aliases_ip(): results = GET(f'/interface?name={interface}') assert results.status_code == 200, results.text assert isinstance(results.json(), list) is True, results.text for aliases_list in results.json()[0]['state']['aliases']: assert isinstance(aliases_list['address'], str) is True, results.text # no break to look all address value are string if ip in aliases_list['address']: interface_ip = aliases_list['address'] assert interface_ip == ip, results.text
def test_04_get_interface_aliases_type(): results = GET(f'/interface?name={interface}') assert results.status_code == 200, results.text assert isinstance(results.json(), list) is True, results.text for aliases_list in results.json()[0]['state']['aliases']: assert isinstance(aliases_list['type'], str) is True, results.text # no break to look all address value are string if ip in aliases_list['address']: types = aliases_list['type'] assert types in ('INET', 'INET6'), results.text aliases['type'] = types
def test_03_Check_that_API_reports_dynsdns_configuration_as_saved(): results = GET('/dyndns/') assert results.status_code == 200, results.text data = results.json() if test == 'NOIP': assert data['username'] == NOIPPASSWORD assert data['provider'] == '*****@*****.**' assert data['domain'] == NOIPHOST else: assert data['username'] == 'foo' assert data['provider'] == 'ixsystems.com' assert data['domain'] == ['foobar']
def test_01_Create_a_new_SMARTTest(): disk_identifiers = GET("/storage/disk").json()["disk_identifier"] global disk_ident disk_indent = disk_identifiers.split()[0] payload = {"smarttest_disks": disk_indent, "smarttest_type": "L", "smarttest_hour": "*", "smarttest_daymonth": "*", "smarttest_month": "*", "smarttest_dayweek": "*"} results = POST("/tasks/smarttest/", payload) assert results.status_code == 201, results.text
def test_01_update_s3_service(): volumes = GET("/storage/volume/", api="1") if volumes: result = PUT('/s3/', { 'bindip': '0.0.0.0', 'bindport': 9000, 'access_key': ACCESS_KEY, 'secret_key': SECRET_KEY, 'browser': True, 'storage_path': volumes.json()[0]['mountpoint'] }) assert result.status_code == 200, result.text
def test_04_verify_boot_scrub_job(): stop_time = time() + 600 while True: get_job = GET(f'/core/get_jobs/?id={JOB_ID}') job_status = get_job.json()[0] if job_status['state'] in ('RUNNING', 'WAITING'): if stop_time <= time(): assert False, "Job Timeout\n\n" + get_job.text break sleep(5) else: assert job_status['state'] == 'SUCCESS', get_job.text break
def test_09_verify_the_update_is_successful(): if update_version is None: pytest.skip('No update found') elif download_failed is True: pytest.skip(f'Downloading {selected_trains} failed') else: while True: get_job = GET(f'/core/get_jobs/?id={JOB_ID}') job_status = get_job.json()[0] if job_status['state'] in ('RUNNING', 'WAITING'): sleep(5) else: assert job_status['state'] == 'SUCCESS', get_job.text break
def test_14_verify_initial_version_is_not_current_FreeNAS_version(): if update_version is None: pytest.skip('No update found') elif download_failed is True: pytest.skip(f'Downloading {selected_trains} failed') elif reboot is False: pytest.skip(f'Reboot is False skip') else: global results, current_version results = GET("/system/info/") assert results.status_code == 200, results.text assert isinstance(results.json(), dict) is True, results.text current_version = results.json()['version'] assert initial_version != current_version, results.text
def test_05_verify_bsd_release(): global freeze freeze = False global freeze_msg stop_time = time.time() + 600 while True: get_job = GET(f'/core/get_jobs/?id={JOB_ID}') job_status = get_job.json()[0] if job_status['state'] in ('RUNNING', 'WAITING'): if stop_time <= time.time(): freeze = True freeze_msg = f"Failed to fetch {RELEASE}" assert False, get_job.text break time.sleep(5) else: results = POST('/jail/list_resource/', {'resource': 'RELEASE'}) assert RELEASE in results.json(), get_job.text break
def test_01_create_a_new_smarttest(smart_dict): disks = GET('/disk/') assert disks.status_code == 200, disks.text disks = disks.json() assert isinstance(disks, list), disks assert len(disks) > 0, disks idents = smart_dict['idents'] = [d['identifier'] for d in disks] results = POST('/smart/test/', { 'disks': idents, 'type': 'LONG', 'schedule': { 'hour': '*', 'dom': '*', 'month': '*', 'dow': '*', }, }) assert results.status_code == 200, results.text smart_dict['smarttest'] = results.json()
def test_03_Checking_that_API_reports_LLDP_configuration_as_saved(): results = GET("/services/lldp/") assert results.json()["lldp_country"] == COUNTRY results = GET("/services/lldp/") assert results.json()["lldp_intdesc"] == INTDESC results = GET("/services/lldp/") assert results.json()["lldp_location"] == LOCATION
def test_06_verify_the_update_download_is_successful(): if update_version is None: pytest.skip('No update found') else: global download_failed stop_time = time() + 600 download_failed = False while True: get_job = GET(f'/core/get_jobs/?id={JOB_ID}') job_status = get_job.json()[0] if job_status['state'] in ('RUNNING', 'WAITING'): if stop_time <= time(): download_failed = True assert job_status['state'] == 'SUCCESS', get_job.text break sleep(5) elif job_status['state'] != 'SUCCESS': download_failed = True assert job_status['state'] == 'SUCCESS', get_job.text break else: assert job_status['state'] == 'SUCCESS', get_job.text break
def test_07_verify_creation_of_jail(): global freeze global freeze_msg if freeze is True: pytest.skip(freeze_msg) freeze = False stop_time = time.time() + 600 while True: get_job = GET(f'/core/get_jobs/?id={JOB_ID}') job_status = get_job.json()[0] if job_status['state'] in ('RUNNING', 'WAITING'): if stop_time <= time.time(): freeze = True freeze_msg = f"Failed to create jail {RELEASE}" assert False, get_job.text break time.sleep(3) else: results = GET('/jail/') assert results.status_code == 200, results.text assert len(results.json()) > 0, get_job.text break
def test_065_checking_to_see_if_nfs_service_is_running(request): depends(request, ["pool_04", "smb_001", "smb_003"], scope="session") results = GET("/service?service=cifs") assert results.json()[0]["state"] == "RUNNING", results.text
def test_085_verify_that_recyclebin_is_true(request): depends(request, ["pool_04", "smb_001", "smb_003"], scope="session") results = GET(f"/sharing/smb/id/{smb_id}/") assert results.status_code == 200, results.text assert results.json()['recyclebin'] is True, results.text
def test_01_get_initial_FreeNAS_version(): results = GET("/system/info/") assert results.status_code == 200, results.text assert isinstance(results.json(), dict) is True, results.text global initial_version initial_version = results.json()['version']
def test_111_checking_if_cifs_is_stop(request): depends(request, ["pool_04", "smb_001", "smb_003"], scope="session") results = GET("/service?service=cifs") assert results.json()[0]['state'] == "STOPPED", results.text
def test_07_Checking_to_see_if_SMB_service_is_enabled(): results = GET("/services/services/cifs/") assert results.json()["srv_state"] == "RUNNING", results.text
def test_45_delete_cifs_share(): smbid = GET(f'/sharing/smb/?name={SMB_NAME}').json()[0]['id'] results = DELETE(f"/sharing/smb/id/{smbid}") assert results.status_code == 200, results.text
def test_37_Verify_SMB_service_is_disabled(): results = GET("/services/services/cifs/") assert results.json()["srv_state"] == "STOPPED", results.text
def test_04_looking_number(disk): results = GET(f'/disk?name={disk}') assert results.status_code == 200, results.text assert isinstance(results.json()[0]['number'], int), results.text
def test_02_Check_getting_disks(self): assert GET("/storage/volume/") == 200
def test_01_Check_getting_disks(self): assert GET("/storage/disk/") == 200
def test_08_Check_that_the_API_reports_the_cronjob_as_deleted(cronjob_dict): id = cronjob_dict['id'] results = GET(f'/cronjob?id={id}') assert results.json() == [], results.text
def test_04_system_advanced_check_serial_port_using_api(sysadv_dict): results = GET('/system/advanced/') assert results.status_code == 200, results.text data = results.json() assert isinstance(data, dict) assert data['serialport'] == sysadv_dict['serial_choices'][0]
def test_49_checking_if_cifs_is_stop(): results = GET("/service?service=cifs") assert results.json()[0]['state'] == "STOPPED", results.text
def test_010_test_aux_param_on_update(request): depends(request, ["SHARES_CREATED", "ssh_password"], scope="session") results = GET('/sharing/smb', payload={ 'query-filters': [['id', '=', SHARE_DICT["REGISTRYTEST_0"]]], 'query-options': { 'get': True }, }) assert results.status_code == 200, results.text old_aux = results.json()['auxsmbconf'] results = PUT(f'/sharing/smb/id/{SHARE_DICT["REGISTRYTEST_0"]}/', {"auxsmbconf": '\n'.join(SAMPLE_AUX)}) assert results.status_code == 200, results.text new_aux = results.json()['auxsmbconf'] new_name = results.json()['name'] ncomments_sent = 0 ncomments_recv = 0 for entry in old_aux.splitlines(): """ Verify that aux params from last preset applied are still in effect. Parameters included in SAMPLE_AUX will never be in a preset so risk of collision is minimal. """ aux, val = entry.split('=', 1) cmd = f'midclt call smb.getparm "{aux.strip()}" {new_name}' results = SSH_TEST(cmd, user, password, ip) assert results['result'] is True, f"[{entry}]: {results['output']}" out = results['output'].strip() inval = val.strip() assert inval == out, f"[{entry}]: {out}" for entry in new_aux.splitlines(): """ Verify that non-comment parameters were successfully applied to the running configuration. """ if not entry: continue if entry.startswith(('#', ';')): ncomments_recv += 1 continue aux, val = entry.split('=', 1) cmd = f'midclt call smb.getparm "{aux.strip()}" {new_name}' results = SSH_TEST(cmd, user, password, ip) assert results['result'] is True, f"[{entry}]: {results['output']}" out = results['output'].strip() inval = val.strip() if aux.strip() == "vfs objects": new_obj = inval.split() assert new_obj == json.loads(out), f"[{entry}]: {out}" else: assert inval == out, f"[{entry}]: {out}" """ Verify comments aren't being stripped on update """ for entry in SAMPLE_AUX: if entry.startswith(('#', ';')): ncomments_sent += 1 assert ncomments_sent == ncomments_recv, new_aux
def test_04_Checking_LDAP(): results = GET("/directoryservice/ldap/") assert results.json()["ldap_enable"] is True, results.text
def test_06_get_for_disk1_id(): global DISK_ID results = GET(f'/disk?name={disk_list[1]}') assert results.status_code == 200, results.text DISK_ID = results.json()[0]['identifier']
def test_28_update_cifs_share(): smbid = GET(f'/sharing/smb/?name={SMB_NAME}').json()[0]['id'] results = PUT(f"/sharing/smb/id/{smbid}/", {"home": False}) assert results.status_code == 200, results.text
def test_109_checking_to_see_if_clif_service_is_enabled_at_boot(request): depends(request, ["pool_04", "smb_001", "smb_003"], scope="session") results = GET("/service?service=cifs") assert results.json()[0]["enable"] is False, results.text
def test_36_Verify_LDAP_is_disabled(): results = GET("/directoryservice/ldap/") assert results.json()["ldap_enable"] is False, results.text
def test_05_looking_disk0_identifier_and_serial_match(disk): results = GET(f'/disk?name={disk}') assert results.status_code == 200, results.text identifier_serial = results.json()[0]['identifier'] serial = results.json()[0]['serial'] assert serial in identifier_serial, results.text
def test_01_get_certificate_query(): results = GET('/certificate/') assert results.status_code == 200, results.text assert isinstance(results.json(), list), results.text
def test_01_system_advanced_get(): results = GET('/system/advanced/') assert results.status_code == 200, results.text assert isinstance(results.json(), dict)
def test_104_verify_smb_sharesec_change_for(request, ae): depends(request, ["pool_04", "smb_001", "smb_003"], scope="session") results = GET(f"/smb/sharesec/id/{share_id}/") assert results.status_code == 200, results.text ae_result = results.json()['share_acl'][0][ae] assert ae_result == payload['share_acl'][0][ae], results.text
def test_05_Checking_that_API_reports_the_cronjob_as_updated(cronjob_dict): id = cronjob_dict['id'] results = GET(f'/cronjob?id={id}') assert results.json()[0]['enabled'] is False
def test_01_verify_default_acltype_from_pool_dataset_with_api(request): depends(request, ["pool_04"], scope="session") results = GET(f'/pool/dataset/id/{pool_name}/') assert results.status_code == 200, results.text assert results.json()['acltype']['rawvalue'] == 'posix', results.text
def test_02_Checking_to_see_if_cronjob_was_created_and_enabled(cronjob_dict): id = cronjob_dict['id'] results = GET(f'/cronjob?id={id}') assert results.json()[0]['enabled'] is True
def test_01_verifying_that_the_installer_created_all_disk(): results = GET('/disk/') assert results.status_code == 200, results.text assert len(results.json()) == len(disk_list)
def test_10_get_new_next_uid(request): depends(request, ["user_02", "user_01"]) results = GET('/user/get_next_uid/') assert results.status_code == 200, results.text global new_next_uid new_next_uid = results.json()
def test_02_get_update_trains(): results = GET('/update/get_trains/') assert results.status_code == 200, results.text assert isinstance(results.json(), dict) is True, results.text global selected_trains selected_trains = results.json()['selected']
def test_05_checking_to_see_if_clif_service_is_enabled_at_boot(): results = GET("/service?service=cifs") assert results.json()[0]["enable"] is True, results.text
def test_02_looking_for_disk(disk): results = GET(f'/disk?name={disk}') assert results.status_code == 200, results.text assert results.json()[0]['name'] == disk
def test_09_system_advanced_check_motd_using_api(): results = GET('/system/advanced/') assert results.status_code == 200, results.text data = results.json() assert isinstance(data, dict) assert data['motd'] == MOTD
def test_07_checking_to_see_if_nfs_service_is_running(): results = GET("/service?service=cifs") assert results.json()[0]["state"] == "RUNNING", results.text