### Question:
SessionAttributeManager { public synchronized void setSessionAttribute(String name, Object obj, Object requestObject){ setSessionAttribute(name, obj, null, requestObject); } SessionAttributeManager(); synchronized static SessionAttributeManager getInstance(); synchronized String getClientKeyAsString(Object requestObject); synchronized HttpSession getSession(Object requestObject); long createClientKey(); synchronized void setSessionAttribute(String name, Object obj, Object requestObject); @SuppressWarnings("unchecked") synchronized void setSessionAttribute(final String attrName, Object obj, Long clientKey, Object requestObject); synchronized Object getSessionAttribute(String name, Object requestObject); @SuppressWarnings("unchecked") synchronized Object getSessionAttribute(String name, Long clientKey, Object requestObject); void invalidateAttribute(String name, HttpSession session); void removeAttribute(String name, HttpSession session); void log(CacheEventType type, String name, Object obj, Object clientKey, HttpSession session, String details); static final String CLIENT_KEY; static final String MANAGED_ATTR_SUFFIX; static final String ATTRIBUTE_MANAGER_CACHE_SIZE_PARAM; static final String ATTRIBUTE_MANAGER_EXPIRE_AFTER_PARAM; static final long DEFAULT_KEY; static final int CACHE_SIZE; static final int EXPIRE_AFTER; }### Answer:
@Test public void SAMworksWithNoClientKey() { clientKeyReturned = null; sam.setSessionAttribute("foo", "bar", requestMock); checkValues("foo", "bar", null); sam.setSessionAttribute("foo", "bar1", requestContextMock); checkValues("foo", "bar1", null); }