def setup_p2p_test(request, setup_p2p_suite): """Test setup fixture for p2p client tests""" log_info("Setting up P2P test ...") liteserv_one = setup_p2p_suite["liteserv_one"] liteserv_two = setup_p2p_suite["liteserv_two"] test_name = request.node.name print("Starting LiteServ One ...") ls_logging_one = "{}/logs/{}-ls1-{}-{}.txt".format(RESULTS_DIR, type(liteserv_one).__name__, test_name, datetime.datetime.now()) ls_url_one = liteserv_one.start(ls_logging_one) print("Starting LiteServ Two ...") ls_logging_two = "{}/logs/{}-ls2-{}-{}.txt".format(RESULTS_DIR, type(liteserv_two).__name__, test_name, datetime.datetime.now()) ls_url_two = liteserv_two.start(ls_logging_two) # Yield values to test case via fixture argument yield {"ls_url_one": ls_url_one, "ls_url_two": ls_url_two} log_info("Tearing down test") # Teardown test client = MobileRestClient() client.delete_databases(ls_url_one) client.delete_databases(ls_url_two) liteserv_one.stop() liteserv_two.stop()
def setup_p2p_test(request, setup_p2p_suite): """Test setup fixture for p2p client tests""" log_info("Setting up P2P test ...") liteserv_one = setup_p2p_suite["liteserv_one"] liteserv_two = setup_p2p_suite["liteserv_two"] test_name = request.node.name print("Starting LiteServ One ...") ls_logging_one = "{}/logs/{}-ls1-{}-{}.txt".format(RESULTS_DIR, type(liteserv_one).__name__, test_name, datetime.datetime.now()) ls_url_one = liteserv_one.start(ls_logging_one) print("Starting LiteServ Two ...") ls_logging_two = "{}/logs/{}-ls2-{}-{}.txt".format(RESULTS_DIR, type(liteserv_two).__name__, test_name, datetime.datetime.now()) ls_url_two = liteserv_two.start(ls_logging_two) # Yield values to test case via fixture argument yield {"ls_url_one": ls_url_one, "ls_url_two": ls_url_two} log_info("Tearing down test") # Teardown test client = MobileRestClient() client.delete_databases(ls_url_one) client.delete_databases(ls_url_two) liteserv_one.stop() liteserv_two.stop()
def setup_client_syncgateway_test(request, setup_client_syncgateway_suite): """Test setup fixture for client sync_gateway tests""" log_info("Setting up client sync_gateway test ...") liteserv = setup_client_syncgateway_suite["liteserv"] cluster_config = setup_client_syncgateway_suite["cluster_config"] xattrs_enabled = setup_client_syncgateway_suite["xattrs_enabled"] device_enabled = setup_client_syncgateway_suite["device_enabled"] liteserv_platform = setup_client_syncgateway_suite["liteserv_platform"] liteserv_version = setup_client_syncgateway_suite["liteserv_version"] test_name = request.node.name if request.config.getoption("--liteserv-platform") == "macosx" and \ str(request.config.getoption("--liteserv-version")).startswith("1.3.1") and \ str(test_name).startswith("test_longpoll_changes_termination"): pytest.skip("test_longpoll_changes_termination tests are known to fail on macosx with 1.3.1 CBL") client = MobileRestClient() # Start LiteServ and delete any databases log_info("Starting LiteServ...") if device_enabled and liteserv_platform == "ios": ls_url = liteserv.start_device("{}/logs/{}-{}-{}.txt".format(RESULTS_DIR, type(liteserv).__name__, test_name, datetime.datetime.now())) else: ls_url = liteserv.start("{}/logs/{}-{}-{}.txt".format(RESULTS_DIR, type(liteserv).__name__, test_name, datetime.datetime.now())) client.delete_databases(ls_url) cluster_helper = ClusterKeywords() cluster_hosts = cluster_helper.get_cluster_topology(cluster_config=cluster_config) sg_url = cluster_hosts["sync_gateways"][0]["public"] sg_admin_url = cluster_hosts["sync_gateways"][0]["admin"] # Yield values to test case via fixture argument yield { "cluster_config": cluster_config, "sg_mode": setup_client_syncgateway_suite["sg_mode"], "ls_url": ls_url, "sg_url": sg_url, "sg_admin_url": sg_admin_url, "xattrs_enabled": xattrs_enabled, "liteserv": liteserv, "liteserv_platform": liteserv_platform, "device_enabled": device_enabled, "liteserv_version": liteserv_version } log_info("Tearing down test") client.delete_databases(ls_url) liteserv.stop() # if the test failed pull logs if request.node.rep_call.failed: logging_helper = Logging() logging_helper.fetch_and_analyze_logs(cluster_config=cluster_config, test_name=test_name)
def test_ios_full_life_cycle(request, liteserv_with_storage_engine_from_fixture): liteserv = liteserv_with_storage_engine_from_fixture test_name = request.node.name logfile = "{}/logs/{}-{}-{}.txt".format(RESULTS_DIR, type(liteserv).__name__, test_name, datetime.datetime.now()) ls_url = liteserv.start(logfile) client = MobileRestClient() client.create_database(ls_url, "ls_db") docs = client.add_docs(ls_url, db="ls_db", number=10, id_prefix="test_doc") assert len(docs) == 10 client.delete_databases(ls_url) liteserv.stop()
def test_net_msft_full_life_cycle(request, liteserv_with_storage_engine_from_fixture): liteserv = liteserv_with_storage_engine_from_fixture test_name = request.node.name logfile = "{}/logs/{}-{}-{}.txt".format(RESULTS_DIR, type(liteserv).__name__, test_name, datetime.datetime.now()) ls_url = liteserv.start(logfile) client = MobileRestClient() client.create_database(ls_url, "ls_db") docs = client.add_docs(ls_url, db="ls_db", number=10, id_prefix="test_doc") assert len(docs) == 10 client.delete_databases(ls_url) liteserv.stop()
def setup_client_syncgateway_test(request, setup_client_syncgateway_suite): """Test setup fixture for client sync_gateway tests""" log_info("Setting up client sync_gateway test ...") liteserv = setup_client_syncgateway_suite["liteserv"] cluster_config = setup_client_syncgateway_suite["cluster_config"] xattrs_enabled = setup_client_syncgateway_suite["xattrs_enabled"] test_name = request.node.name client = MobileRestClient() # Start LiteServ and delete any databases ls_url = liteserv.start("{}/logs/{}-{}-{}.txt".format( RESULTS_DIR, type(liteserv).__name__, test_name, datetime.datetime.now())) client.delete_databases(ls_url) cluster_helper = ClusterKeywords() cluster_hosts = cluster_helper.get_cluster_topology( cluster_config=cluster_config) sg_url = cluster_hosts["sync_gateways"][0]["public"] sg_admin_url = cluster_hosts["sync_gateways"][0]["admin"] # Yield values to test case via fixture argument yield { "cluster_config": cluster_config, "sg_mode": setup_client_syncgateway_suite["sg_mode"], "ls_url": ls_url, "sg_url": sg_url, "sg_admin_url": sg_admin_url, "xattrs_enabled": xattrs_enabled } log_info("Tearing down test") client.delete_databases(ls_url) liteserv.stop() # if the test failed pull logs if request.node.rep_call.failed: logging_helper = Logging() logging_helper.fetch_and_analyze_logs(cluster_config=cluster_config, test_name=test_name)
def setup_client_syncgateway_test(request, setup_client_syncgateway_suite): """Test setup fixture for client sync_gateway tests""" log_info("Setting up client sync_gateway test ...") liteserv = setup_client_syncgateway_suite test_name = request.node.name ls_url = liteserv.start( "{}/logs/{}-{}-{}.txt".format(RESULTS_DIR, type(liteserv).__name__, test_name, datetime.datetime.now()) ) cluster_helper = ClusterKeywords() sg_helper = SyncGateway() cluster_hosts = cluster_helper.get_cluster_topology(os.environ["CLUSTER_CONFIG"]) sg_url = cluster_hosts["sync_gateways"][0]["public"] sg_admin_url = cluster_hosts["sync_gateways"][0]["admin"] sg_helper.stop_sync_gateway(cluster_config=os.environ["CLUSTER_CONFIG"], url=sg_url) # Yield values to test case via fixture argument yield { "cluster_config": os.environ["CLUSTER_CONFIG"], "ls_url": ls_url, "sg_url": sg_url, "sg_admin_url": sg_admin_url, } log_info("Tearing down test") # Teardown test client = MobileRestClient() client.delete_databases(ls_url) liteserv.stop() sg_helper.stop_sync_gateway(cluster_config=os.environ["CLUSTER_CONFIG"], url=sg_url) # if the test failed pull logs if request.node.rep_call.failed: logging_helper = Logging() logging_helper.fetch_and_analyze_logs(cluster_config=os.environ["CLUSTER_CONFIG"], test_name=test_name)
def test_macosx_storage_engines(request, liteserv_with_storage_engine_from_fixture): liteserv = liteserv_with_storage_engine_from_fixture test_name = request.node.name logfile = "{}/logs/{}-{}-{}.txt".format(RESULTS_DIR, type(liteserv).__name__, test_name, datetime.datetime.now()) ls_url = liteserv.start(logfile) client = MobileRestClient() client.create_database(ls_url, "ls_db") storage_engine = liteserv.storage_engine log_info("Testing storage_engine: {}".format(storage_engine)) if storage_engine == "SQLite": db_files = os.listdir("results/dbs/macosx/ls_db.cblite2") assert "db.sqlite3" in db_files assert "db.sqlite3-shm" in db_files assert "db.sqlite3-wal" in db_files att_files = os.listdir("results/dbs/macosx/ls_db.cblite2/attachments") assert att_files == [] client.delete_databases(ls_url) assert not os.path.isdir("results/dbs/macosx/ls_db.cblite2/") elif storage_engine == "SQLCipher": db_files = os.listdir("results/dbs/macosx/ls_db.cblite2") assert "db.sqlite3" in db_files assert "db.sqlite3-shm" in db_files assert "db.sqlite3-wal" in db_files att_files = os.listdir("results/dbs/macosx/ls_db.cblite2/attachments") assert att_files == ["_encryption"] client.delete_databases(ls_url) assert not os.path.isdir("results/dbs/macosx/ls_db.cblite2/") elif storage_engine == "ForestDB": db_files = os.listdir("results/dbs/macosx/ls_db.cblite2") assert "db.forest.0" in db_files assert "db.forest.meta" in db_files att_files = os.listdir("results/dbs/macosx/ls_db.cblite2/attachments") assert att_files == [] client.delete_databases(ls_url) assert not os.path.isdir("results/dbs/macosx/ls_db.cblite2/") elif storage_engine == "ForestDB+Encryption": db_files = os.listdir("results/dbs/macosx/ls_db.cblite2") assert "db.forest.0" in db_files assert "db.forest.meta" in db_files att_files = os.listdir("results/dbs/macosx/ls_db.cblite2/attachments") assert att_files == ["_encryption"] client.delete_databases(ls_url) assert not os.path.isdir("results/dbs/macosx/ls_db.cblite2/") else: pytest.xfail("Invalid storage engine") liteserv.stop()
def test_net_mono_storage_engine(request, liteserv_with_storage_engine_from_fixture): liteserv = liteserv_with_storage_engine_from_fixture test_name = request.node.name logfile = "{}/logs/{}-{}-{}.txt".format(RESULTS_DIR, type(liteserv).__name__, test_name, datetime.datetime.now()) ls_url = liteserv.start(logfile) client = MobileRestClient() client.create_database(ls_url, "ls_db") storage_engine = liteserv.storage_engine log_info("Testing storage_engine: {}".format(storage_engine)) if storage_engine == "SQLite": db_files = os.listdir("results/dbs/net-mono/ls_db.cblite2") assert "db.sqlite3" in db_files assert "db.sqlite3-shm" in db_files assert "db.sqlite3-wal" in db_files att_files = os.listdir("results/dbs/net-mono/ls_db.cblite2/attachments") assert att_files == [] client.delete_databases(ls_url) assert not os.path.isdir("results/dbs/net-mono/ls_db.cblite2/") elif storage_engine == "SQLCipher": db_files = os.listdir("results/dbs/net-mono/ls_db.cblite2") assert "db.sqlite3" in db_files assert "db.sqlite3-shm" in db_files assert "db.sqlite3-wal" in db_files att_files = os.listdir("results/dbs/net-mono/ls_db.cblite2/attachments") assert att_files == ["_encryption"] client.delete_databases(ls_url) assert not os.path.isdir("results/dbs/net-mono/ls_db.cblite2/") elif storage_engine == "ForestDB": db_files = os.listdir("results/dbs/net-mono/ls_db.cblite2") assert "db.forest.0" in db_files assert "db.forest.meta" in db_files att_files = os.listdir("results/dbs/net-mono/ls_db.cblite2/attachments") assert att_files == [] client.delete_databases(ls_url) assert not os.path.isdir("results/dbs/net-mono/ls_db.cblite2/") elif storage_engine == "ForestDB+Encryption": db_files = os.listdir("results/dbs/net-mono/ls_db.cblite2") assert "db.forest.0" in db_files assert "db.forest.meta" in db_files att_files = os.listdir("results/dbs/net-mono/ls_db.cblite2/attachments") assert att_files == ["_encryption"] client.delete_databases(ls_url) assert not os.path.isdir("results/dbs/net-mono/ls_db.cblite2/") else: pytest.xfail("Invalid Storage Engine") liteserv.stop()
def params_from_base_test_setup(request, params_from_base_suite_setup): # Code before the yeild will execute before each test starts # pytest command line parameters cluster_config = params_from_base_suite_setup["cluster_config"] cluster_topology = params_from_base_suite_setup["cluster_topology"] mode = params_from_base_suite_setup["mode"] xattrs_enabled = params_from_base_suite_setup["xattrs_enabled"] server_version = params_from_base_suite_setup["server_version"] sync_gateway_version = params_from_base_suite_setup["sync_gateway_version"] server_upgraded_version = params_from_base_suite_setup[ "server_upgraded_version"] sync_gateway_upgraded_version = params_from_base_suite_setup[ "sync_gateway_upgraded_version"] liteserv_host = params_from_base_suite_setup["liteserv_host"] liteserv_port = params_from_base_suite_setup["liteserv_port"] liteserv_version = params_from_base_suite_setup["liteserv_version"] liteserv_platform = params_from_base_suite_setup["liteserv_platform"] liteserv_storage_engine = params_from_base_suite_setup[ "liteserv_storage_engine"] liteserv = params_from_base_suite_setup["liteserv"] num_docs = params_from_base_suite_setup["num_docs"] cbs_platform = params_from_base_suite_setup["cbs_platform"] cbs_toy_build = params_from_base_suite_setup["cbs_toy_build"] test_name = request.node.name log_info("Running test '{}'".format(test_name)) log_info("cluster_config: {}".format(cluster_config)) log_info("cluster_topology: {}".format(cluster_topology)) log_info("mode: {}".format(mode)) log_info("xattrs_enabled: {}".format(xattrs_enabled)) client = MobileRestClient() # Start LiteServ and delete any databases ls_url = liteserv.start("{}/logs/{}-{}-{}.txt".format( RESULTS_DIR, type(liteserv).__name__, test_name, datetime.datetime.now())) client.delete_databases(ls_url) cluster_helper = ClusterKeywords() cluster_hosts = cluster_helper.get_cluster_topology( cluster_config=cluster_config) sg_url = cluster_hosts["sync_gateways"][0]["public"] sg_admin_url = cluster_hosts["sync_gateways"][0]["admin"] if xattrs_enabled: log_info("Running upgrade with xattrs for sync meta storage") persist_cluster_config_environment_prop(cluster_config, 'xattrs_enabled', True) else: log_info("Using document storage for sync meta data") persist_cluster_config_environment_prop(cluster_config, 'xattrs_enabled', False) # This dictionary is passed to each test yield { "cluster_config": cluster_config, "cluster_topology": cluster_topology, "mode": mode, "xattrs_enabled": xattrs_enabled, "server_version": server_version, "sync_gateway_version": sync_gateway_version, "server_upgraded_version": server_upgraded_version, "sync_gateway_upgraded_version": sync_gateway_upgraded_version, "liteserv_host": liteserv_host, "liteserv_port": liteserv_port, "liteserv_version": liteserv_version, "liteserv_platform": liteserv_platform, "liteserv_storage_engine": liteserv_storage_engine, "ls_url": ls_url, "sg_url": sg_url, "sg_admin_url": sg_admin_url, "num_docs": num_docs, "cbs_platform": cbs_platform, "cbs_toy_build": cbs_toy_build } client.delete_databases(ls_url) liteserv.stop() # Code after the yield will execute when each test finishes log_info("Tearing down test '{}'".format(test_name)) network_utils = NetworkUtils() network_utils.list_connections() # Verify all sync_gateways and sg_accels are reachable c = cluster.Cluster(cluster_config) errors = c.verify_alive(mode) # Fetch logs logging_helper = Logging() logging_helper.fetch_and_analyze_logs(cluster_config=cluster_config, test_name=test_name) assert len(errors) == 0 # Scan logs # SG logs for panic, data race # System logs for OOM ansible_runner = AnsibleRunner(cluster_config) script_name = "{}/utilities/check_logs.sh".format(os.getcwd()) status = ansible_runner.run_ansible_playbook( "check-logs.yml", extra_vars={"script_name": script_name}) if status != 0: raise LogScanningError("Errors found in the logs")
def setup_client_2sgs_test(request): """Test setup fixture for client sync_gateway tests""" log_info("Setting up client sync_gateway test ...") liteserv_platform = request.config.getoption("--liteserv-platform") liteserv_version = request.config.getoption("--liteserv-version") liteserv_host = request.config.getoption("--liteserv-host") liteserv_port = request.config.getoption("--liteserv-port") liteserv_storage_engine = request.config.getoption("--liteserv-storage-engine") ls = LiteServ() client = MobileRestClient() test_name = request.node.name # Verify LiteServ is not running ls.verify_liteserv_not_running(host=liteserv_host, port=liteserv_port) ls_cluster_target = None if liteserv_platform == "net-win": ls_cluster_target = "resources/cluster_configs/windows" print("Starting LiteServ ...") if liteserv_platform != "net-win": # logging is file ls_logging = open("{}/logs/{}-ls1-{}-{}.txt".format(RESULTS_DIR, datetime.datetime.now(), liteserv_platform, test_name), "w") else: # logging is name ls_logging = "{}/logs/{}-ls1-{}-{}.txt".format(RESULTS_DIR, datetime.datetime.now(), liteserv_platform, test_name) ls_url, ls_handle = ls.start_liteserv( platform=liteserv_platform, version=liteserv_version, host=liteserv_host, port=liteserv_port, storage_engine=liteserv_storage_engine, logfile=ls_logging, cluster_config=ls_cluster_target ) cluster_helper = ClusterKeywords() sg_helper = SyncGateway() cluster_hosts = cluster_helper.get_cluster_topology(os.environ["CLUSTER_CONFIG"]) sg_one_url = cluster_hosts["sync_gateways"][0]["public"] sg_one_admin_url = cluster_hosts["sync_gateways"][0]["admin"] sg_two_url = cluster_hosts["sync_gateways"][1]["public"] sg_two_admin_url = cluster_hosts["sync_gateways"][1]["admin"] sg_helper.stop_sync_gateway(cluster_config=os.environ["CLUSTER_CONFIG"], url=sg_one_url) sg_helper.stop_sync_gateway(cluster_config=os.environ["CLUSTER_CONFIG"], url=sg_two_url) # Yield values to test case via fixture argument yield { "cluster_config": os.environ["CLUSTER_CONFIG"], "ls_url": ls_url, "sg_one_url": sg_one_url, "sg_one_admin_url": sg_one_admin_url, "sg_two_url": sg_two_url, "sg_two_admin_url": sg_two_admin_url } log_info("Tearing down test") # Teardown test client.delete_databases(ls_url) ls.shutdown_liteserv(host=liteserv_host, platform=liteserv_platform, version=liteserv_version, storage_engine=liteserv_storage_engine, process_handle=ls_handle, logfile=ls_logging, cluster_config=ls_cluster_target) # Verify LiteServ is killed ls.verify_liteserv_not_running(host=liteserv_host, port=liteserv_port) sg_helper.stop_sync_gateway(cluster_config=os.environ["CLUSTER_CONFIG"], url=sg_one_url) sg_helper.stop_sync_gateway(cluster_config=os.environ["CLUSTER_CONFIG"], url=sg_two_url) # if the test failed pull logs if request.node.rep_call.failed: logging_helper = Logging() logging_helper.fetch_and_analyze_logs(cluster_config=os.environ["CLUSTER_CONFIG"], test_name=test_name)