package org.corfudb.runtime.clients;
import com.google.common.collect.ImmutableSet;
import org.corfudb.infrastructure.AbstractServer;
import org.corfudb.infrastructure.SequencerServer;
import org.corfudb.protocols.wireprotocol.Token;
import org.junit.Test;
import java.util.Collections;
import java.util.Set;
import java.util.UUID;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Created by mwei on 12/14/15.
*/
public class SequencerClientTest extends AbstractClientTest {
SequencerClient client;
@Override
Set<AbstractServer> getServersForTest() {
return new ImmutableSet.Builder<AbstractServer>()
.add(new SequencerServer(defaultServerContext()))
.build();
}
@Override
Set<IClient> getClientsForTest() {
client = new SequencerClient();
return new ImmutableSet.Builder<IClient>()
.add(client)
.build();
}
@Test
public void canGetAToken()
throws Exception {
client.nextToken(Collections.<UUID>emptySet(), 1).get();
}
@Test
public void tokensAreIncrementing()
throws Exception {
Token token = client.nextToken(Collections.<UUID>emptySet(), 1).get().getToken();
Token token2 = client.nextToken(Collections.<UUID>emptySet(), 1).get().getToken();
assertThat(token2.getTokenValue())
.isGreaterThan(token.getTokenValue());
}
@Test
public void checkTokenPositionWorks()
throws Exception {
Token token = client.nextToken(Collections.<UUID>emptySet(), 1).get().getToken();
Token token2 = client.nextToken(Collections.<UUID>emptySet(), 0).get().getToken();
assertThat(token)
.isEqualTo(token2);
}
@Test
public void perStreamTokensWork()
throws Exception {
UUID streamA = UUID.nameUUIDFromBytes("streamA".getBytes());
UUID streamB = UUID.nameUUIDFromBytes("streamB".getBytes());
client.nextToken(Collections.singleton(streamA), 1).get();
Token tokenA = client.nextToken(Collections.singleton(streamA), 1).get().getToken();
Token tokenA2 = client.nextToken(Collections.singleton(streamA), 0).get().getToken();
assertThat(tokenA)
.isEqualTo(tokenA2);
Token tokenB = client.nextToken(Collections.singleton(streamB), 0).get().getToken();
assertThat(tokenB)
.isNotEqualTo(tokenA2);
Token tokenB2 = client.nextToken(Collections.singleton(streamB), 1).get().getToken();
Token tokenB3 = client.nextToken(Collections.singleton(streamB), 0).get().getToken();
assertThat(tokenB2)
.isEqualTo(tokenB3);
Token tokenA3 = client.nextToken(Collections.singleton(streamA), 0).get().getToken();
assertThat(tokenA3)
.isEqualTo(tokenA2);
}
}