def test_scylla_repo_event(self):
     event = ScyllaRepoEvent(url="u1", error="e1")
     event.event_id = "aff29bce-d75c-4f86-9890-c6d9c1c25d3e"
     self.assertEqual(
         str(event),
         "(ScyllaRepoEvent Severity.WARNING) period_type=one-time "
         "event_id=aff29bce-d75c-4f86-9890-c6d9c1c25d3e: url=u1 error=e1")
     self.assertEqual(event, pickle.loads(pickle.dumps(event)))
            build_list.append((timestamp, build, ))
        if continuation_token := s3_objects.get("NextContinuationToken"):
            s3_objects = s3_client.list_objects_v2(
                Bucket=SCYLLA_REPO_BUCKET,
                Delimiter="/",
                Prefix=prefix,
                ContinuationToken=continuation_token,
            )
    build_list.sort(reverse=True)

    for timestamp, build in build_list:
        if _list_repo_file_etag(s3_client=s3_client, prefix=f"{prefix}{build}{rest}") == latest_etag:
            break
    else:
        ScyllaRepoEvent(
            url=url,
            error=f"There is no a sibling directory which contains same repo file (ETag={latest_etag})"
        ).publish_or_dump(default_logger=LOGGER)
        LOGGER.info("There is no a sibling directory which contains same repo file, use URL %s as is", url)
        return url

    if (timestamp, build) != build_list[0]:
        ScyllaRepoEvent(
            url=url,
            error=f"{url} doesn't point to the latest repo ({base}{build_list[0][1]}{rest})"
        ).publish_or_dump(default_logger=LOGGER)
        LOGGER.info("Actual latest build is %s, not %s", build_list[0][1], build)

    resolved_url = f"{base}{build}{rest}"
    LOGGER.info("%s resolved to %s", url, resolved_url)
    return resolved_url
 def test_scylla_repo_event(self):
     event = ScyllaRepoEvent(url="u1", error="e1")
     self.assertEqual(
         str(event), "(ScyllaRepoEvent Severity.WARNING): url=u1 error=e1")
     self.assertEqual(event, pickle.loads(pickle.dumps(event)))