def test_create_content_artifacts_by_id_set(mock_git):
    """

    Test the case where content artifacts are being created by an id set.
    This test has the following cases:
    1. A pack is not exsiting in the id set - the pack will not exist as an artifact.
    2. An item of a pack does not exist under the pack's section in the id set - the item will not exist as an artifact.

    """
    from demisto_sdk.commands.create_artifacts.content_artifacts_creator import \
        ArtifactsManager
    with temp_dir() as temp:
        config = ArtifactsManager(artifacts_path=temp,
                                  content_version='6.0.0',
                                  zip=False,
                                  suffix='',
                                  cpus=1,
                                  packs=False,
                                  filter_by_id_set=True,
                                  id_set_path=PARTIAL_ID_SET_PATH)
        exit_code = config.create_content_artifacts()

        assert exit_code == 0
        assert same_folders(
            temp, ARTIFACTS_EXPECTED_RESULTS / 'content_filtered_by_id_set')
def test_use_alternative_fields(mock_single_pack_git):
    from demisto_sdk.commands.create_artifacts.content_artifacts_creator import \
        ArtifactsManager

    with temp_dir() as temp:
        config = ArtifactsManager(artifacts_path=temp,
                                  content_version='6.0.0',
                                  zip=False,
                                  suffix='',
                                  cpus=1,
                                  packs=True,
                                  alternate_fields=True,
                                  id_set_path=ALTERNATIVE_FIELDS_ID_SET_PATH)
        exit_code = config.create_content_artifacts()

        assert exit_code == 0
        assert same_folders(
            temp,
            ARTIFACTS_EXPECTED_RESULTS / 'content_with_alternative_fields')
        pack_path = PosixPath(temp, 'content_packs',
                              'DummyPackAlternativeFields')

        # Check Integration
        integration_yml = dict(
            yaml.load(
                PosixPath(pack_path, 'Integrations',
                          'integration-sample_packs.yml')))
        assert not any(key for key in integration_yml if key.endswith('_x2'))
        assert integration_yml['name'] == 'name_x2'
        assert integration_yml['defaultEnabled']

        # Check Script
        script_yml = dict(
            yaml.load(
                PosixPath(pack_path, 'Scripts', 'script-sample_packs.yml')))
        assert not any(key for key in script_yml if key.endswith('_x2'))
        assert script_yml['name'] == 'name_x2'
        assert script_yml['comment'] == 'comment_x2'
        assert script_yml['commonfields']['id'] == 'id_x2'

        # Check Playbook
        playbook_yml = dict(
            yaml.load(
                PosixPath(pack_path, 'Playbooks',
                          'playbook-sample_packs.yml')))
        assert not any(key for key in playbook_yml if key.endswith('_x2'))
        assert playbook_yml['name'] == 'name_x2'
        assert playbook_yml['tasks']['task_num']['task'][
            'scriptName'] == 'scriptName_x2'

        # Check IncidentField
        with open(
                os.path.join(pack_path, 'IncidentFields',
                             'incidentfield-sample_packs.json')) as json_file:
            incident_field_json = json.load(json_file)
        assert not any(key.endswith('_x2') for key in incident_field_json)
        assert incident_field_json['name'] == 'name_x2'
def test_create_content_artifacts(mock_git):
    from demisto_sdk.commands.create_artifacts.content_artifacts_creator import (
        ArtifactsManager)
    with temp_dir() as temp:
        config = ArtifactsManager(artifacts_path=temp,
                                  content_version='6.0.0',
                                  zip=False,
                                  suffix='',
                                  cpus=1,
                                  packs=False)
        exit_code = config.create_content_artifacts()

        assert exit_code == 0
        assert same_folders(temp, ARTIFACTS_EXPECTED_RESULTS / 'content')
def test_duplicate_file_failure(mock_git):
    from demisto_sdk.commands.create_artifacts.content_artifacts_creator import (
        ArtifactsManager)
    with temp_dir() as temp:
        config = ArtifactsManager(artifacts_path=temp,
                                  content_version='6.0.0',
                                  zip=False,
                                  suffix='',
                                  cpus=1,
                                  packs=False)

        with duplicate_file():
            exit_code = config.create_content_artifacts()

    assert exit_code == 1
def test_malformed_file_failure(suffix: str, mock_git):
    from demisto_sdk.commands.create_artifacts.content_artifacts_creator import \
        ArtifactsManager
    with temp_dir() as temp:
        config = ArtifactsManager(artifacts_path=temp,
                                  content_version='6.0.0',
                                  zip=False,
                                  suffix='',
                                  cpus=1,
                                  packs=False)

        with destroy_by_ext(suffix):
            exit_code = config.create_content_artifacts()

    assert exit_code == 1
def test_create_private_content_artifacts(private_repo):
    from demisto_sdk.commands.common.content import Content
    from demisto_sdk.commands.create_artifacts.content_artifacts_creator import (
        ArtifactsManager, create_content_artifacts)

    with temp_dir() as temp:
        config = ArtifactsManager(artifacts_path=temp,
                                  content_version='6.0.0',
                                  zip=False,
                                  suffix='',
                                  cpus=1,
                                  packs=False)
        config.content = Content(private_repo)
        exit_code = create_content_artifacts(artifact_manager=config)

        assert same_folders(temp, ARTIFACTS_EXPEXTED_RESULTS / 'private')
        assert exit_code == 0
