### Question:
ExpiringCacheMap { public synchronized Set<K> keys() { final Set<K> keys = new LinkedHashSet<>(); for (final K key : items.keySet()) { keys.add(key); } return keys; } ExpiringCacheMap(Duration expiry);  ExpiringCacheMap(long expiry); void put(K key, Supplier<@Nullable V> action); void put(K key, ExpiringCache<@Nullable V> item); void putIfAbsent(K key, ExpiringCache<V> item); @Nullable V putIfAbsentAndGet(K key, Supplier<V> action); @Nullable V putIfAbsentAndGet(K key, ExpiringCache<V> item); @SuppressWarnings({ "null", "unused" }) void putValue(K key, @Nullable V value); boolean containsKey(K key); void remove(K key); void clear(); synchronized Set<K> keys(); @SuppressWarnings({ "null", "unused" }) @Nullable V get(K key); synchronized Collection<@Nullable V> values(); @SuppressWarnings({ "null", "unused" }) synchronized void invalidate(K key); synchronized void invalidateAll(); @SuppressWarnings({ "null", "unused" }) synchronized @Nullable V refresh(K key); synchronized Collection<@Nullable V> refreshAll();  }### Answer:
@Test public void testKeys() { subject.put(FIRST_TEST_KEY, CACHE_ACTION); final Set<String> expectedKeys = new LinkedHashSet<>(); expectedKeys.add(FIRST_TEST_KEY); final Set<String> keys = subject.keys(); assertEquals(expectedKeys, keys); }