Example #1
0
    def diff(realized_repository):

        # We create a temporary redirection from kwds's
        # output to our tempfile. This lets us capture the
        # diff and redirect it to their requested location as
        # well as to the XUnit report.
        diff_output = tempfile.NamedTemporaryFile(mode='r')
        user_requested_output = kwds.get('output', None)
        # Replace their output handle with ours
        kwds['output'] = diff_output.name

        captured_io = {}
        with captured_io_for_xunit(kwds, captured_io):
            result = shed.diff_repo(ctx, realized_repository, **kwds)

        # May be extraneous but just want to ensure entire file is written
        # before a copy is made.
        diff_output.flush()
        # Redirect a copy to user_requested_output if they did:
        if user_requested_output is not None:
            shutil.copy(diff_output.name, user_requested_output)
        else:
            with open(diff_output.name, "r") as f:
                sys.stdout.write(f.read())
        # Rewind to the start of the file and read it in its entirety
        diff_output.seek(0)
        diff_output_contents = diff_output.read()
        diff_output.close()

        # Collect data about what happened
        collected_data['results']['total'] += 1
        xunit_case = {
            'name': 'shed-diff',
            'classname': realized_repository.name,
            'time': captured_io["time"],
            'stdout': captured_io["stdout"],
            'stderr': captured_io["stderr"],
        }
        if result >= 200:
            collected_data['results']['errors'] += 1
            xunit_case.update({
                'errorType': 'DiffError',
                'errorMessage': 'Error diffing repositories',
                'errorContent': escape(diff_output_contents),
                'time': captured_io["time"],
            })
        elif result > 2:
            collected_data['results']['failures'] += 1
            xunit_case.update({
                'errorType': 'PlanemoDiffError',
                'errorMessage': 'Planemo error diffing repositories',
                'errorContent': escape(diff_output_contents),
            })
        elif result == 2:
            collected_data['results']['failures'] += 1
            xunit_case.update({
                'errorType': 'RepoDoesNotExist',
                'errorMessage': 'Target Repository does not exist',
                'errorContent': escape(diff_output_contents),
            })
        elif result == 1:
            collected_data['results']['failures'] += 1
            xunit_case.update({
                'errorType': 'Different',
                'errorMessage': 'Repository is different',
                'errorContent': escape(diff_output_contents),
            })

        # Append our xunit test case
        collected_data['tests'].append(xunit_case)

        return result
