• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

umputun / remark42
84%
master: 85%

Build:
Build:
LAST BUILD BRANCH: refs/tags/backend/v1.16.4
DEFAULT BRANCH: master
Repo Added 07 Feb 2020 09:18PM UTC
Token eqCnozHBf54UGZ8kokrZbOvkEkhZY23aj regen
Build 1777 Last
Files 53
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

LAST BUILD ON BRANCH tests/synctest-refactor
branch: tests/synctest-refactor
CHANGE BRANCH
x
Reset
Sync Branches
  • tests/synctest-refactor
  • 32/code-colors-styles
  • 965-fix-error-on-restricted-words
  • Ksinia/master
  • add-api-sdk
  • add-cssnano
  • add-module-type
  • add-security-headers
  • admin-edit
  • admin_email_notifications
  • ak/cleanup-comment-form
  • ak/compose-button-styles
  • ak/raw-content-styles
  • ak/update-node
  • akellbl4/editorconfig
  • aliksend/reduce-number-of-symbols-in-tg-message
  • anon-names
  • autofill-email-for-subscription
  • battle-net-oauth2
  • bem-to-css-modules-batch1
  • blackfriday
  • bluemonday-bump
  • bump-auth-oauth-redirect-fix
  • bump-deps
  • bump_ci_go_version
  • bump_lcw
  • bump_modules
  • bump_tollbooth
  • chore-deps-bump-go-modules
  • chore/update-go-deps-2026-04
  • ci-workflows
  • code-colors
  • code_cleanup
  • commento-import
  • configurable-microsoft-tenant
  • copilot/sub-pr-1995
  • dependabot/github_actions/github-actions-updates-8173ff9682
  • dependabot/github_actions/github-actions-updates-da97c4d56b
  • dependabot/go_modules/backend/_example/memory_store/github.com/go-chi/chi/v5-5.2.2
  • dependabot/go_modules/backend/_example/memory_store/golang.org/x/crypto-0.45.0
  • dependabot/go_modules/backend/_example/memory_store/golang.org/x/image-0.38.0
  • dependabot/go_modules/backend/_example/memory_store/golang.org/x/image-0.5.0
  • dependabot/go_modules/backend/_example/memory_store/golang.org/x/net-0.38.0
  • dependabot/go_modules/backend/_example/memory_store/golang.org/x/net-0.7.0
  • dependabot/go_modules/backend/github.com/golang-jwt/jwt/v5-5.2.2
  • dependabot/go_modules/backend/github.com/redis/go-redis/v9-9.7.3
  • dependabot/go_modules/backend/github.com/slack-go/slack-0.23.1
  • dependabot/go_modules/backend/go-modules-updates-3d96251ff3
  • dependabot/go_modules/backend/go-modules-updates-47fdc5c9f4
  • dependabot/go_modules/backend/go-modules-updates-75c1c3f47e
  • dependabot/go_modules/backend/go-modules-updates-76e35b2467
  • dependabot/go_modules/backend/go-modules-updates-81f599025a
  • dependabot/go_modules/backend/go-modules-updates-e61953c257
  • dependabot/go_modules/backend/go-modules-updates-f692995c50
  • dependabot/go_modules/backend/golang.org/x/crypto-0.45.0
  • dependabot/go_modules/backend/golang.org/x/net-0.36.0
  • dependabot/go_modules/backend/google.golang.org/protobuf-1.33.0
  • dependabot/npm_and_yarn/frontend/apps/remark42/npm-modules-updates-33950cb83c
  • dependabot/npm_and_yarn/frontend/apps/remark42/npm-modules-updates-for-tests-da749204ba
  • dependabot/npm_and_yarn/frontend/e2e/npm-modules-updates-for-tests-32faa27b51
  • dependabot/npm_and_yarn/frontend/packages/api/npm-modules-updates-for-tests-f28c5bd690
  • dependabot/npm_and_yarn/frontend/playwright-1.55.1
  • dependabot/npm_and_yarn/frontend/turbo-2.9.14
  • dependabot/npm_and_yarn/frontend/vitest-4.1.0
  • dependabot/npm_and_yarn/site/braces-3.0.3
  • dependabot/npm_and_yarn/site/ejs-3.1.10
  • dependabot/npm_and_yarn/site/js-yaml-3.14.2
  • dependabot/npm_and_yarn/site/luxon-2.5.2
  • dependabot/npm_and_yarn/site/micromatch-4.0.8
  • dependabot/npm_and_yarn/site/nanoid-3.3.8
  • dependabot/npm_and_yarn/site/node-fetch-3.2.10
  • dependabot/npm_and_yarn/site/npm-modules-updates-for-tests-284cb22f28
  • dependabot/npm_and_yarn/site/npm-modules-updates-for-tests-87ff55c30d
  • dependabot/npm_and_yarn/site/ws-8.17.1
  • deps-bump
  • deps/auth-v2.1.5-avatar
  • deps/rest-v1.22.0
  • deps/update-backend
  • deps/update-latest
  • disqus-empty-username-bug
  • disqus-fix
  • distributed_cache
  • docker-native-arm64-runners
  • docker_bump
  • docs-audit-fixes
  • docs/edit-time-zero-behavior
  • docs/placeholder-1990
  • docs/telegram-group-notifications
  • dverhoturov/docker
  • dverhoturov/docker_ci_build
  • dverhoturov/privatePreview
  • dverhoturov/renew_image_on_load
  • dverhoturov/validate_image_before_post
  • e2e
  • editorconfig-double-quotes-yml
  • email-encode-subject
  • email-from-display-name
  • examples-ci-issue
  • feat/custom-oauth2-provider
  • feature/comment-approval
  • fix-admin-names
  • fix-deprecated-flags
  • fix-iframe-resize
  • fix-image-decompression-bomb
  • fix-image-proxy-xss-content-type-spoofing
  • fix-img-submit-import-stuck
  • fix-negative-comments-count
  • fix-typo
  • fix/alter-comment-n1
  • fix/auth-send-jwt-header
  • fix/ci-govulncheck
  • fix/ci-pr-triggers
  • fix/compose-version
  • fix/deleteme-avatar-removal
  • fix/dependabot-coverage
  • fix/drop-armv7-golangci
  • fix/email-html-template
  • fix/export-site-not-found-400
  • fix/flaky-consistent-count-test
  • fix/frontend-css-cleanup
  • fix/iframe-preloader-height-blink
  • fix/notify-drop-tests-deterministic
  • fix/quick-fixes-1946-1991-1996
  • fix/review-findings
  • fix/security-ipv6-ssrf
  • fix/tree-limit-tests
  • fix/trusted-proxy-followup
  • fix/trusted-proxy-realip
  • fix/writeheader-renderjson-bug-1979
  • fix_error_wrap
  • fix_memory_store_tests_panic
  • fix_unclosed_body
  • frame-ancestors
  • frontend-infrastructure
  • full-text-search
  • generate-telegram-translations
  • github_golangci_lint
  • go-1.14
  • go-1.17
  • go-consistent
  • gocritic
  • golangci-lint-v2-migration
  • harden-deploy-permissions
  • hide-vote-iphash
  • image-rpc
  • image_interface_fixes
  • img_commit_on_start
  • img_fixes
  • img_route_verification
  • img_types
  • jwt-migration
  • lazy-image
  • links-rune
  • listen-address
  • master
  • migrate-to-testing-library
  • mkdocs
  • move-email-templates-to-separate-files
  • move-subscribe-ui-elements
  • named-exports
  • new-auth
  • packages
  • paskal/CWE-918
  • paskal/allow_dash_in_email_siteid
  • paskal/allowed_domains_exact_match
  • paskal/allowed_hosts
  • paskal/apple
  • paskal/apple_bad_key_test
  • paskal/apple_frontend
  • paskal/aud_per_site
  • paskal/auth_fixes
  • paskal/better_info
  • paskal/borderless_qr
  • paskal/bump-ci
  • paskal/bump_actions
  • paskal/bump_auth
  • paskal/bump_chroma
  • paskal/bump_dependencies
  • paskal/bump_go_modules
  • paskal/bump_golangci_lint
  • paskal/bump_mockery
  • paskal/bump_modules
  • paskal/bump_tollbooth
  • paskal/chi_render
  • paskal/clarify_cache_for_frontend
  • paskal/clarify_commands
  • paskal/clarify_docs
  • paskal/clarify_email_notifications
  • paskal/clarify_notifications
  • paskal/clarify_password
  • paskal/clean_stream
  • paskal/clean_title_and_username
  • paskal/cleanup_images_on_delete
  • paskal/close_body
  • paskal/comment_validation
  • paskal/commento_url
  • paskal/comments_pagination
  • paskal/consistent_info
  • paskal/csp
  • paskal/data_race
  • paskal/datastore_info_combine
  • paskal/debug_verify
  • paskal/dependabot
  • paskal/deprecate_twitter
  • paskal/deprecated_notifications
  • paskal/deprecated_params
  • paskal/deprecation_update
  • paskal/dev_provider
  • paskal/disable_md_sanitize
  • paskal/discord_poc
  • paskal/doc_split
  • paskal/docker-compose
  • paskal/docker_labels
  • paskal/docs
  • paskal/docs_from_wiki
  • paskal/duplicate_types
  • paskal/easy_subscription
  • paskal/email
  • paskal/email_login_auth
  • paskal/email_subscription_post
  • paskal/err_fix
  • paskal/find_tests
  • paskal/fix_avatar_types
  • paskal/fix_backup_error
  • paskal/fix_commento_import
  • paskal/fix_docker
  • paskal/fix_double_close
  • paskal/fix_email_templates
  • paskal/fix_golangci_lint
  • paskal/fix_image_proxy
  • paskal/fix_img_src_CSP
  • paskal/fix_links
  • paskal/fix_log
  • paskal/fix_logout
  • paskal/fix_notify_deprecation
  • paskal/fix_refresh_tokens_cache
  • paskal/fix_telegram_auth
  • paskal/fix_telegram_cli
  • paskal/fix_telegram_escape
  • paskal/fix_telegram_format
  • paskal/fix_ticker
  • paskal/fix_timeout
  • paskal/fix_variable
  • paskal/fix_webhook_json
  • paskal/generic_fixes
  • paskal/get_rid_of_dockerhub
  • paskal/go_embed
  • paskal/go_embed_templates
  • paskal/golangci-lint-update
  • paskal/golangci_lint
  • paskal/golangci_lint_v2
  • paskal/golangcilint_bump
  • paskal/image_proxy_blacklist
  • paskal/improve_docker_build
  • paskal/improve_get_user
  • paskal/improve_server_test
  • paskal/improve_telegram_flow
  • paskal/improve_telegram_notify
  • paskal/improve_tests
  • paskal/increase_timeout
  • paskal/jwt_v5
  • paskal/lcw_v2
  • paskal/md_ci
  • paskal/min_comment_size
  • paskal/modules_update
  • paskal/moq
  • paskal/multiple-admin-emails
  • paskal/new_errors
  • paskal/new_telegram_key
  • paskal/no_getstarted
  • paskal/no_mod_vendor
  • paskal/no_path
  • paskal/notifications_rework
  • paskal/notify
  • paskal/notify-drops-tail
  • paskal/notify_drops_test
  • paskal/notify_improvements
  • paskal/notify_migration
  • paskal/optimise_images
  • paskal/pagination_fixes
  • paskal/params
  • paskal/pngcrush
  • paskal/privatePreview
  • paskal/proper_site_id
  • paskal/raw_quotes
  • paskal/readonly_find_test
  • paskal/recursive_email_notifications
  • paskal/remove-deprecated-func
  • paskal/remove_common_shared_secret
  • paskal/remove_deprecated_param
  • paskal/remove_put
  • paskal/renew_cache_on_delete
  • paskal/rpc_panic
  • paskal/secret-clarify
  • paskal/send_jwt_header
  • paskal/simlify_boltdb_info
  • paskal/simplify_admin_emails
  • paskal/simplify_extract_pictures
  • paskal/siteid_dot
  • paskal/small_improvements
  • paskal/telegram-update
  • paskal/telegram_auth
  • paskal/telegram_channel
  • paskal/telegram_notifications
  • paskal/telegram_notify
  • paskal/telegram_notify_clarity
  • paskal/telegram_notify_params
  • paskal/test_user_replies
  • paskal/tests
  • paskal/tests_cleanup
  • paskal/tg_qr
  • paskal/token_instructions
  • paskal/twitter_blockquote_class
  • paskal/typos
  • paskal/update-go-modules
  • paskal/update-gopkgz
  • paskal/update-images
  • paskal/update_discreet_variables
  • paskal/update_doc
  • paskal/update_dockerfiles
  • paskal/update_go
  • paskal/update_modules
  • paskal/user_detail_telegram
  • patch-1
  • patch-2
  • patreon-auth
  • pkgs-rename
  • postmessage-to-child
  • proxy_image_commit
  • proxy_images
  • refactor-before-search
  • refactor/cleanup-test-stdlib-router
  • refactor/cors-rest
  • refactor/go-fix-modernize
  • refactor/main-nocache
  • refactor/main-realip
  • refactor/main-throttle-rest
  • refactor/main-timeout
  • refactor/middleware-consolidate
  • refactor/router-routegroup
  • refactor/ssl-routegroup
  • refs/tags/backend/v1.10.0
  • refs/tags/backend/v1.11.0
  • refs/tags/backend/v1.11.2
  • refs/tags/backend/v1.11.3
  • refs/tags/backend/v1.12.0
  • refs/tags/backend/v1.13.0
  • refs/tags/backend/v1.13.1
  • refs/tags/backend/v1.14.0
  • refs/tags/backend/v1.16.0
  • refs/tags/backend/v1.16.1
  • refs/tags/backend/v1.16.2
  • refs/tags/backend/v1.16.3
  • refs/tags/backend/v1.16.4
  • refs/tags/backend/v1.6.0
  • refs/tags/backend/v1.6.1
  • refs/tags/backend/v1.7.0
  • refs/tags/backend/v1.7.1
  • refs/tags/backend/v1.8.1
  • refs/tags/backend/v1.9.0
  • refs/tags/backend/v1/11/3
  • refs/tags/v.1.9.0
  • refs/tags/v1.10.0
  • refs/tags/v1.10.1
  • refs/tags/v1.11.0
  • refs/tags/v1.11.1
  • refs/tags/v1.11.2
  • refs/tags/v1.11.3
  • refs/tags/v1.12.0
  • refs/tags/v1.12.1
  • refs/tags/v1.13.0
  • refs/tags/v1.13.1
  • refs/tags/v1.14.0
  • refs/tags/v1.15.0
  • refs/tags/v1.16.0
  • refs/tags/v1.16.1
  • refs/tags/v1.16.2
  • refs/tags/v1.16.3
  • refs/tags/v1.16.4
  • refs/tags/v1.30.0
  • refs/tags/v1.6.0
  • refs/tags/v1.6.1
  • refs/tags/v1.7.0
  • refs/tags/v1.7.1
  • refs/tags/v1.8.0
  • refs/tags/v1.8.1
  • refs/tags/v1.9.0
  • refs/tags/v1.9.1
  • refs/tags/v1.9.2
  • remark42-pr-fix-quotedprintable-buff-flush
  • remark42-pr-fix-smtp-newclient
  • remove-redundant-frame-ancestors-log
  • remove_golangci_conf
  • remove_unused_cache
  • same-site
  • sameip-correction-vote-728
  • sanitize-hotfix-1.6
  • sanitize-loactor
  • security-fixes-2026-04
  • security-pr-a-path-traversal
  • security-pr-c-matchsiteid
  • security-pr-d-tz-tests
  • simplify_img_storage
  • site
  • site_email_notifications
  • small-improvements
  • switch-to-pnpm
  • switch_to_lcw
  • termination_fix
  • tests_fixes
  • tests_golangci_lint
  • unsinitize
  • upd-backend-deps
  • update-comments
  • update-docs-1.7
  • update-go-version
  • update-repeater-v2
  • use-packages
  • user-comments-empy-200
  • user-info
  • valid-email-auth
  • webhook-notify
  • workspaces

