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

ben-manes / caffeine / #5494
100%
master: 100%

Build:
Build:
LAST BUILD BRANCH: v3.dev
DEFAULT BRANCH: master
Ran 02 Jun 2026 12:47AM UTC
Jobs 1
Files 78
Run time 1min
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

02 Jun 2026 12:29AM UTC coverage: 100.0%. Remained the same
#5494

push

github

ben-manes
Fix JCache zero-creation-expiry, Guava null-query, and simulator bugs

JCache: two write paths ignored a zero creation expiry. Per
ExpiryPolicy.getExpiryForCreation (JSR-107 1.1.1), a Duration.ZERO entry 'will
not be added to the Cache', but the EntryProcessor create/load path
(CacheProxy.postProcess) recorded a put and published a CREATED event, and
putIfAbsent (putIfAbsentNoAwait set its absent flag before the zero-expiry
guard) recorded a put and returned true -- both for an entry that is never
added, unlike the guarded put()/getAndPut(). Mirror the put guard in both: skip
the put stat and CREATED event, publish EXPIRED, store nothing; putIfAbsent now
returns false. A new write-path parity test
(JCacheCreationExpiryTest.writeOp_absent_zeroCreationExpiry over
put/putAll/putIfAbsent/getAndPut/invoke) asserts every path agrees. Verified
against the RI, Ehcache 2/3, Infinispan, Hazelcast, Coherence, and cache2k: the
entry is added in none; no put is counted in 6/7 (incl. the RI); putIfAbsent
returns false in the RI.

Guava: keep the facade a drop-in for Guava. Match its asMap null-query
tolerance: get/containsKey/containsValue/remove/remove(k,v)/replace(k,null,v)
and keySet()/values().contains/containsAll now tolerate null (return
null/false) instead of throwing, and getAllPresent drops a null element. The
testlib suite is raised to ALLOWS_ANY_NULL_QUERIES and is now also run against
real Guava (GuavaMapTests) to guard against divergence; both pass. A
method-by-method cross-check against Guava 33.6.0's LocalCache source also
fixed two behavioral divergences the testlib does not assert:
invalidateAll(Iterable) threw NPE on a null element after a partial removal (now
filters nulls like getAllPresent), and entrySet().addAll(emptyCollection) threw
UnsupportedOperationException where Guava returns false.

Simulator: GLCacheTraceReader read the little-endian libCacheSim oracleGeneral
record as big-endian (mirror the OracleGeneralTraceReader sibling); Adam/Na... (continued)

4034 of 4042 branches covered (99.8%)

18 of 18 new or added lines in 2 files covered. (100.0%)

8218 of 8218 relevant lines covered (100.0%)

1.0 hits per line

Jobs
ID Job ID Ran Files Coverage
1 #5494.1 02 Jun 2026 12:47AM UTC 78
100.0
Source Files on build #5494
  • Tree
  • List 78
  • Changed 2
  • Source Changed 2
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • fc7e6152 on github
  • Prev Build on master
  • Next Build on v3.dev
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc