Ejemplo n.º 1
0
def test_execute_command_with_payload_sample_file_missing(
        caplog, fx_copy_fn_main_mock_integration, fx_get_sub_parser,
        fx_cmd_line_args_package, fx_add_dev_env_var):
    mock_integration_name = fx_copy_fn_main_mock_integration[0]
    path_fn_main_mock_integration = fx_copy_fn_main_mock_integration[1]

    # Replace cmd line arg "fn_main_mock_integration" with path to temp dir location
    sys.argv[sys.argv.index(
        mock_integration_name)] = path_fn_main_mock_integration

    # Rename a payload_sample file
    path_file_to_rename = os.path.join(
        path_fn_main_mock_integration,
        package_helpers.BASE_NAME_PAYLOAD_SAMPLES_DIR, "mock_function_one",
        package_helpers.BASE_NAME_PAYLOAD_SAMPLES_EXAMPLE)
    sdk_helpers.rename_file(path_file_to_rename, "no_name.json")

    # Package the app
    cmd_package = CmdPackage(fx_get_sub_parser)
    args = cmd_package.parser.parse_known_args()[0]

    cmd_package.execute_command(args)

    assert (
        "WARNING: could not access JSON file to add payload_samples. Continuing to create package.\n"
        "Add '--no-samples' flag to avoid looking for them and avoid this warning message."
    ) in caplog.text
def test_installation(fx_copy_fn_main_mock_integration, fx_get_sub_parser, fx_cmd_line_args_package):
    mock_integration_name = fx_copy_fn_main_mock_integration[0]
    path_fn_main_mock_integration = fx_copy_fn_main_mock_integration[1]

    # Replace cmd line arg "fn_main_mock_integration" with path to temp dir location
    sys.argv[sys.argv.index(mock_integration_name)] = path_fn_main_mock_integration

    # Package the app
    cmd_package = CmdPackage(fx_get_sub_parser)
    args = cmd_package.parser.parse_known_args()[0]
    path_the_app_zip = cmd_package.execute_command(args)

    # Connect to test resilient
    res_client = sdk_helpers.get_resilient_client()

    # Test uploading + installing the .zip
    upload_res = test_helpers.upload_app_zip(res_client, path_the_app_zip)
    assert upload_res.status_code == 200

    install_res = test_helpers.install_app_zip(res_client, upload_res.json())
    assert install_res.get("status") == "installed"
Ejemplo n.º 3
0
def test_execute_command_with_validate_enabled(
        fx_copy_and_pip_install_fn_main_mock_integration, fx_get_sub_parser,
        fx_cmd_line_args_package, fx_add_dev_env_var):
    mock_integration_name = fx_copy_and_pip_install_fn_main_mock_integration[0]
    path_fn_main_mock_integration = fx_copy_and_pip_install_fn_main_mock_integration[
        1]

    # Replace cmd line arg "fn_main_mock_integration" with path to temp dir location
    sys.argv[sys.argv.index(
        mock_integration_name)] = path_fn_main_mock_integration

    sys.argv.append("--no-samples")
    sys.argv.append("--validate")

    with patch("resilient_sdk.cmds.validate.sdk_helpers.run_subprocess"
               ) as mock_process:

        mock_process.return_value = (0, "Done!")

        # Package the app
        cmd_validate = CmdValidate(fx_get_sub_parser)
        cmd_package = CmdPackage(fx_get_sub_parser, cmd_validate)
        args = cmd_package.parser.parse_known_args()[0]

        path_the_app_zip = cmd_package.execute_command(args)

        # Test app.zip contents
        assert zipfile.is_zipfile(path_the_app_zip)
        with zipfile.ZipFile((path_the_app_zip), 'r') as app_zip:
            assert helpers.verify_expected_list(EXPECTED_FILES_APP_ZIP,
                                                app_zip.namelist())

        # Test app.zip/validate_report.md contents
        validate_report_contents = sdk_helpers.read_zip_file(
            path_the_app_zip, "validate_report.md")

        assert "## App Details" in validate_report_contents
        assert "## `setup.py` file validation" in validate_report_contents
        assert "## Package files validation" in validate_report_contents
Ejemplo n.º 4
0
def test_bak_files_are_not_packaged(fx_copy_fn_main_mock_integration,
                                    fx_get_sub_parser,
                                    fx_cmd_line_args_package):
    mock_integration_name = fx_copy_fn_main_mock_integration[0]
    path_fn_main_mock_integration = fx_copy_fn_main_mock_integration[1]

    # Replace cmd line arg "fn_main_mock_integration" with path to temp dir location
    sys.argv[sys.argv.index(
        mock_integration_name)] = path_fn_main_mock_integration

    # Package the app
    cmd_package = CmdPackage(fx_get_sub_parser)
    args = cmd_package.parser.parse_known_args()[0]

    cmd_package.execute_command(args)

    tarfile_path = os.path.join(path_fn_main_mock_integration, "dist",
                                mock_integration_name + "-1.0.0.tar.gz")
    with tarfile.open(name=tarfile_path, mode="r:gz") as t_file:
        t_files = t_file.getmembers()

        for f in t_files:
            assert not f.name.endswith(".bak")
