package org.wildfly.clustering.web.session;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import java.time.Duration;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Set;
import java.util.TreeSet;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import org.junit.Test;
public class ImmutableHttpSessionAdapterTestCase {
private final ImmutableSession session = mock(ImmutableSession.class);
private final ServletContext context = mock(ServletContext.class);
private final HttpSession httpSession = new ImmutableHttpSessionAdapter(this.session, this.context);
@Test
public void getId() {
String expected = "session";
when(this.session.getId()).thenReturn(expected);
String result = this.httpSession.getId();
assertSame(expected, result);
}
@Test
public void getCreationTime() {
SessionMetaData metaData = mock(SessionMetaData.class);
Instant now = Instant.now();
when(this.session.getMetaData()).thenReturn(metaData);
when(metaData.getCreationTime()).thenReturn(now);
long result = this.httpSession.getCreationTime();
assertEquals(now.toEpochMilli(), result);
}
@Test
public void getLastAccessedTime() {
SessionMetaData metaData = mock(SessionMetaData.class);
Instant now = Instant.now();
when(this.session.getMetaData()).thenReturn(metaData);
when(metaData.getLastAccessedTime()).thenReturn(now);
long result = this.httpSession.getLastAccessedTime();
assertEquals(now.toEpochMilli(), result);
}
@Test
public void getMaxInactiveInterval() {
SessionMetaData metaData = mock(SessionMetaData.class);
Duration interval = Duration.of(100L, ChronoUnit.SECONDS);
when(this.session.getMetaData()).thenReturn(metaData);
when(metaData.getMaxInactiveInterval()).thenReturn(interval);
int result = this.httpSession.getMaxInactiveInterval();
assertEquals(interval.getSeconds(), result);
}
@Test
public void setMaxInactiveInterval() {
this.httpSession.setMaxInactiveInterval(10);
verifyZeroInteractions(this.session);
}
@Test
public void getServletContext() {
assertSame(this.context, this.httpSession.getServletContext());
}
@Test
public void getAttributeNames() {
SessionAttributes attributes = mock(SessionAttributes.class);
Set<String> expected = new TreeSet<>();
when(this.session.getAttributes()).thenReturn(attributes);
when(attributes.getAttributeNames()).thenReturn(expected);
Enumeration<String> result = this.httpSession.getAttributeNames();
assertEquals(new ArrayList<>(expected), Collections.list(result));
}
@Test
public void getAttribute() {
SessionAttributes attributes = mock(SessionAttributes.class);
String name = "name";
Object expected = new Object();
when(this.session.getAttributes()).thenReturn(attributes);
when(attributes.getAttribute(name)).thenReturn(expected);
Object result = this.httpSession.getAttribute(name);
assertSame(expected, result);
}
@Test
public void setAttribute() {
this.httpSession.setAttribute("name", "value");
verifyZeroInteractions(this.session);
}
@Test
public void removeAttribute() {
this.httpSession.removeAttribute("name");
verifyZeroInteractions(this.session);
}
@Test
public void invalidate() {
this.httpSession.invalidate();
verifyZeroInteractions(this.session);
}
@Test
public void isNew() {
SessionMetaData metaData = mock(SessionMetaData.class);
when(this.session.getMetaData()).thenReturn(metaData);
when(metaData.isNew()).thenReturn(true, false);
assertTrue(this.httpSession.isNew());
assertFalse(this.httpSession.isNew());
}
}