Example #2
0
    def update(realized_repository):
        collected_data['results']['total'] += 1
        skip_upload = kwds["skip_upload"]
        skip_metadata = kwds["skip_metadata"]
        upload_ret_code = 0
        upload_ok = True

        captured_io = {}
        if not skip_upload:
            with captured_io_for_xunit(kwds, captured_io):
                upload_ret_code = shed.upload_repository(
                    ctx, realized_repository, **kwds
                )
                upload_ok = not upload_ret_code

        repo_result = {
            'classname': realized_repository.name,
            'time': captured_io.get("time", None),
            'name': 'shed-update',
            'stdout': captured_io.get("stdout", None),
            'stderr': captured_io.get("stderr", None),
        }

        # Now that we've uploaded (or skipped appropriately), collect results.
        if upload_ret_code == 2:
            collected_data['results']['failures'] += 1
            repo_result.update({
                'errorType': 'FailedUpdate',
                'errorMessage': 'Failed to update repository as it does not exist in target ToolShed',
            })
            collected_data['tests'].append(repo_result)
            error("Failed to update repository it does not exist "
                  "in target ToolShed.")
            return upload_ret_code

        exit = 0
        metadata_ok = True
        if not skip_metadata:
            repo_id = shed.handle_force_create(realized_repository, ctx, shed_context, **kwds)
            # failing to create the repo, give up
            if repo_id is None:
                exit = shed.report_non_existent_repository(realized_repository)
                metadata_ok = False
            else:
                metadata_ok = realized_repository.update(ctx, shed_context, repo_id)
        else:
            info("Skipping repository metadata update.")

        if not metadata_ok:
            error("Failed to update repository metadata.")

        if metadata_ok and upload_ok:
            pass
        elif upload_ok:
            collected_data['results']['skips'] += 1
            repo_result.update({
                'errorType': 'FailedMetadata',
                'errorMessage': 'Failed to update repository metadata',
            })
            if not skip_upload:
                error("Repo updated but metadata was not.")
            exit = exit or 1
        else:
            collected_data['results']['failures'] += 1
            repo_result.update({
                'errorType': 'FailedUpdate',
                'errorMessage': 'Failed to update repository',
            })
            error("Failed to update a repository.")
            exit = exit or 1
        collected_data['tests'].append(repo_result)
        return exit
    def diff(realized_repository):

        # We create a temporary redirection from kwds's
        # output to our tempfile. This lets us capture the
        # diff and redirect it to their requested location as
        # well as to the XUnit report.
        diff_output = tempfile.NamedTemporaryFile(mode="rw+b")
        user_requested_output = kwds.get("output", None)
        # Replace their output handle with ours
        kwds["output"] = diff_output.name

        captured_io = {}
        with captured_io_for_xunit(kwds, captured_io):
            result = shed.diff_repo(ctx, realized_repository, **kwds)

        # May be extraneous but just want to ensure entire file is written
        # before a copy is made.
        diff_output.flush()
        # Redirect a copy to user_requested_output if they did:
        if user_requested_output is not None:
            shutil.copy(diff_output.name, user_requested_output)

        # Rewind to the start of the file and read it in its entirety
        diff_output.seek(0)
        diff_output_contents = diff_output.read()
        diff_output.close()

        # Collect data about what happened
        collected_data["results"]["total"] += 1
        xunit_case = {
            "name": "shed-diff",
            "classname": realized_repository.name,
            "time": captured_io["time"],
            "stdout": captured_io["stdout"],
            "stderr": captured_io["stderr"],
        }
        if result >= 200:
            collected_data["results"]["errors"] += 1
            xunit_case.update(
                {
                    "errorType": "DiffError",
                    "errorMessage": "Error diffing repositories",
                    "errorContent": escape(diff_output_contents),
                    "time": captured_io["time"],
                }
            )
        elif result > 2:
            collected_data["results"]["failures"] += 1
            xunit_case.update(
                {
                    "errorType": "PlanemoDiffError",
                    "errorMessage": "Planemo error diffing repositories",
                    "errorContent": escape(diff_output_contents),
                }
            )
        elif result == 2:
            collected_data["results"]["failures"] += 1
            xunit_case.update(
                {
                    "errorType": "RepoDoesNotExist",
                    "errorMessage": "Target Repository does not exist",
                    "errorContent": escape(diff_output_contents),
                }
            )
        elif result == 1:
            collected_data["results"]["failures"] += 1
            xunit_case.update(
                {
                    "errorType": "Different",
                    "errorMessage": "Repository is different",
                    "errorContent": escape(diff_output_contents),
                }
            )

        # Append our xunit test case
        collected_data["tests"].append(xunit_case)

        return result
    def diff(realized_repository):

        # We create a temporary redirection from kwds's
        # output to our tempfile. This lets us capture the
        # diff and redirect it to their requested location as
        # well as to the XUnit report.
        diff_output = tempfile.NamedTemporaryFile(mode='r')
        user_requested_output = kwds.get('output', None)
        # Replace their output handle with ours
        kwds['output'] = diff_output.name

        captured_io = {}
        with captured_io_for_xunit(kwds, captured_io):
            result = shed.diff_repo(ctx, realized_repository, **kwds)

        # May be extraneous but just want to ensure entire file is written
        # before a copy is made.
        diff_output.flush()
        # Redirect a copy to user_requested_output if they did:
        if user_requested_output is not None:
            shutil.copy(diff_output.name, user_requested_output)
        else:
            with open(diff_output.name, "r") as f:
                sys.stdout.write(f.read())
        # Rewind to the start of the file and read it in its entirety
        diff_output.seek(0)
        diff_output_contents = diff_output.read()
        diff_output.close()

        # Collect data about what happened
        collected_data['results']['total'] += 1
        xunit_case = {
            'name': 'shed-diff',
            'classname': realized_repository.name,
            'time': captured_io["time"],
            'stdout': captured_io["stdout"],
            'stderr': captured_io["stderr"],
        }
        if result >= 200:
            collected_data['results']['errors'] += 1
            xunit_case.update({
                'errorType': 'DiffError',
                'errorMessage': 'Error diffing repositories',
                'errorContent': escape(diff_output_contents),
                'time': captured_io["time"],
            })
        elif result > 2:
            collected_data['results']['failures'] += 1
            xunit_case.update({
                'errorType': 'PlanemoDiffError',
                'errorMessage': 'Planemo error diffing repositories',
                'errorContent': escape(diff_output_contents),
            })
        elif result == 2:
            collected_data['results']['failures'] += 1
            xunit_case.update({
                'errorType': 'RepoDoesNotExist',
                'errorMessage': 'Target Repository does not exist',
                'errorContent': escape(diff_output_contents),
            })
        elif result == 1:
            collected_data['results']['failures'] += 1
            xunit_case.update({
                'errorType': 'Different',
                'errorMessage': 'Repository is different',
                'errorContent': escape(diff_output_contents),
            })

        # Append our xunit test case
        collected_data['tests'].append(xunit_case)

        return result