Ejemplo n.º 5
0
def test_execute_command_no_samples(fx_copy_fn_main_mock_integration,
                                    fx_get_sub_parser,
                                    fx_cmd_line_args_package):
    mock_integration_name = fx_copy_fn_main_mock_integration[0]
    path_fn_main_mock_integration = fx_copy_fn_main_mock_integration[1]

    # Replace cmd line arg "fn_main_mock_integration" with path to temp dir location
    sys.argv[sys.argv.index(
        mock_integration_name)] = path_fn_main_mock_integration

    # Append --no-samples command line arg
    sys.argv.append("--no-samples")

    # Package the app
    cmd_package = CmdPackage(fx_get_sub_parser)
    args = cmd_package.parser.parse_known_args()[0]
    path_the_app_zip = cmd_package.execute_command(args)

    # Test app.zip contents
    assert zipfile.is_zipfile(path_the_app_zip)
    with zipfile.ZipFile((path_the_app_zip), 'r') as app_zip:
        assert helpers.verify_expected_list(EXPECTED_FILES_APP_ZIP[:-1],
                                            app_zip.namelist())

    # Test app.zip/app.json contents
    app_json_contents = sdk_helpers.read_zip_file(path_the_app_zip, "app.json")
    mock_app_json_contents = sdk_helpers.read_file(
        mock_paths.MOCK_APP_ZIP_APP_JSON)[0]
    assert app_json_contents == mock_app_json_contents

    # Test app.zip/export.res contents
    export_res_contents = sdk_helpers.read_zip_file(path_the_app_zip,
                                                    "export.res")
    mock_export_res_contents = sdk_helpers.read_file(
        mock_paths.MOCK_APP_ZIP_EXPORT_RES)[0]
    assert json.loads(export_res_contents) == json.loads(
        mock_export_res_contents)
Ejemplo n.º 6
0
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']

# autodoc configs
add_module_names = False

# resilient-sdk parser
sdk_parser = sdk_app.get_main_app_parser()
sdk_sub_parser = sdk_app.get_main_app_sub_parser(sdk_parser)

cmd_codegen = CmdCodegen(sdk_sub_parser)
cmd_docgen = CmdDocgen(sdk_sub_parser)
cmd_ext_package = CmdExtPackage(sdk_sub_parser)
cmd_clone = CmdClone(sdk_sub_parser)
cmd_extract = CmdExtract(sdk_sub_parser)
cmd_validate = CmdValidate(sdk_sub_parser)

# parse the setup.py files
the_globals = {"__file__": "", "long_description": ""}
resilient_setup_attributes = parse_setup_py(
    os.path.abspath("../resilient/setup.py"),
    SUPPORTED_SETUP_PY_ATTRIBUTE_NAMES,
    the_globals=the_globals)
circuits_setup_attributes = parse_setup_py(
    os.path.abspath("../resilient-circuits/setup.py"),
    SUPPORTED_SETUP_PY_ATTRIBUTE_NAMES,
    the_globals=the_globals)
