### Question:
TyrusSession implements Session, DistributedSession { @Override public Map<String, Object> getUserProperties() { return userProperties; } TyrusSession(WebSocketContainer container, TyrusWebSocket socket, TyrusEndpointWrapper endpointWrapper,
                 String subprotocol, List<Extension> extensions, boolean isSecure,
                 URI requestURI, String queryString, Map<String, String> pathParameters, Principal principal,
                 Map<String, List<String>> requestParameterMap, final ClusterContext clusterContext,
                 String connectionId, final String remoteAddr, DebugContext debugContext); @Override String getProtocolVersion(); @Override String getNegotiatedSubprotocol(); @Override javax.websocket.RemoteEndpoint.Async getAsyncRemote(); @Override javax.websocket.RemoteEndpoint.Basic getBasicRemote(); @Override boolean isOpen(); @Override void close(); @Override void close(CloseReason closeReason); @Override int getMaxBinaryMessageBufferSize(); @Override void setMaxBinaryMessageBufferSize(int maxBinaryMessageBufferSize); @Override int getMaxTextMessageBufferSize(); @Override void setMaxTextMessageBufferSize(int maxTextMessageBufferSize); @Override Set<Session> getOpenSessions(); Set<RemoteSession> getRemoteSessions(); Set<DistributedSession> getAllSessions(); @Override List<Extension> getNegotiatedExtensions(); @Override long getMaxIdleTimeout(); @Override void setMaxIdleTimeout(long maxIdleTimeout); @Override boolean isSecure(); @Override WebSocketContainer getContainer(); @Override void addMessageHandler(MessageHandler handler); @Override void addMessageHandler(Class<T> clazz, MessageHandler.Whole<T> handler); @Override void addMessageHandler(Class<T> clazz, MessageHandler.Partial<T> handler); @Override Set<MessageHandler> getMessageHandlers(); @Override void removeMessageHandler(MessageHandler handler); @Override URI getRequestURI(); @Override Map<String, List<String>> getRequestParameterMap(); @Override Map<String, String> getPathParameters(); @Override Map<String, Object> getUserProperties(); @Override Map<String, Object> getDistributedProperties(); @Override String getQueryString(); @Override String getId(); @Override Principal getUserPrincipal(); Map<Session, Future<?>> broadcast(String message); Map<Session, Future<?>> broadcast(ByteBuffer message); long getHeartbeatInterval(); void setHeartbeatInterval(long heartbeatInterval); @Override String toString(); String getRemoteAddr();  }### Answer:
@Test public void userPropertiesTest() { Session session1 = createSession(endpointWrapper); Session session2 = createSession(endpointWrapper); final String test1 = "test1"; final String test2 = "test2"; session1.getUserProperties().put(test1, test1); session2.getUserProperties().put(test2, test2); assertNull(session1.getUserProperties().get(test2)); assertNull(session2.getUserProperties().get(test1)); assertNotNull(session1.getUserProperties().get(test1)); assertNotNull(session2.getUserProperties().get(test2)); }