17 Apr 2026 11:36PM UTC coverage: 84.345%. Remained the same
24591322614

Pull #2048

github

paskal
test: use testing/synctest to eliminate wall-clock sleeps

Go 1.25's testing/synctest package (GA) provides a fake clock bubble
for deterministic goroutine and timer testing. Convert tests that
waited on real-time durations to use synctest, removing most wall-clock
time.Sleep workarounds.

Converted (11 tests, 9 files):
- notify/notify_test.go — all tests, replaced 17 time.Sleep(110ms) with synctest.Wait()
- store/service/service_test.go — VoteSameIPWithDuration, UserReplies, submitImages,
  ResubmitStagingImages, deleteImagesOnCommentDelete
- store/image/{image,bolt_store}_test.go — Cleanup, Submit, SubmitDelay
- store/engine/bolt_test.go — FlagListBlocked
- providers/telegram_test.go — DispatchTelegramUpdates
- migrator/backup_test.go — TestBackup_Do
- _example/memory_store/accessor/data_test.go — FlagListBlocked

Simplifications along the way:
- notify/notify_mock.go: dropped the 10ms time.After delay and
  ctx.Done select in MockDest — the artificial I/O simulation is
  pointless and blocked synctest.Wait from draining the queue
- Removed three dead-code time.Sleep(1s) calls in EditCommentDurationFailed,
  EditCommentAdmin, and Info tests: prepopulated comments from 2017
  already exceed any EditDuration/ReadOnlyAge under real clock, making
  the sleeps meaningless