def test_sign_packs_failure(repo, capsys, key, tool):
    """
    When:
        - Signing a pack.

    Given:
        - Pack object.
        - Signature key without the signing tool, or vice-versa.

    Then:
        - Verify that exceptions are written to the logger.

    """
    import demisto_sdk.commands.create_artifacts.content_artifacts_creator as cca
    from demisto_sdk.commands.create_artifacts.content_artifacts_creator import (
        ArtifactsManager, sign_packs)

    cca.logger = logging_setup(3)

    with ChangeCWD(repo.path):
        with temp_dir() as temp:
            artifact_manager = ArtifactsManager(artifacts_path=temp,
                                                content_version='6.0.0',
                                                zip=False,
                                                suffix='',
                                                cpus=1,
                                                packs=True,
                                                signature_key=key)

            if tool:
                with open('./tool', 'w') as tool_file:
                    tool_file.write('some tool')

                artifact_manager.signDirectory = Path(temp / 'tool')

    sign_packs(artifact_manager)

    captured = capsys.readouterr()
    assert 'Failed to sign packs. In order to do so, you need to provide both signature_key and ' \
           'sign_directory arguments.' in captured.err
def test_dump_pack(mock_git):
    from demisto_sdk.commands.create_artifacts.content_artifacts_creator import (
        ArtifactsManager, Pack, create_dirs, dump_pack)
    with temp_dir() as temp:
        config = ArtifactsManager(artifacts_path=temp,
                                  content_version='6.0.0',
                                  zip=False,
                                  suffix='',
                                  cpus=1,
                                  packs=False)

        create_dirs(artifact_manager=config)
        dump_pack(artifact_manager=config,
                  pack=Pack(TEST_CONTENT_REPO / PACKS_DIR / 'Sample01'))

        assert same_folders(src1=temp / 'content_packs' / 'Sample01',
                            src2=ARTIFACTS_EXPEXTED_RESULTS / 'content' /
                            'content_packs' / 'Sample01')
示例#9
0
def test_load_user_metadata_advanced(repo):
    """
    When:
        - Dumping a specific pack, processing the pack's metadata.

    Given:
        - Pack object.

    Then:
        - Verify that pack's metadata information was loaded successfully.

    """
    from demisto_sdk.commands.create_artifacts.content_artifacts_creator import \
        ArtifactsManager

    pack_1 = repo.setup_one_pack('Pack1')
    pack_1.pack_metadata.write_json({
        'name': 'Pack Number 1',
        'price': 10,
        'tags': ['tag1'],
        'useCases': ['usecase1'],
        'vendorId': 'vendorId',
        'vendorName': 'vendorName'
    })

    with ChangeCWD(repo.path):
        with temp_dir() as temp:
            artifact_manager = ArtifactsManager(artifacts_path=temp,
                                                content_version='6.0.0',
                                                zip=False,
                                                suffix='',
                                                cpus=1,
                                                packs=True)

    pack_1_metadata = artifact_manager.content.packs['Pack1'].metadata
    pack_1_metadata.load_user_metadata('Pack1', 'Pack Number 1', pack_1.path,
                                       logging_setup(3))

    assert pack_1_metadata.id == 'Pack1'
    assert pack_1_metadata.name == 'Pack Number 1'
    assert pack_1_metadata.price == 10
    assert pack_1_metadata.vendor_id == 'vendorId'
    assert pack_1_metadata.vendor_name == 'vendorName'
    assert pack_1_metadata.tags == ['tag1', 'Use Case']
示例#10
0
def test_load_user_metadata_basic(repo):
    """
    When:
        - Dumping a specific pack, processing the pack's metadata.

    Given:
        - Pack object.

    Then:
        - Verify that pack's metadata information was loaded successfully.

    """
    from demisto_sdk.commands.create_artifacts.content_artifacts_creator import \
        ArtifactsManager

    pack_1 = repo.setup_one_pack('Pack1')
    pack_1.pack_metadata.write_json({
        'name':
        'Pack Number 1',
        'description':
        'A description for the pack',
        'created':
        '2020-06-08T15:37:54Z',
        'price':
        0,
        'support':
        'xsoar',
        'url':
        'some url',
        'email':
        'some email',
        'currentVersion':
        '1.1.1',
        'author':
        'Cortex XSOAR',
        'tags': ['tag1'],
        'dependencies': [{
            'dependency': {
                'dependency': '1'
            }
        }]
    })

    with ChangeCWD(repo.path):
        with temp_dir() as temp:
            artifact_manager = ArtifactsManager(artifacts_path=temp,
                                                content_version='6.0.0',
                                                zip=False,
                                                suffix='',
                                                cpus=1,
                                                packs=True)

    pack_1_metadata = artifact_manager.content.packs['Pack1'].metadata
    pack_1_metadata.load_user_metadata('Pack1', 'Pack Number 1', pack_1.path,
                                       logging_setup(3))

    assert pack_1_metadata.id == 'Pack1'
    assert pack_1_metadata.name == 'Pack Number 1'
    assert pack_1_metadata.description == 'A description for the pack'
    assert pack_1_metadata.created == datetime(2020, 6, 8, 15, 37, 54)
    assert pack_1_metadata.price == 0
    assert pack_1_metadata.support == 'xsoar'
    assert pack_1_metadata.url == 'some url'
    assert pack_1_metadata.email == 'some email'
    assert pack_1_metadata.certification == 'certified'
    assert pack_1_metadata.current_version == parse('1.1.1')
    assert pack_1_metadata.author == 'Cortex XSOAR'
    assert pack_1_metadata.tags == ['tag1']
    assert pack_1_metadata.dependencies == [{
        'dependency': {
            'dependency': '1'
        }
    }]