lib_setup_attributes = parse_setup_py(
Ejemplo n.º 7
0
def main():
    """
    Main entry point for resilient-sdk
    """

    # See if RES_SDK_DEV environment var is set
    sdk_dev = sdk_helpers.str_to_bool(os.getenv("RES_SDK_DEV"))

    # Get main parser object
    parser = get_main_app_parser()

    # Get sub_parser object, its dest is cmd
    sub_parser = get_main_app_sub_parser(parser)

    # Add any subcommands to main app parser here
    cmd_codegen = CmdCodegen(sub_parser)
    cmd_clone = CmdClone(sub_parser)
    cmd_docgen = CmdDocgen(sub_parser)
    cmd_extract = CmdExtract(sub_parser)
    cmd_ext_package = CmdExtPackage(sub_parser)

    if sdk_dev:
        # Add 'dev' command if environment var set
        cmd_dev = CmdDev(sub_parser)

    try:
        # Parse the arguments
        args = parser.parse_args()

        if args.cmd is None:
            parser.print_help()
            sys.exit()

    except SDKException as err:
        # Get main_cmd (codegen, docgen etc.)
        main_cmd = sdk_helpers.get_main_cmd()

        LOG.error(err)
        LOG.info("\n-----------------\n")

        # Print specifc usage for that cmd for these errors
        if "too few arguments" in err.message or "no subcommand provided" in err.message:
            if main_cmd == cmd_codegen.CMD_NAME:
                cmd_codegen.parser.print_usage()

            elif main_cmd == cmd_clone.CMD_NAME:
                cmd_clone.parser.print_usage()

            elif main_cmd == cmd_docgen.CMD_NAME:
                cmd_docgen.parser.print_usage()

            elif main_cmd == cmd_extract.CMD_NAME:
                cmd_extract.parser.print_usage()

            elif main_cmd == cmd_ext_package.CMD_NAME:
                cmd_ext_package.parser.print_usage()

            elif sdk_dev and main_cmd == cmd_dev.CMD_NAME:
                cmd_dev.parser.print_usage()

            else:
                parser.print_help()

        # Exit
        sys.exit()

    # If -v was specified, set the log level to DEBUG
    if args.verbose:
        LOG.setLevel(logging.DEBUG)
        LOG.debug("Logging set to DEBUG mode")

    # Handle what subcommand was called
    if args.cmd == cmd_docgen.CMD_NAME:
        cmd_docgen.execute_command(args)

    elif args.cmd == cmd_codegen.CMD_NAME:
        cmd_codegen.execute_command(args)

    elif args.cmd == cmd_clone.CMD_NAME:
        cmd_clone.execute_command(args)

    elif args.cmd == cmd_extract.CMD_NAME:
        cmd_extract.execute_command(args)

    elif args.cmd == cmd_ext_package.CMD_NAME:
        cmd_ext_package.execute_command(args)

    elif sdk_dev and args.cmd == cmd_dev.CMD_NAME:
        cmd_dev.execute_command(args)
Ejemplo n.º 8
0
def main():
    """
    Main entry point for resilient-sdk
    """

    # add color support for WINDOWS
    os.system("")

    # See if RES_SDK_DEV environment var is set
    sdk_dev = sdk_helpers.is_env_var_set(constants.ENV_VAR_DEV)

    # Get main parser object
    parser = get_main_app_parser()

    # Get sub_parser object, its dest is cmd
    sub_parser = get_main_app_sub_parser(parser)

    if sdk_dev:
        # Add 'dev' command if environment var set
        cmd_dev = CmdDev(sub_parser)
        LOG.info("{0}Running SDK in Developer Mode{0}".format(constants.LOG_DIVIDER))

    # Add any subcommands to main app parser here
    cmd_validate = CmdValidate(sub_parser)
    cmd_codegen = CmdCodegen(sub_parser)
    cmd_clone = CmdClone(sub_parser)
    cmd_docgen = CmdDocgen(sub_parser)
    cmd_extract = CmdExtract(sub_parser)
    cmd_ext_package = CmdExtPackage(sub_parser, cmd_validate=cmd_validate)

    try:
        # Parse the arguments
        args = parser.parse_args()

        if args.cmd is None:
            parser.print_help()
            sys.exit()

    except SDKException as err:
        # Get main_cmd (codegen, docgen etc.)
        main_cmd = sdk_helpers.get_main_cmd()

        LOG.error(err)
        LOG.info("{0}".format(constants.LOG_DIVIDER))

        # Print specifc usage for that cmd for these errors
        if "too few arguments" in err.message or "no subcommand provided" in err.message:
            if main_cmd == cmd_codegen.CMD_NAME:
                cmd_codegen.parser.print_usage()

            elif main_cmd == cmd_clone.CMD_NAME:
                cmd_clone.parser.print_usage()

            elif main_cmd == cmd_docgen.CMD_NAME:
                cmd_docgen.parser.print_usage()

            elif main_cmd == cmd_extract.CMD_NAME:
                cmd_extract.parser.print_usage()

            elif main_cmd == cmd_ext_package.CMD_NAME:
                cmd_ext_package.parser.print_usage()

            elif main_cmd == cmd_validate.CMD_NAME:
                cmd_validate.parser.print_usage()

            elif sdk_dev and main_cmd == cmd_dev.CMD_NAME:
                cmd_dev.parser.print_usage()

            else:
                parser.print_help()

        # Exit
        sys.exit()

    # If -v was specified, set the log level to DEBUG
    if args.verbose:
        LOG.setLevel(logging.DEBUG)
        LOG.debug("Logging set to DEBUG mode")

    # Handle what subcommand was called
    if args.cmd == cmd_docgen.CMD_NAME:
        cmd_docgen.execute_command(args)

    elif args.cmd == cmd_codegen.CMD_NAME:
        cmd_codegen.execute_command(args)

    elif args.cmd == cmd_clone.CMD_NAME:
        cmd_clone.execute_command(args)

    elif args.cmd == cmd_extract.CMD_NAME:
        cmd_extract.execute_command(args)

    elif args.cmd == cmd_ext_package.CMD_NAME:
        cmd_ext_package.execute_command(args)

    elif args.cmd == cmd_validate.CMD_NAME:
        cmd_validate.execute_command(args)
    elif sdk_dev and args.cmd == cmd_dev.CMD_NAME:
        cmd_dev.execute_command(args)