This is an automated email from the ASF dual-hosted git repository.
anovikov pushed a commit to branch ignite-19921
in repository https://gitbox.apache.org/repos/asf/ignite-extensions.git
The following commit(s) were added to refs/heads/ignite-19921 by this push:
new 13469165 IGNITE-19921 Add thin client support for Spring Session.
13469165 is described below
commit 13469165624ca93ef636ba1a0dc4e992d9a18fce
Author: Andrey Novikov <[email protected]>
AuthorDate: Thu Jul 6 15:30:55 2023 +0700
IGNITE-19921 Add thin client support for Spring Session.
---
.../sessions/IgniteHttpSessionConfiguration.java | 70 +++-
.../sessions/IgniteIndexedSessionRepository.java | 134 +++-----
.../spring/sessions/SpringSessionIgnite.java | 3 +-
.../spring/sessions/proxy/ClientSessionProxy.java | 67 ++++
.../spring/sessions/proxy/IgniteSessionProxy.java | 67 ++++
.../ignite/spring/sessions/proxy/SessionProxy.java | 102 ++++++
...bstractIgniteIndexedSessionRepositoryITest.java | 240 -------------
...AbstractIgniteIndexedSessionRepositoryTest.java | 212 ++++++++++++
...mbeddedIgniteIndexedSessionRepositoryTest.java} | 45 ++-
... IgniteClientIndexedSessionRepositoryTest.java} | 53 ++-
.../IgniteHttpSessionConfigurationTest.java | 194 +++++------
.../IgniteIndexedSessionRepositoryTest.java | 372 ++++++++++-----------
...{IgniteITestUtils.java => IgniteTestUtils.java} | 4 +-
13 files changed, 904 insertions(+), 659 deletions(-)
diff --git
a/modules/spring-session-ext/src/main/java/org/apache/ignite/spring/sessions/IgniteHttpSessionConfiguration.java
b/modules/spring-session-ext/src/main/java/org/apache/ignite/spring/sessions/IgniteHttpSessionConfiguration.java
index d08a7d18..eeb8167c 100644
---
a/modules/spring-session-ext/src/main/java/org/apache/ignite/spring/sessions/IgniteHttpSessionConfiguration.java
+++
b/modules/spring-session-ext/src/main/java/org/apache/ignite/spring/sessions/IgniteHttpSessionConfiguration.java
@@ -17,11 +17,18 @@ package org.apache.ignite.spring.sessions;
* limitations under the License.
*/
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
-
import org.apache.ignite.Ignite;
+import org.apache.ignite.cache.query.SqlFieldsQuery;
+import org.apache.ignite.client.IgniteClient;
+import org.apache.ignite.internal.IgniteEx;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.spring.sessions.proxy.ClientSessionProxy;
+import org.apache.ignite.spring.sessions.proxy.IgniteSessionProxy;
+import org.apache.ignite.spring.sessions.proxy.SessionProxy;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
@@ -61,7 +68,7 @@ public class IgniteHttpSessionConfiguration extends
SpringHttpSessionConfigurati
private SaveMode saveMode = SaveMode.ON_SET_ATTRIBUTE;
/** */
- private Ignite ignite;
+ private SessionProxy sessions;
/** */
private ApplicationEventPublisher applicationEventPublisher;
@@ -113,13 +120,20 @@ public class IgniteHttpSessionConfiguration extends
SpringHttpSessionConfigurati
* @param ignite Ignite instance provider.
*/
@Autowired
- public void setIgnite(@SpringSessionIgnite ObjectProvider<Ignite>
springSessionIgnite,
- ObjectProvider<Ignite> ignite) {
- Ignite igniteToUse = springSessionIgnite.getIfAvailable();
- if (igniteToUse == null)
- igniteToUse = ignite.getObject();
+ public void setSessions(
+ @SpringSessionIgnite ObjectProvider<Object> springSessionIgnite,
+ ObjectProvider<Ignite> ignite,
+ ObjectProvider<IgniteClient> cli
+ ) {
+ Object connObj = springSessionIgnite.getIfAvailable();
+
+ if (connObj == null)
+ connObj = ignite.getIfAvailable();
- this.ignite = igniteToUse;
+ if (connObj == null)
+ connObj = cli.getIfAvailable();
+
+ this.sessions = createSessionProxy(connObj);
}
/**
@@ -150,7 +164,7 @@ public class IgniteHttpSessionConfiguration extends
SpringHttpSessionConfigurati
/**
* @param importMetadata Annotation metadata.
*/
- @Override @SuppressWarnings("deprecation") public void
setImportMetadata(AnnotationMetadata importMetadata) {
+ @Override public void setImportMetadata(AnnotationMetadata importMetadata)
{
Map<String, Object> attributeMap = importMetadata
.getAnnotationAttributes(EnableIgniteHttpSession.class.getName());
AnnotationAttributes attributes =
AnnotationAttributes.fromMap(attributeMap);
@@ -163,16 +177,46 @@ public class IgniteHttpSessionConfiguration extends
SpringHttpSessionConfigurati
this.saveMode = attributes.getEnum("saveMode");
}
+ /** */
+ private SessionProxy createSessionProxy(Object connObj) {
+ List<SqlFieldsQuery> initQueries = Arrays.asList(
+ new SqlFieldsQuery("CREATE TABLE IF NOT EXISTS IgniteSession (" +
+ " id VARCHAR PRIMARY KEY," +
+ " delegate OTHER," +
+ " principal VARCHAR" +
+ ") WITH
\"template=replicated,atomicity=atomic,value_type=org.apache.ignite.spring.sessions.IgniteIndexedSessionRepository$IgniteSession,cache_name="
+ sessionMapName + "\""),
+ new SqlFieldsQuery("CREATE INDEX IF NOT EXISTS
ignitesession_principal_idx ON IgniteSession (principal);")
+ );
+
+ if (connObj instanceof IgniteEx) {
+ IgniteEx ignite = (IgniteEx)connObj;
+
+ for (SqlFieldsQuery qry : initQueries)
+ U.closeQuiet(ignite.context().query().querySqlFields(qry,
true));
+
+ return new IgniteSessionProxy(ignite.cache(sessionMapName));
+ }
+
+ if (connObj instanceof IgniteClient) {
+ IgniteClient cli = (IgniteClient)connObj;
+
+ for (SqlFieldsQuery qry : initQueries)
+ cli.query(qry).getAll();
+
+ return new ClientSessionProxy(cli.cache(sessionMapName));
+ }
+
+ throw new IllegalArgumentException(
+ "Object " + connObj + " can not be used to connect to the Ignite
cluster.");
+ }
+
/** */
private IgniteIndexedSessionRepository
createIgniteIndexedSessionRepository() {
- IgniteIndexedSessionRepository sessionRepository = new
IgniteIndexedSessionRepository(this.ignite);
+ IgniteIndexedSessionRepository sessionRepository = new
IgniteIndexedSessionRepository(this.sessions);
sessionRepository.setApplicationEventPublisher(this.applicationEventPublisher);
if (this.indexResolver != null)
sessionRepository.setIndexResolver(this.indexResolver);
- if (StringUtils.hasText(this.sessionMapName))
- sessionRepository.setSessionMapName(this.sessionMapName);
-
sessionRepository.setDefaultMaxInactiveInterval(this.maxInactiveIntervalInSeconds);
sessionRepository.setFlushMode(this.flushMode);
sessionRepository.setSaveMode(this.saveMode);
diff --git
a/modules/spring-session-ext/src/main/java/org/apache/ignite/spring/sessions/IgniteIndexedSessionRepository.java
b/modules/spring-session-ext/src/main/java/org/apache/ignite/spring/sessions/IgniteIndexedSessionRepository.java
index 0a679345..854f1600 100644
---
a/modules/spring-session-ext/src/main/java/org/apache/ignite/spring/sessions/IgniteIndexedSessionRepository.java
+++
b/modules/spring-session-ext/src/main/java/org/apache/ignite/spring/sessions/IgniteIndexedSessionRepository.java
@@ -26,7 +26,6 @@ import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.TimeUnit;
-import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.cache.configuration.CacheEntryListenerConfiguration;
import javax.cache.configuration.Factory;
@@ -40,13 +39,9 @@ import javax.cache.event.CacheEntryRemovedListener;
import javax.cache.expiry.TouchedExpiryPolicy;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.cache.query.FieldsQueryCursor;
+import org.apache.ignite.cache.query.QueryCursor;
import org.apache.ignite.cache.query.SqlFieldsQuery;
-import org.apache.ignite.cache.query.annotations.QuerySqlField;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.internal.GridDirectTransient;
+import org.apache.ignite.spring.sessions.proxy.SessionProxy;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.session.DelegatingIndexResolver;
import org.springframework.session.FindByIndexNameSessionRepository;
@@ -64,26 +59,21 @@ import org.springframework.util.Assert;
/**
* A {@link org.springframework.session.SessionRepository} implementation that
stores
- * sessions in Apache Ignite distributed {@link IgniteCache}.
+ * sessions in Apache Ignite distributed {@link SessionProxy}.
*
* <p>
* An example of how to create a new instance can be seen below:
- *
* <pre class="code">
* IgniteConfiguration config = new IgniteConfiguration();
- *
* // ... configure Ignite ...
- *
* Ignite ignite = IgnitionEx.start(config);
- *
* IgniteIndexedSessionRepository sessionRepository =
* new IgniteIndexedSessionRepository(ignite);
* </pre>
*
* In order to support finding sessions by principal name using
* {@link #findByIndexNameAndIndexValue(String, String)} method, custom
configuration of
- * {@link IgniteCache} supplied to this implementation is required.
- *
+ * {@link SessionProxy} supplied to this implementation is required.
* This implementation listens for events on the Ignite-backed
SessionRepository and
* translates those events into the corresponding Spring Session events.
Publish the
* Spring Session events with the given {@link ApplicationEventPublisher}.
@@ -111,9 +101,6 @@ public class IgniteIndexedSessionRepository
/** */
private static final Log logger =
LogFactory.getLog(IgniteIndexedSessionRepository.class);
- /** */
- private final Ignite ignite;
-
/** */
private ApplicationEventPublisher eventPublisher = (event) -> {
};
@@ -127,9 +114,6 @@ public class IgniteIndexedSessionRepository
/** */
private IndexResolver<Session> indexResolver = new
DelegatingIndexResolver<>(new PrincipalNameIndexResolver<>());
- /** */
- private String sessionMapName = DEFAULT_SESSION_MAP_NAME;
-
/** */
private FlushMode flushMode = FlushMode.ON_SAVE;
@@ -137,49 +121,41 @@ public class IgniteIndexedSessionRepository
private SaveMode saveMode = SaveMode.ON_SET_ATTRIBUTE;
/** */
- private IgniteCache<String, IgniteSession> sessions;
+ private final SessionProxy sessions;
/** */
private CacheEntryListenerConfiguration<String, IgniteSession>
listenerConfiguration;
/**
* Create a new {@link IgniteIndexedSessionRepository} instance.
- * @param ignite the {@link Ignite} instance to use for managing sessions
+ * @param sessions the {@link SessionProxy} instance to use for managing
sessions
*/
- public IgniteIndexedSessionRepository(Ignite ignite) {
- Assert.notNull(ignite, "Ignite must not be null");
- this.ignite = ignite;
- }
-
- /** */
- @PostConstruct
- public void init() {
- final CacheConfiguration<String, IgniteSession> configuration = new
CacheConfiguration<String, IgniteSession>(
- this.sessionMapName).setIndexedTypes(String.class,
IgniteSession.class);
-
- if (this.defaultMaxInactiveInterval != null)
- configuration.setExpiryPolicyFactory(TouchedExpiryPolicy
- .factoryOf(new
javax.cache.expiry.Duration(TimeUnit.SECONDS,
this.defaultMaxInactiveInterval)));
-
- this.sessions = this.ignite.getOrCreateCache(configuration);
-
+ public IgniteIndexedSessionRepository(SessionProxy sessions) {
+ Assert.notNull(sessions, "Session proxy must not be null");
+ this.sessions = sessions;
+
this.listenerConfiguration = new
CacheEntryListenerConfiguration<String, IgniteSession>() {
+ /** {@inheritDoc} */
@Override public Factory<CacheEntryListener<? super String, ?
super IgniteSession>> getCacheEntryListenerFactory() {
- return (Factory<CacheEntryListener<? super String, ? super
IgniteSession>>)() -> IgniteIndexedSessionRepository.this;
+ return () -> IgniteIndexedSessionRepository.this;
}
+ /** {@inheritDoc} */
@Override public boolean isOldValueRequired() {
return true;
}
+ /** {@inheritDoc} */
@Override public Factory<CacheEntryEventFilter<? super String, ?
super IgniteSession>> getCacheEntryEventFilterFactory() {
return null;
}
+ /** {@inheritDoc} */
@Override public boolean isSynchronous() {
return false;
}
};
+
this.sessions.registerCacheEntryListener(this.listenerConfiguration);
}
@@ -220,15 +196,6 @@ public class IgniteIndexedSessionRepository
this.indexResolver = indexResolver;
}
- /**
- * Set the name of map used to store sessions.
- * @param sessionMapName the session map name
- */
- public void setSessionMapName(String sessionMapName) {
- Assert.hasText(sessionMapName, "Map name must not be empty");
- this.sessionMapName = sessionMapName;
- }
-
/**
* Sets the flush mode. Default flush mode is {@link FlushMode#ON_SAVE}.
* @param flushMode the new flush mode
@@ -247,7 +214,7 @@ public class IgniteIndexedSessionRepository
this.saveMode = saveMode;
}
- /** */
+ /** {@inheritDoc} */
@Override public IgniteSession createSession() {
MapSession cached = new MapSession();
if (this.defaultMaxInactiveInterval != null)
@@ -258,7 +225,7 @@ public class IgniteIndexedSessionRepository
return session;
}
- /** */
+ /** {@inheritDoc} */
@Override public void save(IgniteSession session) {
if (session.isNew)
ttlSessions(session.getMaxInactiveInterval()).put(session.getId(),
session);
@@ -269,17 +236,15 @@ public class IgniteIndexedSessionRepository
ttlSessions(session.getMaxInactiveInterval()).put(session.getId(),
session);
}
else if (session.hasChanges()) {
- if (session.maxInactiveIntervalChanged) {
+ if (session.maxInactiveIntervalChanged)
ttlSessions(session.getMaxInactiveInterval()).replace(session.getId(), session);
- }
- else {
+ else
this.sessions.replace(session.getId(), session);
- }
}
session.clearChangeFlags();
}
- /** */
+ /** {@inheritDoc} */
@Override public IgniteSession findById(String id) {
IgniteSession saved = this.sessions.get(id);
if (saved == null)
@@ -293,17 +258,17 @@ public class IgniteIndexedSessionRepository
return saved;
}
- /** */
+ /** {@inheritDoc} */
@Override public void deleteById(String id) {
this.sessions.remove(id);
}
- /** */
+ /** {@inheritDoc} */
@Override public Map<String, IgniteSession>
findByIndexNameAndIndexValue(String indexName, String indexValue) {
if (!PRINCIPAL_NAME_INDEX_NAME.equals(indexName))
return Collections.emptyMap();
- final FieldsQueryCursor<List<?>> cursor = this.sessions
+ final QueryCursor<List<?>> cursor = this.sessions
.query(new SqlFieldsQuery("SELECT * FROM IgniteSession WHERE
principal='" + indexValue + "'"));
if (cursor == null)
@@ -314,16 +279,16 @@ public class IgniteIndexedSessionRepository
Map<String, IgniteSession> sessionMap = new HashMap<>(sessions.size());
sessions.forEach((List<?> res) -> {
- final MapSession session = (MapSession)res.get(0);
+ final MapSession session = (MapSession)res.get(1);
final IgniteSession value = new IgniteSession(session, false);
- value.principal = (String)res.get(1);
+ value.principal = (String)res.get(2);
sessionMap.put(session.getId(), value);
});
return sessionMap;
}
- /** */
+ /** {@inheritDoc} */
@Override public void onCreated(Iterable<CacheEntryEvent<? extends String,
? extends IgniteSession>> events)
throws CacheEntryListenerException {
events.forEach((event) -> {
@@ -337,7 +302,7 @@ public class IgniteIndexedSessionRepository
});
}
- /** */
+ /** {@inheritDoc} */
@Override public void onExpired(Iterable<CacheEntryEvent<? extends String,
? extends IgniteSession>> events)
throws CacheEntryListenerException {
events.forEach((event) -> {
@@ -348,7 +313,7 @@ public class IgniteIndexedSessionRepository
});
}
- /** */
+ /** {@inheritDoc} */
@Override public void onRemoved(Iterable<CacheEntryEvent<? extends String,
? extends IgniteSession>> events)
throws CacheEntryListenerException {
events.forEach((event) -> {
@@ -367,7 +332,7 @@ public class IgniteIndexedSessionRepository
* @param duration expiry duration for IgniteSession.
* @return cache with custom duration expiry policy.
*/
- private IgniteCache<String, IgniteSession> ttlSessions(Duration duration) {
+ private SessionProxy ttlSessions(Duration duration) {
return this.sessions.withExpiryPolicy(createPolicy(duration));
}
@@ -384,38 +349,29 @@ public class IgniteIndexedSessionRepository
* A custom implementation of {@link Session} that uses a {@link
MapSession} as the
* basis for its mapping. It keeps track if changes have been made since
last save.
*/
- final class IgniteSession implements Session {
-
+ public class IgniteSession implements Session {
/** */
- @QuerySqlField
private final MapSession delegate;
/** */
- @GridDirectTransient
private boolean isNew;
/** */
- @GridDirectTransient
private boolean sessionIdChanged;
/** */
- @GridDirectTransient
private boolean lastAccessedTimeChanged;
/** */
- @GridDirectTransient
private boolean maxInactiveIntervalChanged;
/** */
- @GridDirectTransient
private String originalId;
/** */
- @GridDirectTransient
private Map<String, Object> delta = new HashMap<>();
/** */
- @QuerySqlField(index = true)
private String principal;
/**
@@ -432,53 +388,53 @@ public class IgniteIndexedSessionRepository
}
- /** */
+ /** {@inheritDoc} */
@Override public void setLastAccessedTime(Instant lastAccessedTime) {
this.delegate.setLastAccessedTime(lastAccessedTime);
this.lastAccessedTimeChanged = true;
flushImmediateIfNecessary();
}
- /** */
+ /** {@inheritDoc} */
@Override public boolean isExpired() {
return this.delegate.isExpired();
}
- /** */
+ /** {@inheritDoc} */
@Override public Instant getCreationTime() {
return this.delegate.getCreationTime();
}
- /** */
+ /** {@inheritDoc} */
@Override public String getId() {
return this.delegate.getId();
}
- /** */
+ /** {@inheritDoc} */
@Override public String changeSessionId() {
String newSessionId = this.delegate.changeSessionId();
this.sessionIdChanged = true;
return newSessionId;
}
- /** */
+ /** {@inheritDoc} */
@Override public Instant getLastAccessedTime() {
return this.delegate.getLastAccessedTime();
}
- /** */
+ /** {@inheritDoc} */
@Override public void setMaxInactiveInterval(Duration interval) {
this.delegate.setMaxInactiveInterval(interval);
this.maxInactiveIntervalChanged = true;
flushImmediateIfNecessary();
}
- /** */
+ /** {@inheritDoc} */
@Override public Duration getMaxInactiveInterval() {
return this.delegate.getMaxInactiveInterval();
}
- /** */
+ /** {@inheritDoc} */
@Override public <T> T getAttribute(String attributeName) {
T attributeValue = this.delegate.getAttribute(attributeName);
if (attributeValue != null
@@ -488,12 +444,12 @@ public class IgniteIndexedSessionRepository
return attributeValue;
}
- /** */
+ /** {@inheritDoc} */
@Override public Set<String> getAttributeNames() {
return this.delegate.getAttributeNames();
}
- /** */
+ /** {@inheritDoc} */
@Override public void setAttribute(String attributeName, Object
attributeValue) {
this.delegate.setAttribute(attributeName, attributeValue);
this.delta.put(attributeName, attributeValue);
@@ -506,7 +462,7 @@ public class IgniteIndexedSessionRepository
flushImmediateIfNecessary();
}
- /** */
+ /** {@inheritDoc} */
@Override public void removeAttribute(String attributeName) {
setAttribute(attributeName, null);
}
@@ -536,7 +492,7 @@ public class IgniteIndexedSessionRepository
IgniteIndexedSessionRepository.this.save(this);
}
- /** */
+ /** {@inheritDoc} */
@Override public boolean equals(Object o) {
if (this == o)
return true;
@@ -548,7 +504,7 @@ public class IgniteIndexedSessionRepository
return this.delegate.equals(session.delegate);
}
- /** */
+ /** {@inheritDoc} */
@Override public int hashCode() {
return Objects.hash(this.delegate);
}
diff --git
a/modules/spring-session-ext/src/main/java/org/apache/ignite/spring/sessions/SpringSessionIgnite.java
b/modules/spring-session-ext/src/main/java/org/apache/ignite/spring/sessions/SpringSessionIgnite.java
index 82b51a43..f372556a 100644
---
a/modules/spring-session-ext/src/main/java/org/apache/ignite/spring/sessions/SpringSessionIgnite.java
+++
b/modules/spring-session-ext/src/main/java/org/apache/ignite/spring/sessions/SpringSessionIgnite.java
@@ -24,10 +24,11 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.apache.ignite.Ignite;
+import org.apache.ignite.client.IgniteClient;
import org.springframework.beans.factory.annotation.Qualifier;
/**
- * Qualifier annotation for a {@link Ignite} to be injected in
+ * Qualifier annotation for a {@link Ignite} or a {@link IgniteClient} to be
injected in
* {@link IgniteIndexedSessionRepository}.
*
*/
diff --git
a/modules/spring-session-ext/src/main/java/org/apache/ignite/spring/sessions/proxy/ClientSessionProxy.java
b/modules/spring-session-ext/src/main/java/org/apache/ignite/spring/sessions/proxy/ClientSessionProxy.java
new file mode 100644
index 00000000..c311f8b0
--- /dev/null
+++
b/modules/spring-session-ext/src/main/java/org/apache/ignite/spring/sessions/proxy/ClientSessionProxy.java
@@ -0,0 +1,67 @@
+package org.apache.ignite.spring.sessions.proxy;
+
+import javax.cache.configuration.CacheEntryListenerConfiguration;
+import javax.cache.expiry.ExpiryPolicy;
+import org.apache.ignite.cache.query.Query;
+import org.apache.ignite.cache.query.QueryCursor;
+import org.apache.ignite.client.ClientCache;
+import
org.apache.ignite.spring.sessions.IgniteIndexedSessionRepository.IgniteSession;
+
+/**
+ * Represents {@link SessionProxy} implementation that uses {@link
ClientCache} to perform session operations.
+ */
+public class ClientSessionProxy implements SessionProxy {
+ /** Client cache instance. */
+ private final ClientCache<String, IgniteSession> cache;
+
+ /**
+ * @param cache Client cache instance.
+ */
+ public ClientSessionProxy(ClientCache<String, IgniteSession> cache) {
+ this.cache = cache;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void registerCacheEntryListener(
+ CacheEntryListenerConfiguration<String, IgniteSession>
cacheEntryListenerConfiguration
+ ) {
+ cache.registerCacheEntryListener(cacheEntryListenerConfiguration);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void deregisterCacheEntryListener(
+ CacheEntryListenerConfiguration<String, IgniteSession>
cacheEntryListenerConfiguration
+ ) {
+ cache.deregisterCacheEntryListener(cacheEntryListenerConfiguration);
+ }
+
+ /** {@inheritDoc} */
+ @Override public SessionProxy withExpiryPolicy(ExpiryPolicy expirePlc) {
+ return new ClientSessionProxy(cache.withExpirePolicy(expirePlc));
+ }
+
+ /** {@inheritDoc} */
+ @Override public IgniteSession get(String key) {
+ return cache.get(key);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void put(String key, IgniteSession val) {
+ cache.put(key, val);
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean remove(String key) {
+ return cache.remove(key);
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean replace(String key, IgniteSession val) {
+ return cache.replace(key, val);
+ }
+
+ /** {@inheritDoc} */
+ @Override public <R> QueryCursor<R> query(Query<R> qry) {
+ return cache.query(qry);
+ }
+}
diff --git
a/modules/spring-session-ext/src/main/java/org/apache/ignite/spring/sessions/proxy/IgniteSessionProxy.java
b/modules/spring-session-ext/src/main/java/org/apache/ignite/spring/sessions/proxy/IgniteSessionProxy.java
new file mode 100644
index 00000000..51e1494d
--- /dev/null
+++
b/modules/spring-session-ext/src/main/java/org/apache/ignite/spring/sessions/proxy/IgniteSessionProxy.java
@@ -0,0 +1,67 @@
+package org.apache.ignite.spring.sessions.proxy;
+
+import javax.cache.configuration.CacheEntryListenerConfiguration;
+import javax.cache.expiry.ExpiryPolicy;
+import org.apache.ignite.IgniteCache;
+import org.apache.ignite.cache.query.Query;
+import org.apache.ignite.cache.query.QueryCursor;
+import
org.apache.ignite.spring.sessions.IgniteIndexedSessionRepository.IgniteSession;
+
+/**
+ * Represents {@link SessionProxy} implementation that uses {@link
IgniteCache} to perform session operations.
+ */
+public class IgniteSessionProxy implements SessionProxy {
+ /** Ignite cache instance. */
+ private final IgniteCache<String, IgniteSession> cache;
+
+ /**
+ * @param cache Ignite cache instance.
+ */
+ public IgniteSessionProxy(IgniteCache<String, IgniteSession> cache) {
+ this.cache = cache;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void registerCacheEntryListener(
+ CacheEntryListenerConfiguration<String, IgniteSession>
cacheEntryListenerConfiguration
+ ) {
+ cache.registerCacheEntryListener(cacheEntryListenerConfiguration);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void deregisterCacheEntryListener(
+ CacheEntryListenerConfiguration<String, IgniteSession>
cacheEntryListenerConfiguration
+ ) {
+ cache.deregisterCacheEntryListener(cacheEntryListenerConfiguration);
+ }
+
+ /** {@inheritDoc} */
+ @Override public SessionProxy withExpiryPolicy(ExpiryPolicy expirePlc) {
+ return new IgniteSessionProxy(cache.withExpiryPolicy(expirePlc));
+ }
+
+ /** {@inheritDoc} */
+ @Override public IgniteSession get(String key) {
+ return cache.get(key);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void put(String key, IgniteSession val) {
+ cache.put(key, val);
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean remove(String key) {
+ return cache.remove(key);
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean replace(String key, IgniteSession val) {
+ return cache.replace(key, val);
+ }
+
+ /** {@inheritDoc} */
+ @Override public <R> QueryCursor<R> query(Query<R> qry) {
+ return cache.query(qry);
+ }
+}
diff --git
a/modules/spring-session-ext/src/main/java/org/apache/ignite/spring/sessions/proxy/SessionProxy.java
b/modules/spring-session-ext/src/main/java/org/apache/ignite/spring/sessions/proxy/SessionProxy.java
new file mode 100644
index 00000000..97c2f1ac
--- /dev/null
+++
b/modules/spring-session-ext/src/main/java/org/apache/ignite/spring/sessions/proxy/SessionProxy.java
@@ -0,0 +1,102 @@
+package org.apache.ignite.spring.sessions.proxy;
+
+import javax.cache.Cache;
+import javax.cache.CacheException;
+import javax.cache.configuration.CacheEntryListenerConfiguration;
+import javax.cache.event.CacheEntryListener;
+import javax.cache.expiry.ExpiryPolicy;
+import javax.cache.integration.CacheWriter;
+import org.apache.ignite.cache.query.Query;
+import org.apache.ignite.cache.query.QueryCursor;
+import org.apache.ignite.spring.sessions.IgniteIndexedSessionRepository;
+
+/** Represents Ignite client-independent session operations. */
+public interface SessionProxy {
+ /**
+ * Registers a {@link CacheEntryListener}. The supplied {@link
CacheEntryListenerConfiguration} is used to
+ * instantiate a listener and apply it to those events specified in the
configuration.
+ *
+ * @param cacheEntryListenerConfiguration a factory and related
configuration for creating the listener.
+ * @throws IllegalArgumentException is the same
CacheEntryListenerConfiguration is used more than once or
+ * if some unsupported by thin client properties are set.
+ * @see CacheEntryListener
+ */
+ public void
registerCacheEntryListener(CacheEntryListenerConfiguration<String,
IgniteIndexedSessionRepository.IgniteSession> cacheEntryListenerConfiguration);
+
+ /**
+ * Deregisters a listener, using the {@link
CacheEntryListenerConfiguration} that was used to register it.
+ *
+ * @param cacheEntryListenerConfiguration the factory and related
configuration that was used to create the
+ * listener.
+ */
+ public void
deregisterCacheEntryListener(CacheEntryListenerConfiguration<String,
IgniteIndexedSessionRepository.IgniteSession> cacheEntryListenerConfiguration);
+
+ /**
+ * Returns cache with the specified expired policy set. This policy will
be used for each operation invoked on
+ * the returned cache.
+ *
+ * @param expirePlc Expire policy.
+ * @return Cache instance with the specified expiry policy set.
+ */
+ public SessionProxy withExpiryPolicy(ExpiryPolicy expirePlc);
+
+ /**
+ * Gets an entry from the cache.
+ *
+ * @param key the key whose associated value is to be returned
+ * @return the element, or null, if it does not exist.
+ */
+ public IgniteIndexedSessionRepository.IgniteSession get(String key);
+
+ /**
+ * Associates the specified value with the specified key in the cache.
+ *
+ * @param key key with which the specified value is to be associated
+ * @param val value to be associated with the specified key.
+ */
+ public void put(String key, IgniteIndexedSessionRepository.IgniteSession
val);
+
+ /**
+ * Removes the mapping for a key from this cache if it is present.
+ *
+ * @param key Key whose mapping is to be removed from the cache.
+ * @return <tt>false</tt> if there was no matching key.
+ */
+ public boolean remove(String key);
+
+ /**
+ * Atomically replaces the entry for a key only if currently mapped to some
+ * value.
+ * <p>
+ * This is equivalent to
+ * <pre><code>
+ * if (cache.containsKey(key)) {
+ * cache.put(key, value);
+ * return true;
+ * } else {
+ * return false;
+ * }</code></pre>
+ * except that the action is performed atomically.
+ *
+ * @param key the key with which the specified value is associated
+ * @param val the value to be associated with the specified key
+ * @return <tt>true</tt> if the value was replaced
+ * @throws NullPointerException if key is null or if value is null
+ * @throws CacheException if there is a problem during the replace
+ * @throws ClassCastException if the implementation is configured to
perform
+ * runtime-type-checking, and the key or
value
+ * types are incompatible with those that
have been
+ * configured for the {@link Cache}
+ * @see CacheWriter#write
+ */
+ public boolean replace(String key,
IgniteIndexedSessionRepository.IgniteSession val);
+
+ /**
+ * Execute SQL query and get cursor to iterate over results.
+ *
+ * @param <R> Type of query data.
+ * @param qry SQL query.
+ * @return Query result cursor.
+ */
+ public <R> QueryCursor<R> query(Query<R> qry);
+}
diff --git
a/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/AbstractIgniteIndexedSessionRepositoryITest.java
b/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/AbstractIgniteIndexedSessionRepositoryITest.java
deleted file mode 100644
index eb0e1f67..00000000
---
a/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/AbstractIgniteIndexedSessionRepositoryITest.java
+++ /dev/null
@@ -1,240 +0,0 @@
-package org.apache.ignite.spring.sessions;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.time.Duration;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import
org.apache.ignite.spring.sessions.IgniteIndexedSessionRepository.IgniteSession;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import
org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.authority.AuthorityUtils;
-import org.springframework.security.core.context.SecurityContext;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.session.FindByIndexNameSessionRepository;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-/**
- * Base class for {@link IgniteIndexedSessionRepository} integration tests.
- */
-abstract class AbstractIgniteIndexedSessionRepositoryITest {
- /** */
- private static final String SPRING_SECURITY_CONTEXT =
"SPRING_SECURITY_CONTEXT";
-
- /** */
- @Autowired
- private Ignite ignite;
-
- /** */
- @Autowired
- private IgniteIndexedSessionRepository repository;
-
- /** */
- @Test
- void createAndDestroySession() {
- IgniteIndexedSessionRepository.IgniteSession sessionToSave =
this.repository.createSession();
- String sessionId = sessionToSave.getId();
-
- IgniteCache<String, IgniteIndexedSessionRepository.IgniteSession>
cache = this.ignite
-
.getOrCreateCache(IgniteIndexedSessionRepository.DEFAULT_SESSION_MAP_NAME);
-
- assertThat(cache.size()).isEqualTo(0);
-
- this.repository.save(sessionToSave);
-
- assertThat(cache.size()).isEqualTo(1);
- assertThat(cache.get(sessionId)).isEqualTo(sessionToSave);
-
- this.repository.deleteById(sessionId);
-
- assertThat(cache.size()).isEqualTo(0);
- }
-
- /** */
- @Test
- void changeSessionIdWhenOnlyChangeId() {
- String attrName = "changeSessionId";
- String attrValue = "changeSessionId-value";
- IgniteSession toSave = this.repository.createSession();
- toSave.setAttribute(attrName, attrValue);
-
- this.repository.save(toSave);
-
- IgniteSession findById = this.repository.findById(toSave.getId());
-
-
assertThat(findById.<String>getAttribute(attrName)).isEqualTo(attrValue);
-
- String originalFindById = findById.getId();
- String changeSessionId = findById.changeSessionId();
-
- this.repository.save(findById);
-
- assertThat(this.repository.findById(originalFindById)).isNull();
-
- IgniteSession findByChangeSessionId =
this.repository.findById(changeSessionId);
-
-
assertThat(findByChangeSessionId.<String>getAttribute(attrName)).isEqualTo(attrValue);
-
- this.repository.deleteById(changeSessionId);
- }
-
- /** */
- @Test
- void changeSessionIdWhenChangeTwice() {
- IgniteSession toSave = this.repository.createSession();
-
- this.repository.save(toSave);
-
- String originalId = toSave.getId();
- String changeId1 = toSave.changeSessionId();
- String changeId2 = toSave.changeSessionId();
-
- this.repository.save(toSave);
-
- assertThat(this.repository.findById(originalId)).isNull();
- assertThat(this.repository.findById(changeId1)).isNull();
- assertThat(this.repository.findById(changeId2)).isNotNull();
-
- this.repository.deleteById(changeId2);
- }
-
- /** */
- @Test
- void changeSessionIdWhenSetAttributeOnChangedSession() {
- String attrName = "changeSessionId";
- String attrValue = "changeSessionId-value";
-
- IgniteSession toSave = this.repository.createSession();
-
- this.repository.save(toSave);
-
- IgniteSession findById = this.repository.findById(toSave.getId());
-
- findById.setAttribute(attrName, attrValue);
-
- String originalFindById = findById.getId();
- String changeSessionId = findById.changeSessionId();
-
- this.repository.save(findById);
-
- assertThat(this.repository.findById(originalFindById)).isNull();
-
- IgniteSession findByChangeSessionId =
this.repository.findById(changeSessionId);
-
-
assertThat(findByChangeSessionId.<String>getAttribute(attrName)).isEqualTo(attrValue);
-
- this.repository.deleteById(changeSessionId);
- }
-
- /** */
- @Test
- void changeSessionIdWhenHasNotSaved() {
- IgniteSession toSave = this.repository.createSession();
- String originalId = toSave.getId();
- toSave.changeSessionId();
-
- this.repository.save(toSave);
-
- assertThat(this.repository.findById(toSave.getId())).isNotNull();
- assertThat(this.repository.findById(originalId)).isNull();
-
- this.repository.deleteById(toSave.getId());
- }
-
- /** */
- @Test
- void attemptToUpdateSessionAfterDelete() {
- IgniteSession session = this.repository.createSession();
- String sessionId = session.getId();
- this.repository.save(session);
- session = this.repository.findById(sessionId);
- session.setAttribute("attributeName", "attributeValue");
- this.repository.deleteById(sessionId);
- this.repository.save(session);
-
- assertThat(this.repository.findById(sessionId)).isNull();
- }
-
- /** */
- @Test
- void expireSession() {
- IgniteSession session = this.repository.createSession();
- String sessionId = session.getId();
-
- session.setMaxInactiveInterval(Duration.ofNanos(0));
-
- this.repository.save(session);
- assertThat(this.repository.findById(sessionId)).isNull();
- }
-
- /** */
- @Test
- void createAndUpdateSession() {
- IgniteSession session = this.repository.createSession();
- String sessionId = session.getId();
-
- this.repository.save(session);
-
- session = this.repository.findById(sessionId);
- session.setAttribute("attributeName", "attributeValue");
-
- this.repository.save(session);
-
- assertThat(this.repository.findById(sessionId)).isNotNull();
- }
-
- /** */
- @Test
- void createSessionWithSecurityContextAndFindById() {
- IgniteSession session = this.repository.createSession();
- String sessionId = session.getId();
-
- Authentication authentication = new
UsernamePasswordAuthenticationToken("saves-" + System.currentTimeMillis(),
- "password", AuthorityUtils.createAuthorityList("ROLE_USER"));
- SecurityContext securityContext =
SecurityContextHolder.createEmptyContext();
- securityContext.setAuthentication(authentication);
- session.setAttribute(SPRING_SECURITY_CONTEXT, securityContext);
-
- this.repository.save(session);
-
- assertThat(this.repository.findById(sessionId)).isNotNull();
- }
-
- /** */
- @Test
- void createSessionWithSecurityContextAndFindByPrincipal() {
- IgniteSession session = this.repository.createSession();
-
- String username = "saves-" + System.currentTimeMillis();
- Authentication authentication = new
UsernamePasswordAuthenticationToken(username, "password",
- AuthorityUtils.createAuthorityList("ROLE_USER"));
- SecurityContext securityContext =
SecurityContextHolder.createEmptyContext();
- securityContext.setAuthentication(authentication);
- session.setAttribute(SPRING_SECURITY_CONTEXT, securityContext);
-
- this.repository.save(session);
-
- assertThat(this.repository
-
.findByIndexNameAndIndexValue(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME,
username))
- .hasSize(1);
- }
-
-}
diff --git
a/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/AbstractIgniteIndexedSessionRepositoryTest.java
b/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/AbstractIgniteIndexedSessionRepositoryTest.java
new file mode 100644
index 00000000..e721a017
--- /dev/null
+++
b/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/AbstractIgniteIndexedSessionRepositoryTest.java
@@ -0,0 +1,212 @@
+package org.apache.ignite.spring.sessions;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.time.Duration;
+import
org.apache.ignite.spring.sessions.IgniteIndexedSessionRepository.IgniteSession;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import
org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.authority.AuthorityUtils;
+import org.springframework.security.core.context.SecurityContext;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.session.FindByIndexNameSessionRepository;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Base class for {@link IgniteIndexedSessionRepository} integration tests.
+ */
+abstract class AbstractIgniteIndexedSessionRepositoryTest {
+ /** */
+ private static final String SPRING_SECURITY_CONTEXT =
"SPRING_SECURITY_CONTEXT";
+
+ /** */
+ @Autowired
+ protected IgniteIndexedSessionRepository repo;
+
+ /** */
+ @Test
+ void changeSessionIdWhenOnlyChangeId() {
+ String attrName = "changeSessionId";
+ String attrVal = "changeSessionId-value";
+ IgniteSession toSave = repo.createSession();
+ toSave.setAttribute(attrName, attrVal);
+
+ repo.save(toSave);
+
+ IgniteSession findById = repo.findById(toSave.getId());
+
+ assertThat(findById.<String>getAttribute(attrName)).isEqualTo(attrVal);
+
+ String originalFindById = findById.getId();
+ String changeSesId = findById.changeSessionId();
+
+ repo.save(findById);
+
+ assertThat(repo.findById(originalFindById)).isNull();
+
+ IgniteSession findByChangeSesId = repo.findById(changeSesId);
+
+
assertThat(findByChangeSesId.<String>getAttribute(attrName)).isEqualTo(attrVal);
+
+ repo.deleteById(changeSesId);
+ }
+
+ /** */
+ @Test
+ void changeSessionIdWhenChangeTwice() {
+ IgniteSession toSave = repo.createSession();
+
+ repo.save(toSave);
+
+ String originalId = toSave.getId();
+ String changeId1 = toSave.changeSessionId();
+ String changeId2 = toSave.changeSessionId();
+
+ repo.save(toSave);
+
+ assertThat(repo.findById(originalId)).isNull();
+ assertThat(repo.findById(changeId1)).isNull();
+ assertThat(repo.findById(changeId2)).isNotNull();
+
+ repo.deleteById(changeId2);
+ }
+
+ /** */
+ @Test
+ void changeSessionIdWhenSetAttributeOnChangedSession() {
+ String attrName = "changeSessionId";
+ String attrVal = "changeSessionId-value";
+
+ IgniteSession toSave = repo.createSession();
+
+ repo.save(toSave);
+
+ IgniteSession findById = repo.findById(toSave.getId());
+
+ findById.setAttribute(attrName, attrVal);
+
+ String originalFindById = findById.getId();
+ String changeSesId = findById.changeSessionId();
+
+ repo.save(findById);
+
+ assertThat(repo.findById(originalFindById)).isNull();
+
+ IgniteSession findByChangeSesId = repo.findById(changeSesId);
+
+
assertThat(findByChangeSesId.<String>getAttribute(attrName)).isEqualTo(attrVal);
+
+ repo.deleteById(changeSesId);
+ }
+
+ /** */
+ @Test
+ void changeSessionIdWhenHasNotSaved() {
+ IgniteSession toSave = repo.createSession();
+ String originalId = toSave.getId();
+ toSave.changeSessionId();
+
+ repo.save(toSave);
+
+ assertThat(repo.findById(toSave.getId())).isNotNull();
+ assertThat(repo.findById(originalId)).isNull();
+
+ repo.deleteById(toSave.getId());
+ }
+
+ /** */
+ @Test
+ void attemptToUpdateSessionAfterDelete() {
+ IgniteSession ses = repo.createSession();
+ String sesId = ses.getId();
+ repo.save(ses);
+ ses = repo.findById(sesId);
+ ses.setAttribute("attributeName", "attributeValue");
+ repo.deleteById(sesId);
+ repo.save(ses);
+
+ assertThat(repo.findById(sesId)).isNull();
+ }
+
+ /** */
+ @Test
+ void expireSession() {
+ IgniteSession ses = repo.createSession();
+ String sesId = ses.getId();
+
+ ses.setMaxInactiveInterval(Duration.ofNanos(0));
+
+ repo.save(ses);
+ assertThat(repo.findById(sesId)).isNull();
+ }
+
+ /** */
+ @Test
+ void createAndUpdateSession() {
+ IgniteSession ses = repo.createSession();
+ String sesId = ses.getId();
+
+ repo.save(ses);
+
+ ses = repo.findById(sesId);
+ ses.setAttribute("attributeName", "attributeValue");
+
+ repo.save(ses);
+
+ assertThat(repo.findById(sesId)).isNotNull();
+ }
+
+ /** */
+ @Test
+ void createSessionWithSecurityContextAndFindById() {
+ IgniteSession ses = repo.createSession();
+ String sesId = ses.getId();
+
+ Authentication authentication = new
UsernamePasswordAuthenticationToken("saves-" + System.currentTimeMillis(),
+ "password", AuthorityUtils.createAuthorityList("ROLE_USER"));
+ SecurityContext securityCtx =
SecurityContextHolder.createEmptyContext();
+ securityCtx.setAuthentication(authentication);
+ ses.setAttribute(SPRING_SECURITY_CONTEXT, securityCtx);
+
+ repo.save(ses);
+
+ assertThat(repo.findById(sesId)).isNotNull();
+ }
+
+ /** */
+ @Test
+ void createSessionWithSecurityContextAndFindByPrincipal() {
+ IgniteSession ses = repo.createSession();
+
+ String username = "saves-" + System.currentTimeMillis();
+ Authentication authentication = new
UsernamePasswordAuthenticationToken(username, "password",
+ AuthorityUtils.createAuthorityList("ROLE_USER"));
+ SecurityContext securityCtx =
SecurityContextHolder.createEmptyContext();
+ securityCtx.setAuthentication(authentication);
+ ses.setAttribute(SPRING_SECURITY_CONTEXT, securityCtx);
+
+ repo.save(ses);
+
+ assertThat(repo
+
.findByIndexNameAndIndexValue(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME,
username))
+ .hasSize(1);
+ }
+}
diff --git
a/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/EmbeddedIgniteIndexedSessionRepositoryITest.java
b/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/EmbeddedIgniteIndexedSessionRepositoryTest.java
similarity index 58%
copy from
modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/EmbeddedIgniteIndexedSessionRepositoryITest.java
copy to
modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/EmbeddedIgniteIndexedSessionRepositoryTest.java
index d0940aee..da45d84b 100644
---
a/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/EmbeddedIgniteIndexedSessionRepositoryITest.java
+++
b/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/EmbeddedIgniteIndexedSessionRepositoryTest.java
@@ -18,23 +18,35 @@ package org.apache.ignite.spring.sessions;
*/
import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
+import
org.apache.ignite.spring.sessions.IgniteIndexedSessionRepository.IgniteSession;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.context.web.WebAppConfiguration;
+import static
org.apache.ignite.spring.sessions.IgniteIndexedSessionRepository.DEFAULT_SESSION_MAP_NAME;
+import static org.assertj.core.api.Assertions.assertThat;
+
/**
- * Integration tests for {@link IgniteIndexedSessionRepository} using embedded
topology.
+ * Integration tests for {@link IgniteIndexedSessionRepository} using embedded
Ignite instance.
*/
@ExtendWith(SpringExtension.class)
@ContextConfiguration
@WebAppConfiguration
-public class EmbeddedIgniteIndexedSessionRepositoryITest extends
AbstractIgniteIndexedSessionRepositoryITest {
+public class EmbeddedIgniteIndexedSessionRepositoryTest extends
AbstractIgniteIndexedSessionRepositoryTest {
+ /** */
+ @Autowired
+ private Ignite ignite;
+
/** */
@BeforeAll
static void setUpClass() {
@@ -47,17 +59,40 @@ public class EmbeddedIgniteIndexedSessionRepositoryITest
extends AbstractIgniteI
Ignition.stopAll(true);
}
+ /** */
+ @BeforeEach
+ void setUp() {
+ ignite.cache(DEFAULT_SESSION_MAP_NAME).clear();
+ }
+
/** */
@EnableIgniteHttpSession
@Configuration
static class IgniteSessionConfig {
-
/** */
@Bean
Ignite ignite() {
- return IgniteITestUtils.embeddedIgniteServer();
+ return IgniteTestUtils.embeddedIgniteServer();
}
-
}
+ /** */
+ @Test
+ void createAndDestroySession() {
+ IgniteSession sesToSave = repo.createSession();
+ String sesId = sesToSave.getId();
+
+ IgniteCache<String, IgniteSession> cache =
ignite.getOrCreateCache(DEFAULT_SESSION_MAP_NAME);
+
+ assertThat(cache.size()).isEqualTo(0);
+
+ repo.save(sesToSave);
+
+ assertThat(cache.size()).isEqualTo(1);
+ assertThat(cache.get(sesId)).isEqualTo(sesToSave);
+
+ repo.deleteById(sesId);
+
+ assertThat(cache.size()).isEqualTo(0);
+ }
}
diff --git
a/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/EmbeddedIgniteIndexedSessionRepositoryITest.java
b/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/IgniteClientIndexedSessionRepositoryTest.java
similarity index 52%
rename from
modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/EmbeddedIgniteIndexedSessionRepositoryITest.java
rename to
modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/IgniteClientIndexedSessionRepositoryTest.java
index d0940aee..11942838 100644
---
a/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/EmbeddedIgniteIndexedSessionRepositoryITest.java
+++
b/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/IgniteClientIndexedSessionRepositoryTest.java
@@ -17,28 +17,44 @@ package org.apache.ignite.spring.sessions;
* limitations under the License.
*/
-import org.apache.ignite.Ignite;
import org.apache.ignite.Ignition;
+import org.apache.ignite.client.ClientCache;
+import org.apache.ignite.client.IgniteClient;
+import org.apache.ignite.configuration.ClientConfiguration;
+import
org.apache.ignite.spring.sessions.IgniteIndexedSessionRepository.IgniteSession;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.context.web.WebAppConfiguration;
+import static
org.apache.ignite.configuration.ClientConnectorConfiguration.DFLT_PORT;
+import static
org.apache.ignite.spring.sessions.IgniteIndexedSessionRepository.DEFAULT_SESSION_MAP_NAME;
+import static org.assertj.core.api.Assertions.assertThat;
+
/**
- * Integration tests for {@link IgniteIndexedSessionRepository} using embedded
topology.
+ * Integration tests for {@link IgniteIndexedSessionRepository} using embedded
Ignite instance.
*/
@ExtendWith(SpringExtension.class)
@ContextConfiguration
@WebAppConfiguration
-public class EmbeddedIgniteIndexedSessionRepositoryITest extends
AbstractIgniteIndexedSessionRepositoryITest {
+public class IgniteClientIndexedSessionRepositoryTest extends
AbstractIgniteIndexedSessionRepositoryTest {
+ /** */
+ @Autowired
+ private IgniteClient cli;
+
/** */
@BeforeAll
static void setUpClass() {
Ignition.stopAll(true);
+
+ IgniteTestUtils.embeddedIgniteServer();
}
/** */
@@ -47,17 +63,40 @@ public class EmbeddedIgniteIndexedSessionRepositoryITest
extends AbstractIgniteI
Ignition.stopAll(true);
}
+ /** */
+ @BeforeEach
+ void setUp() {
+ cli.cache(DEFAULT_SESSION_MAP_NAME).clear();
+ }
+
/** */
@EnableIgniteHttpSession
@Configuration
static class IgniteSessionConfig {
-
/** */
@Bean
- Ignite ignite() {
- return IgniteITestUtils.embeddedIgniteServer();
+ IgniteClient ignite() {
+ return Ignition.startClient(new
ClientConfiguration().setAddresses("127.0.0.1:" + DFLT_PORT));
}
-
}
+ /** */
+ @Test
+ void createAndDestroySession() {
+ IgniteSession sesToSave = repo.createSession();
+ String sesId = sesToSave.getId();
+
+ ClientCache<String, IgniteSession> cache =
cli.cache(DEFAULT_SESSION_MAP_NAME);
+
+ assertThat(cache.size()).isEqualTo(0);
+
+ repo.save(sesToSave);
+
+ assertThat(cache.size()).isEqualTo(1);
+ assertThat(cache.get(sesId)).isEqualTo(sesToSave);
+
+ repo.deleteById(sesId);
+
+ assertThat(cache.size()).isEqualTo(0);
+ }
}
diff --git
a/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/IgniteHttpSessionConfigurationTest.java
b/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/IgniteHttpSessionConfigurationTest.java
index ce0308c5..24bb0437 100644
---
a/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/IgniteHttpSessionConfigurationTest.java
+++
b/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/IgniteHttpSessionConfigurationTest.java
@@ -19,10 +19,13 @@ package org.apache.ignite.spring.sessions;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
-import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.cache.query.FieldsQueryCursor;
+import org.apache.ignite.cache.query.SqlFieldsQuery;
+import org.apache.ignite.internal.GridKernalContext;
+import org.apache.ignite.internal.IgniteEx;
+import org.apache.ignite.internal.processors.query.GridQueryProcessor;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
-import org.mockito.ArgumentMatchers;
import org.springframework.beans.factory.BeanCreationException;
import
org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
@@ -34,12 +37,14 @@ import org.springframework.session.IndexResolver;
import org.springframework.session.SaveMode;
import org.springframework.session.Session;
import org.springframework.session.config.SessionRepositoryCustomizer;
-import org.springframework.test.util.ReflectionTestUtils;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.mock;
+import static org.springframework.test.util.ReflectionTestUtils.getField;
/**
* Tests for {@link IgniteHttpSessionConfiguration}.
@@ -52,13 +57,13 @@ public class IgniteHttpSessionConfigurationTest {
private static final int MAX_INACTIVE_INTERVAL_IN_SECONDS = 600;
/** */
- private AnnotationConfigApplicationContext context = new
AnnotationConfigApplicationContext();
+ private AnnotationConfigApplicationContext ctx = new
AnnotationConfigApplicationContext();
/** */
@AfterEach
void closeContext() {
- if (this.context != null)
- this.context.close();
+ if (this.ctx != null)
+ this.ctx.close();
}
/** */
@@ -73,7 +78,7 @@ public class IgniteHttpSessionConfigurationTest {
void defaultConfiguration() {
registerAndRefresh(DefaultConfiguration.class);
-
assertThat(this.context.getBean(IgniteIndexedSessionRepository.class)).isNotNull();
+
assertThat(this.ctx.getBean(IgniteIndexedSessionRepository.class)).isNotNull();
}
/** */
@@ -81,10 +86,10 @@ public class IgniteHttpSessionConfigurationTest {
void customTableName() {
registerAndRefresh(CustomSessionMapNameConfiguration.class);
- IgniteIndexedSessionRepository repository =
this.context.getBean(IgniteIndexedSessionRepository.class);
- IgniteHttpSessionConfiguration configuration =
this.context.getBean(IgniteHttpSessionConfiguration.class);
- assertThat(repository).isNotNull();
- assertThat(ReflectionTestUtils.getField(configuration,
"sessionMapName")).isEqualTo(MAP_NAME);
+ IgniteIndexedSessionRepository repo =
this.ctx.getBean(IgniteIndexedSessionRepository.class);
+ IgniteHttpSessionConfiguration configuration =
this.ctx.getBean(IgniteHttpSessionConfiguration.class);
+ assertThat(repo).isNotNull();
+ assertThat(getField(configuration,
"sessionMapName")).isEqualTo(MAP_NAME);
}
/** */
@@ -92,10 +97,10 @@ public class IgniteHttpSessionConfigurationTest {
void setCustomSessionMapName() {
registerAndRefresh(BaseConfiguration.class,
CustomSessionMapNameSetConfiguration.class);
- IgniteIndexedSessionRepository repository =
this.context.getBean(IgniteIndexedSessionRepository.class);
- IgniteHttpSessionConfiguration configuration =
this.context.getBean(IgniteHttpSessionConfiguration.class);
- assertThat(repository).isNotNull();
- assertThat(ReflectionTestUtils.getField(configuration,
"sessionMapName")).isEqualTo(MAP_NAME);
+ IgniteIndexedSessionRepository repo =
this.ctx.getBean(IgniteIndexedSessionRepository.class);
+ IgniteHttpSessionConfiguration configuration =
this.ctx.getBean(IgniteHttpSessionConfiguration.class);
+ assertThat(repo).isNotNull();
+ assertThat(getField(configuration,
"sessionMapName")).isEqualTo(MAP_NAME);
}
/** */
@@ -103,9 +108,9 @@ public class IgniteHttpSessionConfigurationTest {
void setCustomMaxInactiveIntervalInSeconds() {
registerAndRefresh(BaseConfiguration.class,
CustomMaxInactiveIntervalInSecondsSetConfiguration.class);
- IgniteIndexedSessionRepository repository =
this.context.getBean(IgniteIndexedSessionRepository.class);
- assertThat(repository).isNotNull();
- assertThat(ReflectionTestUtils.getField(repository,
"defaultMaxInactiveInterval"))
+ IgniteIndexedSessionRepository repo =
this.ctx.getBean(IgniteIndexedSessionRepository.class);
+ assertThat(repo).isNotNull();
+ assertThat(getField(repo, "defaultMaxInactiveInterval"))
.isEqualTo(MAX_INACTIVE_INTERVAL_IN_SECONDS);
}
@@ -114,9 +119,9 @@ public class IgniteHttpSessionConfigurationTest {
void customMaxInactiveIntervalInSeconds() {
registerAndRefresh(CustomMaxInactiveIntervalInSecondsConfiguration.class);
- IgniteIndexedSessionRepository repository =
this.context.getBean(IgniteIndexedSessionRepository.class);
- assertThat(repository).isNotNull();
- assertThat(ReflectionTestUtils.getField(repository,
"defaultMaxInactiveInterval"))
+ IgniteIndexedSessionRepository repo =
this.ctx.getBean(IgniteIndexedSessionRepository.class);
+ assertThat(repo).isNotNull();
+ assertThat(getField(repo, "defaultMaxInactiveInterval"))
.isEqualTo(MAX_INACTIVE_INTERVAL_IN_SECONDS);
}
@@ -125,9 +130,9 @@ public class IgniteHttpSessionConfigurationTest {
void customFlushImmediately() {
registerAndRefresh(CustomFlushImmediatelyConfiguration.class);
- IgniteIndexedSessionRepository repository =
this.context.getBean(IgniteIndexedSessionRepository.class);
- assertThat(repository).isNotNull();
- assertThat(ReflectionTestUtils.getField(repository,
"flushMode")).isEqualTo(FlushMode.IMMEDIATE);
+ IgniteIndexedSessionRepository repo =
this.ctx.getBean(IgniteIndexedSessionRepository.class);
+ assertThat(repo).isNotNull();
+ assertThat(getField(repo, "flushMode")).isEqualTo(FlushMode.IMMEDIATE);
}
/** */
@@ -135,16 +140,16 @@ public class IgniteHttpSessionConfigurationTest {
void setCustomFlushImmediately() {
registerAndRefresh(BaseConfiguration.class,
CustomFlushImmediatelySetConfiguration.class);
- IgniteIndexedSessionRepository repository =
this.context.getBean(IgniteIndexedSessionRepository.class);
- assertThat(repository).isNotNull();
- assertThat(ReflectionTestUtils.getField(repository,
"flushMode")).isEqualTo(FlushMode.IMMEDIATE);
+ IgniteIndexedSessionRepository repo =
this.ctx.getBean(IgniteIndexedSessionRepository.class);
+ assertThat(repo).isNotNull();
+ assertThat(getField(repo, "flushMode")).isEqualTo(FlushMode.IMMEDIATE);
}
/** */
@Test
void customSaveModeAnnotation() {
registerAndRefresh(BaseConfiguration.class,
CustomSaveModeExpressionAnnotationConfiguration.class);
-
assertThat(this.context.getBean(IgniteIndexedSessionRepository.class)).hasFieldOrPropertyWithValue("saveMode",
+
assertThat(this.ctx.getBean(IgniteIndexedSessionRepository.class)).hasFieldOrPropertyWithValue("saveMode",
SaveMode.ALWAYS);
}
@@ -152,7 +157,7 @@ public class IgniteHttpSessionConfigurationTest {
@Test
void customSaveModeSetter() {
registerAndRefresh(BaseConfiguration.class,
CustomSaveModeExpressionSetterConfiguration.class);
-
assertThat(this.context.getBean(IgniteIndexedSessionRepository.class)).hasFieldOrPropertyWithValue("saveMode",
+
assertThat(this.ctx.getBean(IgniteIndexedSessionRepository.class)).hasFieldOrPropertyWithValue("saveMode",
SaveMode.ALWAYS);
}
@@ -161,12 +166,12 @@ public class IgniteHttpSessionConfigurationTest {
void qualifiedIgniteConfiguration() {
registerAndRefresh(QualifiedIgniteConfiguration.class);
- IgniteIndexedSessionRepository repository =
this.context.getBean(IgniteIndexedSessionRepository.class);
- Ignite ignite = this.context.getBean("qualifiedIgnite", Ignite.class);
- assertThat(repository).isNotNull();
+ IgniteIndexedSessionRepository repo =
this.ctx.getBean(IgniteIndexedSessionRepository.class);
+ Ignite ignite = this.ctx.getBean("qualifiedIgnite", Ignite.class);
+ assertThat(repo).isNotNull();
assertThat(ignite).isNotNull();
- assertThat(ReflectionTestUtils.getField(repository, "sessions"))
-
.isEqualTo(QualifiedIgniteConfiguration.qualifiedIgniteSessions);
+ assertThat(getField(getField(repo, "sessions"), "cache"))
+ .isEqualTo(QualifiedIgniteConfiguration.qualifiedIgniteSessions);
}
/** */
@@ -174,12 +179,12 @@ public class IgniteHttpSessionConfigurationTest {
void primaryIgniteConfiguration() {
registerAndRefresh(PrimaryIgniteConfiguration.class);
- IgniteIndexedSessionRepository repository =
this.context.getBean(IgniteIndexedSessionRepository.class);
- Ignite ignite = this.context.getBean("primaryIgnite", Ignite.class);
- assertThat(repository).isNotNull();
+ IgniteIndexedSessionRepository repo =
this.ctx.getBean(IgniteIndexedSessionRepository.class);
+ Ignite ignite = this.ctx.getBean("primaryIgnite", Ignite.class);
+ assertThat(repo).isNotNull();
assertThat(ignite).isNotNull();
- assertThat(ReflectionTestUtils.getField(repository, "sessions"))
- .isEqualTo(PrimaryIgniteConfiguration.primaryIgniteSessions);
+ assertThat(getField(getField(repo, "sessions"), "cache"))
+ .isEqualTo(PrimaryIgniteConfiguration.primaryIgniteSessions);
}
/** */
@@ -187,12 +192,12 @@ public class IgniteHttpSessionConfigurationTest {
void qualifiedAndPrimaryIgniteConfiguration() {
registerAndRefresh(QualifiedAndPrimaryIgniteConfiguration.class);
- IgniteIndexedSessionRepository repository =
this.context.getBean(IgniteIndexedSessionRepository.class);
- Ignite ignite = this.context.getBean("qualifiedIgnite", Ignite.class);
- assertThat(repository).isNotNull();
+ IgniteIndexedSessionRepository repo =
this.ctx.getBean(IgniteIndexedSessionRepository.class);
+ Ignite ignite = this.ctx.getBean("qualifiedIgnite", Ignite.class);
+ assertThat(repo).isNotNull();
assertThat(ignite).isNotNull();
- assertThat(ReflectionTestUtils.getField(repository, "sessions"))
-
.isEqualTo(QualifiedAndPrimaryIgniteConfiguration.qualifiedIgniteSessions);
+ assertThat(getField(getField(repo, "sessions"), "cache"))
+
.isEqualTo(QualifiedAndPrimaryIgniteConfiguration.qualifiedIgniteSessions);
}
/** */
@@ -200,72 +205,67 @@ public class IgniteHttpSessionConfigurationTest {
void namedIgniteConfiguration() {
registerAndRefresh(NamedIgniteConfiguration.class);
- IgniteIndexedSessionRepository repository =
this.context.getBean(IgniteIndexedSessionRepository.class);
- Ignite ignite = this.context.getBean("ignite", Ignite.class);
- assertThat(repository).isNotNull();
+ IgniteIndexedSessionRepository repo =
this.ctx.getBean(IgniteIndexedSessionRepository.class);
+ Ignite ignite = this.ctx.getBean("ignite", Ignite.class);
+ assertThat(repo).isNotNull();
assertThat(ignite).isNotNull();
- assertThat(ReflectionTestUtils.getField(repository, "sessions"))
- .isEqualTo(NamedIgniteConfiguration.igniteSessions);
+ assertThat(getField(getField(repo, "sessions"), "cache"))
+ .isEqualTo(NamedIgniteConfiguration.igniteSessions);
}
/** */
@Test
void multipleIgniteConfiguration() {
assertThatExceptionOfType(BeanCreationException.class)
- .isThrownBy(() ->
registerAndRefresh(MultipleIgniteConfiguration.class))
- .withMessageContaining("expected single matching bean but
found 2");
+ .isThrownBy(() ->
registerAndRefresh(MultipleIgniteConfiguration.class))
+ .withMessageContaining("expected single matching bean but found
2");
}
/** */
@Test
void customIndexResolverConfiguration() {
registerAndRefresh(CustomIndexResolverConfiguration.class);
- IgniteIndexedSessionRepository repository =
this.context.getBean(IgniteIndexedSessionRepository.class);
+ IgniteIndexedSessionRepository repo =
this.ctx.getBean(IgniteIndexedSessionRepository.class);
@SuppressWarnings("unchecked")
- IndexResolver<Session> indexResolver =
this.context.getBean(IndexResolver.class);
- assertThat(repository).isNotNull();
- assertThat(indexResolver).isNotNull();
- assertThat(repository).hasFieldOrPropertyWithValue("indexResolver",
indexResolver);
+ IndexResolver<Session> idxResolver =
this.ctx.getBean(IndexResolver.class);
+ assertThat(repo).isNotNull();
+ assertThat(idxResolver).isNotNull();
+ assertThat(repo).hasFieldOrPropertyWithValue("indexResolver",
idxResolver);
}
/** */
@Test
void sessionRepositoryCustomizer() {
registerAndRefresh(SessionRepositoryCustomizerConfiguration.class);
- IgniteIndexedSessionRepository sessionRepository =
this.context.getBean(IgniteIndexedSessionRepository.class);
-
assertThat(sessionRepository).hasFieldOrPropertyWithValue("defaultMaxInactiveInterval",
+ IgniteIndexedSessionRepository sesRepo =
this.ctx.getBean(IgniteIndexedSessionRepository.class);
+
assertThat(sesRepo).hasFieldOrPropertyWithValue("defaultMaxInactiveInterval",
MAX_INACTIVE_INTERVAL_IN_SECONDS);
}
/** */
private void registerAndRefresh(Class<?>... annotatedClasses) {
- this.context.register(annotatedClasses);
- this.context.refresh();
+ this.ctx.register(annotatedClasses);
+ this.ctx.refresh();
}
/** */
@Configuration
@EnableIgniteHttpSession
static class NoIgniteConfiguration {
-
+ // No-op.
}
/** */
static class BaseConfiguration {
-
/** */
@SuppressWarnings("unchecked")
- static IgniteCache<Object, Object> defaultIgniteSessions =
mock(IgniteCache.class);
+ static IgniteCache<Object, Object> dfltIgniteSessions =
mock(IgniteCache.class);
/** */
@Bean
Ignite defaultIgnite() {
- Ignite ignite = mock(Ignite.class);
-
given(ignite.getOrCreateCache(ArgumentMatchers.<CacheConfiguration<Object,
Object>>any()))
- .willReturn(defaultIgniteSessions);
- return ignite;
+ return mockedIgnite(dfltIgniteSessions);
}
-
}
/** */
@@ -346,7 +346,6 @@ public class IgniteHttpSessionConfigurationTest {
@Configuration
@EnableIgniteHttpSession
static class QualifiedIgniteConfiguration extends BaseConfiguration {
-
/** */
@SuppressWarnings("unchecked")
static IgniteCache<Object, Object> qualifiedIgniteSessions =
mock(IgniteCache.class);
@@ -355,19 +354,14 @@ public class IgniteHttpSessionConfigurationTest {
@Bean
@SpringSessionIgnite
Ignite qualifiedIgnite() {
- Ignite ignite = mock(Ignite.class);
-
given(ignite.getOrCreateCache(ArgumentMatchers.<CacheConfiguration<Object,
Object>>any()))
- .willReturn(qualifiedIgniteSessions);
- return ignite;
+ return mockedIgnite(qualifiedIgniteSessions);
}
-
}
/** */
@Configuration
@EnableIgniteHttpSession
static class PrimaryIgniteConfiguration extends BaseConfiguration {
-
/** */
@SuppressWarnings("unchecked")
static IgniteCache<Object, Object> primaryIgniteSessions =
mock(IgniteCache.class);
@@ -376,19 +370,14 @@ public class IgniteHttpSessionConfigurationTest {
@Bean
@Primary
Ignite primaryIgnite() {
- Ignite ignite = mock(Ignite.class);
-
given(ignite.getOrCreateCache(ArgumentMatchers.<CacheConfiguration<Object,
Object>>any()))
- .willReturn(primaryIgniteSessions);
- return ignite;
+ return mockedIgnite(primaryIgniteSessions);
}
-
}
/** */
@Configuration
@EnableIgniteHttpSession
static class QualifiedAndPrimaryIgniteConfiguration extends
BaseConfiguration {
-
/** */
@SuppressWarnings("unchecked")
static IgniteCache<Object, Object> qualifiedIgniteSessions =
mock(IgniteCache.class);
@@ -401,29 +390,21 @@ public class IgniteHttpSessionConfigurationTest {
@Bean
@SpringSessionIgnite
Ignite qualifiedIgnite() {
- Ignite ignite = mock(Ignite.class);
-
given(ignite.getOrCreateCache(ArgumentMatchers.<CacheConfiguration<Object,
Object>>any()))
- .willReturn(qualifiedIgniteSessions);
- return ignite;
+ return mockedIgnite(qualifiedIgniteSessions);
}
/** */
@Bean
@Primary
Ignite primaryIgnite() {
- Ignite ignite = mock(Ignite.class);
-
given(ignite.getOrCreateCache(ArgumentMatchers.<CacheConfiguration<Object,
Object>>any()))
- .willReturn(primaryIgniteSessions);
- return ignite;
+ return mockedIgnite(primaryIgniteSessions);
}
-
}
/** */
@Configuration
@EnableIgniteHttpSession
static class NamedIgniteConfiguration extends BaseConfiguration {
-
/** */
@SuppressWarnings("unchecked")
static IgniteCache<Object, Object> igniteSessions =
mock(IgniteCache.class);
@@ -431,19 +412,14 @@ public class IgniteHttpSessionConfigurationTest {
/** */
@Bean
Ignite ignite() {
- Ignite ignite = mock(Ignite.class);
-
given(ignite.getOrCreateCache(ArgumentMatchers.<CacheConfiguration<Object,
Object>>any()))
- .willReturn(igniteSessions);
- return ignite;
+ return mockedIgnite(igniteSessions);
}
-
}
/** */
@Configuration
@EnableIgniteHttpSession
static class MultipleIgniteConfiguration extends BaseConfiguration {
-
/** */
@SuppressWarnings("unchecked")
static IgniteCache<Object, Object> secondaryIgniteSessions =
mock(IgniteCache.class);
@@ -451,31 +427,24 @@ public class IgniteHttpSessionConfigurationTest {
/** */
@Bean
Ignite secondaryIgnite() {
- Ignite ignite = mock(Ignite.class);
-
given(ignite.getOrCreateCache(ArgumentMatchers.<CacheConfiguration<Object,
Object>>any()))
- .willReturn(secondaryIgniteSessions);
- return ignite;
+ return mockedIgnite(secondaryIgniteSessions);
}
-
}
/** */
@EnableIgniteHttpSession
static class CustomIndexResolverConfiguration extends BaseConfiguration {
-
/** */
@Bean
@SuppressWarnings("unchecked")
IndexResolver<Session> indexResolver() {
return mock(IndexResolver.class);
}
-
}
/** */
@EnableIgniteHttpSession
static class SessionRepositoryCustomizerConfiguration extends
BaseConfiguration {
-
/** */
@Bean
@Order(0)
@@ -491,4 +460,19 @@ public class IgniteHttpSessionConfigurationTest {
.setDefaultMaxInactiveInterval(MAX_INACTIVE_INTERVAL_IN_SECONDS);
}
}
+
+ /**
+ * @param cache Cache instance.
+ */
+ private static Ignite mockedIgnite(IgniteCache<Object, Object> cache) {
+ IgniteEx ignite = mock(IgniteEx.class);
+ GridKernalContext ctx = mock(GridKernalContext.class);
+ GridQueryProcessor qryProc = mock(GridQueryProcessor.class);
+
+ given(qryProc.querySqlFields(any(SqlFieldsQuery.class),
anyBoolean())).willReturn(mock(FieldsQueryCursor.class));
+ given(ctx.query()).willReturn(qryProc);
+ given(ignite.context()).willReturn(ctx);
+ given(ignite.cache(any())).willReturn(cache);
+ return ignite;
+ }
}
diff --git
a/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/IgniteIndexedSessionRepositoryTest.java
b/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/IgniteIndexedSessionRepositoryTest.java
index 34cdd087..3853c778 100644
---
a/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/IgniteIndexedSessionRepositoryTest.java
+++
b/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/IgniteIndexedSessionRepositoryTest.java
@@ -20,21 +20,19 @@ package org.apache.ignite.spring.sessions;
import java.time.Duration;
import java.time.Instant;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.UUID;
import java.util.concurrent.TimeUnit;
import javax.cache.expiry.TouchedExpiryPolicy;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.cache.query.FieldsQueryCursor;
-import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.cache.query.Query;
+import org.apache.ignite.cache.query.QueryCursor;
import
org.apache.ignite.spring.sessions.IgniteIndexedSessionRepository.IgniteSession;
+import org.apache.ignite.spring.sessions.proxy.SessionProxy;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.mockito.ArgumentMatchers;
import
org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.authority.AuthorityUtils;
@@ -42,6 +40,7 @@ import
org.springframework.session.FindByIndexNameSessionRepository;
import org.springframework.session.FlushMode;
import org.springframework.session.MapSession;
+import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
import static
org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
import static org.mockito.ArgumentMatchers.any;
@@ -60,347 +59,339 @@ public class IgniteIndexedSessionRepositoryTest {
private static final String SPRING_SECURITY_CONTEXT =
"SPRING_SECURITY_CONTEXT";
/** */
- private final Ignite ignite = mock(Ignite.class);
+ private final SessionProxy sessions = mock(SessionProxy.class);
/** */
- @SuppressWarnings("unchecked")
- private final IgniteCache<String, IgniteSession> sessions =
mock(IgniteCache.class);
-
- /** */
- private IgniteIndexedSessionRepository repository;
+ private IgniteIndexedSessionRepository repo;
/** */
@BeforeEach
void setUp() {
- given(this.ignite.<String, IgniteSession>getOrCreateCache(
- ArgumentMatchers.<CacheConfiguration<String,
IgniteSession>>any())).willReturn(this.sessions);
-
given(this.sessions.withExpiryPolicy(ArgumentMatchers.any())).willReturn(this.sessions);
- this.repository = new IgniteIndexedSessionRepository(this.ignite);
- this.repository.init();
+ given(sessions.withExpiryPolicy(any())).willReturn(sessions);
+
+ repo = new IgniteIndexedSessionRepository(sessions);
}
/** */
@Test
void constructorNullIgnite() {
assertThatIllegalArgumentException().isThrownBy(() -> new
IgniteIndexedSessionRepository(null))
- .withMessage("Ignite must not be null");
+ .withMessage("Session proxy must not be null");
}
/** */
@Test
void setSaveModeNull() {
- assertThatIllegalArgumentException().isThrownBy(() ->
this.repository.setSaveMode(null))
+ assertThatIllegalArgumentException().isThrownBy(() ->
repo.setSaveMode(null))
.withMessage("saveMode must not be null");
}
/** */
@Test
void createSessionDefaultMaxInactiveInterval() {
- verify(this.sessions,
times(1)).registerCacheEntryListener(ArgumentMatchers.any());
+ verify(sessions, times(1)).registerCacheEntryListener(any());
- IgniteSession session = this.repository.createSession();
+ IgniteSession ses = repo.createSession();
- assertThat(session.getMaxInactiveInterval()).isEqualTo(new
MapSession().getMaxInactiveInterval());
- verifyNoMoreInteractions(this.sessions);
+ assertThat(ses.getMaxInactiveInterval()).isEqualTo(new
MapSession().getMaxInactiveInterval());
+ verifyNoMoreInteractions(sessions);
}
/** */
@Test
void createSessionCustomMaxInactiveInterval() {
- verify(this.sessions,
times(1)).registerCacheEntryListener(ArgumentMatchers.any());
+ verify(sessions, times(1)).registerCacheEntryListener(any());
int interval = 1;
- this.repository.setDefaultMaxInactiveInterval(interval);
+ repo.setDefaultMaxInactiveInterval(interval);
- IgniteSession session = this.repository.createSession();
+ IgniteSession ses = repo.createSession();
-
assertThat(session.getMaxInactiveInterval()).isEqualTo(Duration.ofSeconds(interval));
- verifyNoMoreInteractions(this.sessions);
+
assertThat(ses.getMaxInactiveInterval()).isEqualTo(Duration.ofSeconds(interval));
+ verifyNoMoreInteractions(sessions);
}
/** */
@Test
void saveNewFlushModeOnSave() {
- verify(this.sessions,
times(1)).registerCacheEntryListener(ArgumentMatchers.any());
+ verify(sessions, times(1)).registerCacheEntryListener(any());
- IgniteSession session = this.repository.createSession();
- verifyNoMoreInteractions(this.sessions);
+ IgniteSession ses = repo.createSession();
+ verifyNoMoreInteractions(sessions);
- this.repository.save(session);
- verify(this.sessions, times(1)).put(eq(session.getId()), eq(session));
- verify(this.sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(session)));
- verifyNoMoreInteractions(this.sessions);
+ repo.save(ses);
+ verify(sessions, times(1)).put(eq(ses.getId()), eq(ses));
+ verify(sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(ses)));
+ verifyNoMoreInteractions(sessions);
}
/** */
@Test
void saveNewFlushModeImmediate() {
- verify(this.sessions,
times(1)).registerCacheEntryListener(ArgumentMatchers.any());
+ verify(sessions, times(1)).registerCacheEntryListener(any());
- this.repository.setFlushMode(FlushMode.IMMEDIATE);
+ repo.setFlushMode(FlushMode.IMMEDIATE);
- IgniteSession session = this.repository.createSession();
- verify(this.sessions, times(1)).put(eq(session.getId()), eq(session));
- verify(this.sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(session)));
- verifyNoMoreInteractions(this.sessions);
+ IgniteSession ses = repo.createSession();
+ verify(sessions, times(1)).put(eq(ses.getId()), eq(ses));
+ verify(sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(ses)));
+ verifyNoMoreInteractions(sessions);
}
/** */
@Test
void saveUpdatedAttributeFlushModeOnSave() {
- verify(this.sessions,
times(1)).registerCacheEntryListener(ArgumentMatchers.any());
+ verify(sessions, times(1)).registerCacheEntryListener(any());
- IgniteSession session = this.repository.createSession();
- session.setAttribute("testName", "testValue");
- verifyNoMoreInteractions(this.sessions);
+ IgniteSession ses = repo.createSession();
+ ses.setAttribute("testName", "testValue");
+ verifyNoMoreInteractions(sessions);
- this.repository.save(session);
- verify(this.sessions, times(1)).put(eq(session.getId()), eq(session));
- verify(this.sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(session)));
- verifyNoMoreInteractions(this.sessions);
+ repo.save(ses);
+ verify(sessions, times(1)).put(eq(ses.getId()), eq(ses));
+ verify(sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(ses)));
+ verifyNoMoreInteractions(sessions);
}
/** */
@Test
void saveUpdatedAttributeFlushModeImmediate() {
- verify(this.sessions,
times(1)).registerCacheEntryListener(ArgumentMatchers.any());
+ verify(sessions, times(1)).registerCacheEntryListener(any());
- this.repository.setFlushMode(FlushMode.IMMEDIATE);
+ repo.setFlushMode(FlushMode.IMMEDIATE);
- IgniteSession session = this.repository.createSession();
- session.setAttribute("testName", "testValue");
- verify(this.sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(session)));
- verify(this.sessions, times(1)).put(eq(session.getId()), eq(session));
- verify(this.sessions, times(1)).replace(eq(session.getId()),
eq(session));
+ IgniteSession ses = repo.createSession();
+ ses.setAttribute("testName", "testValue");
+ verify(sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(ses)));
+ verify(sessions, times(1)).put(eq(ses.getId()), eq(ses));
+ verify(sessions, times(1)).replace(eq(ses.getId()), eq(ses));
- this.repository.save(session);
- verifyNoMoreInteractions(this.sessions);
+ repo.save(ses);
+ verifyNoMoreInteractions(sessions);
}
/** */
@Test
void removeAttributeFlushModeOnSave() {
- verify(this.sessions,
times(1)).registerCacheEntryListener(ArgumentMatchers.any());
+ verify(sessions, times(1)).registerCacheEntryListener(any());
- IgniteSession session = this.repository.createSession();
- session.removeAttribute("testName");
- verifyNoMoreInteractions(this.sessions);
+ IgniteSession ses = repo.createSession();
+ ses.removeAttribute("testName");
+ verifyNoMoreInteractions(sessions);
- this.repository.save(session);
- verify(this.sessions, times(1)).put(eq(session.getId()), eq(session));
- verify(this.sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(session)));
- verifyNoMoreInteractions(this.sessions);
+ repo.save(ses);
+ verify(sessions, times(1)).put(eq(ses.getId()), eq(ses));
+ verify(sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(ses)));
+ verifyNoMoreInteractions(sessions);
}
/** */
@Test
void removeAttributeFlushModeImmediate() {
- verify(this.sessions,
times(1)).registerCacheEntryListener(ArgumentMatchers.any());
+ verify(sessions, times(1)).registerCacheEntryListener(any());
- this.repository.setFlushMode(FlushMode.IMMEDIATE);
+ repo.setFlushMode(FlushMode.IMMEDIATE);
- IgniteSession session = this.repository.createSession();
- session.removeAttribute("testName");
- verify(this.sessions, times(1)).put(eq(session.getId()), eq(session));
- verify(this.sessions, times(1)).replace(eq(session.getId()),
eq(session));
- verify(this.sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(session)));
+ IgniteSession ses = repo.createSession();
+ ses.removeAttribute("testName");
+ verify(sessions, times(1)).put(eq(ses.getId()), eq(ses));
+ verify(sessions, times(1)).replace(eq(ses.getId()), eq(ses));
+ verify(sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(ses)));
- this.repository.save(session);
- verifyNoMoreInteractions(this.sessions);
+ repo.save(ses);
+ verifyNoMoreInteractions(sessions);
}
/** */
@Test
void saveUpdatedLastAccessedTimeFlushModeOnSave() {
- verify(this.sessions,
times(1)).registerCacheEntryListener(ArgumentMatchers.any());
+ verify(sessions, times(1)).registerCacheEntryListener(any());
- IgniteSession session = this.repository.createSession();
- session.setLastAccessedTime(Instant.now());
- verifyNoMoreInteractions(this.sessions);
+ IgniteSession ses = repo.createSession();
+ ses.setLastAccessedTime(Instant.now());
+ verifyNoMoreInteractions(sessions);
- this.repository.save(session);
- verify(this.sessions, times(1)).put(eq(session.getId()), eq(session));
- verify(this.sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(session)));
- verifyNoMoreInteractions(this.sessions);
+ repo.save(ses);
+ verify(sessions, times(1)).put(eq(ses.getId()), eq(ses));
+ verify(sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(ses)));
+ verifyNoMoreInteractions(sessions);
}
/** */
@Test
void saveUpdatedLastAccessedTimeFlushModeImmediate() {
- verify(this.sessions,
times(1)).registerCacheEntryListener(ArgumentMatchers.any());
+ verify(sessions, times(1)).registerCacheEntryListener(any());
- this.repository.setFlushMode(FlushMode.IMMEDIATE);
+ repo.setFlushMode(FlushMode.IMMEDIATE);
- IgniteSession session = this.repository.createSession();
- session.setLastAccessedTime(Instant.now());
- verify(this.sessions, times(1)).put(eq(session.getId()), eq(session));
- verify(this.sessions, times(1)).replace(eq(session.getId()),
eq(session));
- verify(this.sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(session)));
+ IgniteSession ses = repo.createSession();
+ ses.setLastAccessedTime(Instant.now());
+ verify(sessions, times(1)).put(eq(ses.getId()), eq(ses));
+ verify(sessions, times(1)).replace(eq(ses.getId()), eq(ses));
+ verify(sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(ses)));
- this.repository.save(session);
- verifyNoMoreInteractions(this.sessions);
+ repo.save(ses);
+ verifyNoMoreInteractions(sessions);
}
/** */
@Test
void saveUpdatedMaxInactiveIntervalInSecondsFlushModeOnSave() {
- verify(this.sessions,
times(1)).registerCacheEntryListener(ArgumentMatchers.any());
+ verify(sessions, times(1)).registerCacheEntryListener(any());
- IgniteSession session = this.repository.createSession();
- session.setMaxInactiveInterval(Duration.ofSeconds(1));
- verifyNoMoreInteractions(this.sessions);
+ IgniteSession ses = repo.createSession();
+ ses.setMaxInactiveInterval(Duration.ofSeconds(1));
+ verifyNoMoreInteractions(sessions);
- this.repository.save(session);
- verify(this.sessions, times(1)).put(eq(session.getId()), eq(session));
- verify(this.sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(session)));
- verifyNoMoreInteractions(this.sessions);
+ repo.save(ses);
+ verify(sessions, times(1)).put(eq(ses.getId()), eq(ses));
+ verify(sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(ses)));
+ verifyNoMoreInteractions(sessions);
}
/** */
@Test
void saveUpdatedMaxInactiveIntervalInSecondsFlushModeImmediate() {
- verify(this.sessions,
times(1)).registerCacheEntryListener(ArgumentMatchers.any());
+ verify(sessions, times(1)).registerCacheEntryListener(any());
- this.repository.setFlushMode(FlushMode.IMMEDIATE);
+ repo.setFlushMode(FlushMode.IMMEDIATE);
- IgniteSession session = this.repository.createSession();
- verify(this.sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(session)));
- String sessionId = session.getId();
- session.setMaxInactiveInterval(Duration.ofSeconds(1));
- verify(this.sessions, times(1)).put(eq(sessionId), eq(session));
- verify(this.sessions, times(1)).replace(eq(sessionId), eq(session));
- verify(this.sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(session)));
+ IgniteSession ses = repo.createSession();
+ verify(sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(ses)));
+ String sesId = ses.getId();
+ ses.setMaxInactiveInterval(Duration.ofSeconds(1));
+ verify(sessions, times(1)).put(eq(sesId), eq(ses));
+ verify(sessions, times(1)).replace(eq(sesId), eq(ses));
+ verify(sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(ses)));
- this.repository.save(session);
- verifyNoMoreInteractions(this.sessions);
+ repo.save(ses);
+ verifyNoMoreInteractions(sessions);
}
/** */
@Test
void saveUnchangedFlushModeOnSave() {
- verify(this.sessions,
times(1)).registerCacheEntryListener(ArgumentMatchers.any());
+ verify(sessions, times(1)).registerCacheEntryListener(any());
- IgniteSession session = this.repository.createSession();
- this.repository.save(session);
- verify(this.sessions, times(1)).put(eq(session.getId()), eq(session));
- verify(this.sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(session)));
+ IgniteSession ses = repo.createSession();
+ repo.save(ses);
+ verify(sessions, times(1)).put(eq(ses.getId()), eq(ses));
+ verify(sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(ses)));
- this.repository.save(session);
- verifyNoMoreInteractions(this.sessions);
+ repo.save(ses);
+ verifyNoMoreInteractions(sessions);
}
/** */
@Test
void saveUnchangedFlushModeImmediate() {
- verify(this.sessions,
times(1)).registerCacheEntryListener(ArgumentMatchers.any());
+ verify(sessions, times(1)).registerCacheEntryListener(any());
- this.repository.setFlushMode(FlushMode.IMMEDIATE);
+ repo.setFlushMode(FlushMode.IMMEDIATE);
- IgniteSession session = this.repository.createSession();
- verify(this.sessions, times(1)).put(eq(session.getId()), eq(session));
- verify(this.sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(session)));
+ IgniteSession ses = repo.createSession();
+ verify(sessions, times(1)).put(eq(ses.getId()), eq(ses));
+ verify(sessions,
times(1)).withExpiryPolicy(eq(createExpiryPolicy(ses)));
- this.repository.save(session);
- verifyNoMoreInteractions(this.sessions);
+ repo.save(ses);
+ verifyNoMoreInteractions(sessions);
}
/** */
@Test
void getSessionNotFound() {
- verify(this.sessions,
times(1)).registerCacheEntryListener(ArgumentMatchers.any());
+ verify(sessions, times(1)).registerCacheEntryListener(any());
- String sessionId = "testSessionId";
+ String sesId = "testSessionId";
- IgniteSession session = this.repository.findById(sessionId);
+ IgniteSession ses = repo.findById(sesId);
- assertThat(session).isNull();
- verify(this.sessions, times(1)).get(eq(sessionId));
- verifyNoMoreInteractions(this.sessions);
+ assertThat(ses).isNull();
+ verify(sessions, times(1)).get(eq(sesId));
+ verifyNoMoreInteractions(sessions);
}
/** */
@Test
void getSessionExpired() {
- verify(this.sessions,
times(1)).registerCacheEntryListener(ArgumentMatchers.any());
+ verify(sessions, times(1)).registerCacheEntryListener(any());
- IgniteSession expired = this.repository.new IgniteSession(new
MapSession(), true);
+ IgniteSession expired = repo.new IgniteSession(new MapSession(), true);
expired.setLastAccessedTime(Instant.now().minusSeconds(MapSession.DEFAULT_MAX_INACTIVE_INTERVAL_SECONDS
+ 1));
- given(this.sessions.get(eq(expired.getId()))).willReturn(expired);
+ given(sessions.get(eq(expired.getId()))).willReturn(expired);
- IgniteSession session = this.repository.findById(expired.getId());
+ IgniteSession ses = repo.findById(expired.getId());
- assertThat(session).isNull();
- verify(this.sessions, times(1)).get(eq(expired.getId()));
- verify(this.sessions, times(1)).remove(eq(expired.getId()));
- verifyNoMoreInteractions(this.sessions);
+ assertThat(ses).isNull();
+ verify(sessions, times(1)).get(eq(expired.getId()));
+ verify(sessions, times(1)).remove(eq(expired.getId()));
+ verifyNoMoreInteractions(sessions);
}
/** */
@Test
void getSessionFound() {
- verify(this.sessions,
times(1)).registerCacheEntryListener(ArgumentMatchers.any());
+ verify(sessions, times(1)).registerCacheEntryListener(any());
- IgniteSession saved = this.repository.new IgniteSession(new
MapSession(), true);
+ IgniteSession saved = repo.new IgniteSession(new MapSession(), true);
saved.setAttribute("savedName", "savedValue");
- given(this.sessions.get(eq(saved.getId()))).willReturn(saved);
+ given(sessions.get(eq(saved.getId()))).willReturn(saved);
- IgniteSession session = this.repository.findById(saved.getId());
+ IgniteSession ses = repo.findById(saved.getId());
- assertThat(session.getId()).isEqualTo(saved.getId());
-
assertThat(session.<String>getAttribute("savedName")).isEqualTo("savedValue");
- verify(this.sessions, times(1)).get(eq(saved.getId()));
- verifyNoMoreInteractions(this.sessions);
+ assertThat(ses.getId()).isEqualTo(saved.getId());
+
assertThat(ses.<String>getAttribute("savedName")).isEqualTo("savedValue");
+ verify(sessions, times(1)).get(eq(saved.getId()));
+ verifyNoMoreInteractions(sessions);
}
/** */
@Test
void delete() {
- verify(this.sessions,
times(1)).registerCacheEntryListener(ArgumentMatchers.any());
+ verify(sessions, times(1)).registerCacheEntryListener(any());
- String sessionId = "testSessionId";
+ String sesId = "testSessionId";
- this.repository.deleteById(sessionId);
+ repo.deleteById(sesId);
- verify(this.sessions, times(1)).remove(eq(sessionId));
- verifyNoMoreInteractions(this.sessions);
+ verify(sessions, times(1)).remove(eq(sesId));
+ verifyNoMoreInteractions(sessions);
}
/** */
@Test
void findByIndexNameAndIndexValueUnknownIndexName() {
- verify(this.sessions,
times(1)).registerCacheEntryListener(ArgumentMatchers.any());
+ verify(sessions, times(1)).registerCacheEntryListener(any());
- String indexValue = "testIndexValue";
+ String idxVal = "testIndexValue";
- Map<String, IgniteSession> sessions =
this.repository.findByIndexNameAndIndexValue("testIndexName", indexValue);
+ Map<String, IgniteSession> sesMap =
repo.findByIndexNameAndIndexValue("testIndexName", idxVal);
- assertThat(sessions).isEmpty();
- verifyNoMoreInteractions(this.sessions);
+ assertThat(sesMap).isEmpty();
+ verifyNoMoreInteractions(sessions);
}
/** */
@Test
void findByIndexNameAndIndexValuePrincipalIndexNameNotFound() {
- verify(this.sessions,
times(1)).registerCacheEntryListener(ArgumentMatchers.any());
+ verify(sessions, times(1)).registerCacheEntryListener(any());
String principal = "username";
- Map<String, IgniteSession> sessions = this.repository
+ Map<String, IgniteSession> sesMap = repo
.findByIndexNameAndIndexValue(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME,
principal);
- verify(this.sessions, times(1)).query(ArgumentMatchers
- .argThat((argument) -> ("SELECT * FROM IgniteSession WHERE
principal='" + principal + "'")
- .equals(argument.getSql())));
+ assertThat(sesMap).isEmpty();
- assertThat(sessions).isEmpty();
- verifyNoMoreInteractions(this.sessions);
+ verify(sessions, times(1)).query(any(Query.class));
+ verifyNoMoreInteractions(sessions);
}
/** */
@Test
void findByIndexNameAndIndexValuePrincipalIndexNameFound() {
- verify(this.sessions,
times(1)).registerCacheEntryListener(ArgumentMatchers.any());
+ verify(sessions, times(1)).registerCacheEntryListener(any());
String principal = "username";
Authentication authentication = new
UsernamePasswordAuthenticationToken(principal, "notused",
@@ -410,66 +401,53 @@ public class IgniteIndexedSessionRepositoryTest {
final MapSession ses1 = new MapSession();
ses1.setAttribute(SPRING_SECURITY_CONTEXT, authentication);
- IgniteSession saved1 = this.repository.new IgniteSession(ses1, true);
- saved.add(Arrays.asList(ses1, authentication.getPrincipal()));
+ saved.add(asList(UUID.randomUUID().toString(), ses1,
authentication.getPrincipal()));
+
final MapSession ses2 = new MapSession();
ses2.setAttribute(SPRING_SECURITY_CONTEXT, authentication);
- IgniteSession saved2 = this.repository.new IgniteSession(ses2, true);
- saved.add(Arrays.asList(ses2, authentication.getPrincipal()));
-
- given(this.sessions.query(ArgumentMatchers.any())).willReturn(new
FieldsQueryCursor<List<?>>() {
- /** */
- @Override public String getFieldName(int idx) {
- return null;
- }
-
- /** */
- @Override public int getColumnsCount() {
- return 2;
- }
+ saved.add(asList(UUID.randomUUID().toString(), ses2,
authentication.getPrincipal()));
- /** */
+ given(sessions.<List<?>>query(any())).willReturn(new
QueryCursor<List<?>>() {
+ /** {@inheritDoc} */
@Override public List<List<?>> getAll() {
return (List)saved;
}
- /** */
+ /** {@inheritDoc} */
@Override public void close() {
}
- /** */
+ /** {@inheritDoc} */
@NotNull
@Override public Iterator<List<?>> iterator() {
return (Iterator)saved.iterator();
}
});
- Map<String, IgniteSession> sessions = this.repository
+ Map<String, IgniteSession> sesMap = repo
.findByIndexNameAndIndexValue(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME,
principal);
- assertThat(sessions).hasSize(2);
- verify(this.sessions, times(1)).query(any());
- verifyNoMoreInteractions(this.sessions);
+ assertThat(sesMap).hasSize(2);
+ verify(sessions, times(1)).query(any());
+ verifyNoMoreInteractions(sessions);
}
/** */
@Test
void getAttributeNamesAndRemove() {
- IgniteSession session = this.repository.createSession();
- session.setAttribute("attribute1", "value1");
- session.setAttribute("attribute2", "value2");
+ IgniteSession ses = repo.createSession();
+ ses.setAttribute("attribute1", "value1");
+ ses.setAttribute("attribute2", "value2");
- for (String attributeName : session.getAttributeNames()) {
- session.removeAttribute(attributeName);
- }
+ for (String attributeName : ses.getAttributeNames())
+ ses.removeAttribute(attributeName);
- assertThat(session.getAttributeNames()).isEmpty();
+ assertThat(ses.getAttributeNames()).isEmpty();
}
/** */
- private static TouchedExpiryPolicy createExpiryPolicy(IgniteSession
session) {
+ private static TouchedExpiryPolicy createExpiryPolicy(IgniteSession ses) {
return new TouchedExpiryPolicy(
- new javax.cache.expiry.Duration(TimeUnit.SECONDS,
session.getMaxInactiveInterval().getSeconds()));
+ new javax.cache.expiry.Duration(TimeUnit.SECONDS,
ses.getMaxInactiveInterval().getSeconds()));
}
-
}
diff --git
a/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/IgniteITestUtils.java
b/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/IgniteTestUtils.java
similarity index 94%
rename from
modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/IgniteITestUtils.java
rename to
modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/IgniteTestUtils.java
index b70fd142..c77f2ecc 100644
---
a/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/IgniteITestUtils.java
+++
b/modules/spring-session-ext/src/test/java/org/apache/ignite/spring/sessions/IgniteTestUtils.java
@@ -23,9 +23,9 @@ import org.apache.ignite.Ignition;
/**
* Utility class for Ignite integration tests.
*/
-final class IgniteITestUtils {
+final class IgniteTestUtils {
/** */
- private IgniteITestUtils() {
+ private IgniteTestUtils() {
}
/**