public HazelcastEventStore(int maxLogSizePerAggregate, IMap<InstanceId, List<InstanceEvent>> eventLog) { super(maxLogSizePerAggregate, eventLog); eventLog.addEntryListener((MapListener) new EntryAdapter<InstanceId, List<InstanceEvent>>() { @Override public void entryUpdated(EntryEvent<InstanceId, List<InstanceEvent>> event) { log.debug("Updated {}", event); long lastKnownVersion = getLastVersion(event.getOldValue()); List<InstanceEvent> newEvents = event.getValue() .stream() .filter(e -> e.getVersion() > lastKnownVersion) .collect(Collectors.toList()); HazelcastEventStore.this.publish(newEvents); } }, true); }
@PostConstruct public void init() { this.sessions = this.hazelcastInstance.getMap(this.sessionMapName); this.sessionListenerId = this.sessions.addEntryListener(this, true); }
@Test public void delete() { verify(this.sessions, times(1)).addEntryListener(any(MapListener.class), anyBoolean()); String sessionId = "testSessionId"; this.repository.deleteById(sessionId); verify(this.sessions, times(1)).remove(eq(sessionId)); verifyZeroInteractions(this.sessions); }
@Test public void getSessionNotFound() { verify(this.sessions, times(1)).addEntryListener(any(MapListener.class), anyBoolean()); String sessionId = "testSessionId"; HazelcastSession session = this.repository.findById(sessionId); assertThat(session).isNull(); verify(this.sessions, times(1)).get(eq(sessionId)); verifyZeroInteractions(this.sessions); }
@Test public void findByIndexNameAndIndexValueUnknownIndexName() { verify(this.sessions, times(1)).addEntryListener(any(MapListener.class), anyBoolean()); String indexValue = "testIndexValue"; Map<String, HazelcastSession> sessions = this.repository .findByIndexNameAndIndexValue("testIndexName", indexValue); assertThat(sessions).isEmpty(); verifyZeroInteractions(this.sessions); }
@Test public void createSessionCustomMaxInactiveInterval() { verify(this.sessions, times(1)).addEntryListener(any(MapListener.class), anyBoolean()); int interval = 1; this.repository.setDefaultMaxInactiveInterval(interval); HazelcastSession session = this.repository.createSession(); assertThat(session.getMaxInactiveInterval()) .isEqualTo(Duration.ofSeconds(interval)); verifyZeroInteractions(this.sessions); }
@Test public void saveNewFlushModeOnSave() { verify(this.sessions, times(1)).addEntryListener(any(MapListener.class), anyBoolean()); HazelcastSession session = this.repository.createSession(); verifyZeroInteractions(this.sessions); this.repository.save(session); verify(this.sessions, times(1)).set(eq(session.getId()), eq(session.getDelegate()), isA(Long.class), eq(TimeUnit.SECONDS)); verifyZeroInteractions(this.sessions); }
@Test public void saveUpdatedLastAccessedTimeFlushModeOnSave() { verify(this.sessions, times(1)).addEntryListener(any(MapListener.class), anyBoolean()); HazelcastSession session = this.repository.createSession(); session.setLastAccessedTime(Instant.now()); verifyZeroInteractions(this.sessions); this.repository.save(session); verify(this.sessions, times(1)).set(eq(session.getId()), eq(session.getDelegate()), isA(Long.class), eq(TimeUnit.SECONDS)); verifyZeroInteractions(this.sessions); }
@Test public void createSessionDefaultMaxInactiveInterval() { verify(this.sessions, times(1)).addEntryListener(any(MapListener.class), anyBoolean()); HazelcastSession session = this.repository.createSession(); assertThat(session.getMaxInactiveInterval()) .isEqualTo(new MapSession().getMaxInactiveInterval()); verifyZeroInteractions(this.sessions); }
@Test public void saveUpdatedMaxInactiveIntervalInSecondsFlushModeOnSave() { verify(this.sessions, times(1)).addEntryListener(any(MapListener.class), anyBoolean()); HazelcastSession session = this.repository.createSession(); session.setMaxInactiveInterval(Duration.ofSeconds(1)); verifyZeroInteractions(this.sessions); this.repository.save(session); verify(this.sessions, times(1)).set(eq(session.getId()), eq(session.getDelegate()), isA(Long.class), eq(TimeUnit.SECONDS)); verifyZeroInteractions(this.sessions); }
@Test public void findByIndexNameAndIndexValuePrincipalIndexNameNotFound() { verify(this.sessions, times(1)).addEntryListener(any(MapListener.class), anyBoolean()); String principal = "username"; Map<String, HazelcastSession> sessions = this.repository .findByIndexNameAndIndexValue( FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME, principal); assertThat(sessions).isEmpty(); verify(this.sessions, times(1)).values(isA(EqualPredicate.class)); verifyZeroInteractions(this.sessions); }
@Test public void saveNewFlushModeImmediate() { verify(this.sessions, times(1)).addEntryListener(any(MapListener.class), anyBoolean()); this.repository.setHazelcastFlushMode(HazelcastFlushMode.IMMEDIATE); HazelcastSession session = this.repository.createSession(); verify(this.sessions, times(1)).set(eq(session.getId()), eq(session.getDelegate()), isA(Long.class), eq(TimeUnit.SECONDS)); verifyZeroInteractions(this.sessions); }
@Test public void removeAttributeFlushModeOnSave() { verify(this.sessions, times(1)).addEntryListener(any(MapListener.class), anyBoolean()); HazelcastSession session = this.repository.createSession(); session.removeAttribute("testName"); verifyZeroInteractions(this.sessions); this.repository.save(session); verify(this.sessions, times(1)).set(eq(session.getId()), eq(session.getDelegate()), isA(Long.class), eq(TimeUnit.SECONDS)); verifyZeroInteractions(this.sessions); }
@Test public void saveUpdatedAttributeFlushModeOnSave() { verify(this.sessions, times(1)).addEntryListener(any(MapListener.class), anyBoolean()); HazelcastSession session = this.repository.createSession(); session.setAttribute("testName", "testValue"); verifyZeroInteractions(this.sessions); this.repository.save(session); verify(this.sessions, times(1)).set(eq(session.getId()), eq(session.getDelegate()), isA(Long.class), eq(TimeUnit.SECONDS)); verifyZeroInteractions(this.sessions); }
@Test public void saveUnchangedFlushModeOnSave() { verify(this.sessions, times(1)).addEntryListener(any(MapListener.class), anyBoolean()); HazelcastSession session = this.repository.createSession(); this.repository.save(session); verify(this.sessions, times(1)).set(eq(session.getId()), eq(session.getDelegate()), isA(Long.class), eq(TimeUnit.SECONDS)); this.repository.save(session); verifyZeroInteractions(this.sessions); }
@Test public void saveUnchangedFlushModeImmediate() { verify(this.sessions, times(1)).addEntryListener(any(MapListener.class), anyBoolean()); this.repository.setHazelcastFlushMode(HazelcastFlushMode.IMMEDIATE); HazelcastSession session = this.repository.createSession(); verify(this.sessions, times(1)).set(eq(session.getId()), eq(session.getDelegate()), isA(Long.class), eq(TimeUnit.SECONDS)); this.repository.save(session); verifyZeroInteractions(this.sessions); }
@Test public void saveUpdatedLastAccessedTimeFlushModeImmediate() { verify(this.sessions, times(1)).addEntryListener(any(MapListener.class), anyBoolean()); this.repository.setHazelcastFlushMode(HazelcastFlushMode.IMMEDIATE); HazelcastSession session = this.repository.createSession(); session.setLastAccessedTime(Instant.now()); verify(this.sessions, times(1)).set(eq(session.getId()), eq(session.getDelegate()), isA(Long.class), eq(TimeUnit.SECONDS)); verify(this.sessions, times(1)).executeOnKey(eq(session.getId()), any(EntryProcessor.class)); this.repository.save(session); verifyZeroInteractions(this.sessions); }
@Test public void saveUpdatedAttributeFlushModeImmediate() { verify(this.sessions, times(1)).addEntryListener(any(MapListener.class), anyBoolean()); this.repository.setHazelcastFlushMode(HazelcastFlushMode.IMMEDIATE); HazelcastSession session = this.repository.createSession(); session.setAttribute("testName", "testValue"); verify(this.sessions, times(1)).set(eq(session.getId()), eq(session.getDelegate()), isA(Long.class), eq(TimeUnit.SECONDS)); verify(this.sessions, times(1)).executeOnKey(eq(session.getId()), any(EntryProcessor.class)); this.repository.save(session); verifyZeroInteractions(this.sessions); }
@Test public void removeAttributeFlushModeImmediate() { verify(this.sessions, times(1)).addEntryListener(any(MapListener.class), anyBoolean()); this.repository.setHazelcastFlushMode(HazelcastFlushMode.IMMEDIATE); HazelcastSession session = this.repository.createSession(); session.removeAttribute("testName"); verify(this.sessions, times(1)).set(eq(session.getId()), eq(session.getDelegate()), isA(Long.class), eq(TimeUnit.SECONDS)); verify(this.sessions, times(1)).executeOnKey(eq(session.getId()), any(EntryProcessor.class)); this.repository.save(session); verifyZeroInteractions(this.sessions); }
@Test public void getSessionFound() { verify(this.sessions, times(1)).addEntryListener(any(MapListener.class), anyBoolean()); MapSession saved = new MapSession(); saved.setAttribute("savedName", "savedValue"); given(this.sessions.get(eq(saved.getId()))).willReturn(saved); HazelcastSession session = this.repository.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())); verifyZeroInteractions(this.sessions); }