Example #5
0
    def update(realized_repository):
        collected_data['results']['total'] += 1
        skip_upload = kwds["skip_upload"]
        skip_metadata = kwds["skip_metadata"]
        upload_ret_code = 0
        upload_ok = True

        captured_io = {}
        if not skip_upload:
            with captured_io_for_xunit(kwds, captured_io):
                upload_ret_code = shed.upload_repository(
                    ctx, realized_repository, **kwds)
                upload_ok = not upload_ret_code

        repo_result = {
            'classname': realized_repository.name,
            'time': captured_io.get("time", None),
            'name': 'shed-update',
            'stdout': captured_io.get("stdout", None),
            'stderr': captured_io.get("stderr", None),
        }

        # Now that we've uploaded (or skipped appropriately), collect results.
        if upload_ret_code == 2:
            collected_data['results']['failures'] += 1
            repo_result.update({
                'errorType':
                'FailedUpdate',
                'errorMessage':
                'Failed to update repository as it does not exist in target ToolShed',
            })
            collected_data['tests'].append(repo_result)
            error("Failed to update repository it does not exist "
                  "in target ToolShed.")
            return upload_ret_code

        exit = 0
        metadata_ok = True
        if not skip_metadata:
            repo_id = shed.handle_force_create(realized_repository, ctx,
                                               shed_context, **kwds)
            # failing to create the repo, give up
            if repo_id is None:
                exit = shed.report_non_existent_repository(realized_repository)
                metadata_ok = False
            else:
                metadata_ok = realized_repository.update(
                    ctx, shed_context, repo_id)
        else:
            info("Skipping repository metadata update.")

        if not metadata_ok:
            error("Failed to update repository metadata.")

        if metadata_ok and upload_ok:
            pass
        elif upload_ok:
            collected_data['results']['skips'] += 1
            repo_result.update({
                'errorType':
                'FailedMetadata',
                'errorMessage':
                'Failed to update repository metadata',
            })
            if not skip_upload:
                error("Repo updated but metadata was not.")
            exit = exit or 1
        else:
            collected_data['results']['failures'] += 1
            repo_result.update({
                'errorType': 'FailedUpdate',
                'errorMessage': 'Failed to update repository',
            })
            error("Failed to update a repository.")
            exit = exit or 1
        collected_data['tests'].append(repo_result)
        return exit
Example #6
0
    def update(realized_repository):
        collected_data['results']['total'] += 1
        upload_ret_code = 0
        upload_ok = True

        captured_io = {}
        if not kwds["skip_upload"]:
            with captured_io_for_xunit(kwds, captured_io):
                upload_ret_code = shed.upload_repository(
                    ctx, realized_repository, **kwds
                )
                upload_ok = not upload_ret_code

        # Now that we've uploaded (or skipped appropriately), collect results.
        if upload_ret_code == 2:
            collected_data['results']['failures'] += 1
            collected_data['tests'].append({
                'classname': realized_repository.name,
                'errorType': 'FailedUpdate',
                'errorMessage': 'Failed to update repository as it does not exist in target ToolShed',
                'time': captured_io["time"],
                'name': 'shed-update',
                'stdout': captured_io["stdout"],
                'stderr': captured_io["stderr"],
            })
            error("Failed to update repository it does not exist "
                  "in target ToolShed.")
            return upload_ret_code
        repo_id = realized_repository.find_repository_id(ctx, shed_context)
        metadata_ok = True
        if not kwds["skip_metadata"]:
            metadata_ok = realized_repository.update(ctx, shed_context, repo_id)
        if metadata_ok:
            info("Repository metadata updated.")
        else:
            error("Failed to update repository metadata.")

        if metadata_ok and upload_ok:
            collected_data['tests'].append({
                'classname': realized_repository.name,
                'time': captured_io["time"],
                'name': 'shed-update',
                'stdout': captured_io["stdout"],
                'stderr': captured_io["stderr"],
            })
            return 0
        elif upload_ok:
            collected_data['results']['skips'] += 1
            collected_data['tests'].append({
                'classname': realized_repository.name,
                'errorType': 'FailedMetadata',
                'errorMessage': 'Failed to update repository metadata',
                'time': captured_io["time"],
                'name': 'shed-update',
                'stdout': captured_io["stdout"],
                'stderr': captured_io["stderr"],
            })
            error("Repo updated but metadata was not.")
            return 1
        else:
            collected_data['results']['failures'] += 1
            collected_data['tests'].append({
                'classname': realized_repository.name,
                'errorType': 'FailedUpdate',
                'errorMessage': 'Failed to update repository',
                'time': captured_io["time"],
                'name': 'shed-update',
                'stdout': captured_io["stdout"],
                'stderr': captured_io["stderr"],
            })
            error("Failed to update a repository.")
            return 1