- UserReplies: replaced the Eventually+Sleep+mutex polling with a
  direct time.Sleep under fake clock

Skipped (incompatible with synctest):
- fs_store_test.go: relies on OS file mtime (real wall clock)
- rss_test.go: needs real wall-clock second boundary for pubDate
- admin/rest_private/rest_public tests: httptest network I/O
- cmd/server_test.go: real HTTP server startup polling

Notes on quirks encountered:
- synctest.Wait() does NOT advance fake time, contrary to what one
  might expect. It only returns once all other bubble goroutines are
  durably blocked. To advance the fake clock, the test goroutine must
  itself call time.Sleep
- BoltDB keys the "last" bucket by comment.Timest... (continued)
Pull Request #2048: test: use testing/synctest to eliminate wall-clock sleeps

6223 of 7378 relevant lines covered (84.35%)

34.33 hits per line

Relevant lines Covered
Build:
Build:
7378 RELEVANT LINES 6223 COVERED LINES
34.33 HITS PER LINE
Source Files on tests/synctest-refactor
  • Tree
  • List 50
  • Changed 1
  • Source Changed 0
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line

Recent builds

Builds Branch Commit Type Ran Committer Via Coverage
24591322614 tests/synctest-refactor test: use testing/synctest to eliminate wall-clock sleeps Go 1.25's testing/synctest package (GA) provides a fake clock bubble for deterministic goroutine and timer testing. Convert tests that waited on real-time durations to use synctest, removi... Pull #2048 17 Apr 2026 11:39PM UTC paskal github
84.35
See All Builds (1713)
  • Settings
  • Repo on GitHub
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc