package org.corfudb.runtime.view;
import lombok.Getter;
import org.corfudb.protocols.wireprotocol.Token;
import org.corfudb.runtime.CorfuRuntime;
import org.junit.Test;
import java.util.Collections;
import java.util.UUID;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Created by mwei on 12/23/15.
*/
public class SequencerViewTest extends AbstractViewTest {
@Getter
final String defaultConfigurationString = getDefaultEndpoint();
@Test
public void canAcquireFirstToken() {
CorfuRuntime r = getDefaultRuntime();
assertThat(r.getSequencerView().nextToken(Collections.emptySet(), 1).getToken())
.isEqualTo(new Token(0L, 0L));
}
@Test
public void tokensAreIncrementing() {
CorfuRuntime r = getDefaultRuntime();
assertThat(r.getSequencerView().nextToken(Collections.emptySet(), 1).getToken())
.isEqualTo(new Token(0L, 0L));
assertThat(r.getSequencerView().nextToken(Collections.emptySet(), 1).getToken())
.isEqualTo(new Token(1L, 0L));
}
@Test
public void checkTokenWorks() {
CorfuRuntime r = getDefaultRuntime();
assertThat(r.getSequencerView().nextToken(Collections.emptySet(), 1).getToken())
.isEqualTo(new Token(0L, 0L));
assertThat(r.getSequencerView().nextToken(Collections.emptySet(), 0).getToken())
.isEqualTo(new Token(0L, 0L));
}
@Test
public void checkStreamTokensWork() {
CorfuRuntime r = getDefaultRuntime();
UUID streamA = UUID.nameUUIDFromBytes("stream A".getBytes());
UUID streamB = UUID.nameUUIDFromBytes("stream B".getBytes());
assertThat(r.getSequencerView().nextToken(Collections.singleton(streamA), 1).getToken())
.isEqualTo(new Token(0L, 0L));
assertThat(r.getSequencerView().nextToken(Collections.singleton(streamA), 0).getToken())
.isEqualTo(new Token(0L, 0L));
assertThat(r.getSequencerView().nextToken(Collections.singleton(streamB), 1).getToken())
.isEqualTo(new Token(1L, 0L));
assertThat(r.getSequencerView().nextToken(Collections.singleton(streamB), 0).getToken())
.isEqualTo(new Token(1L, 0L));
assertThat(r.getSequencerView().nextToken(Collections.singleton(streamA), 0).getToken())
.isEqualTo(new Token(0L, 0L));
}
@Test
public void checkBackPointersWork() {
CorfuRuntime r = getDefaultRuntime();
UUID streamA = UUID.nameUUIDFromBytes("stream A".getBytes());
UUID streamB = UUID.nameUUIDFromBytes("stream B".getBytes());
assertThat(r.getSequencerView().nextToken(Collections.singleton(streamA), 1).getBackpointerMap())
.containsEntry(streamA, Address.NON_EXIST);
assertThat(r.getSequencerView().nextToken(Collections.singleton(streamA), 0).getBackpointerMap())
.isEmpty();
assertThat(r.getSequencerView().nextToken(Collections.singleton(streamB), 1).getBackpointerMap())
.containsEntry(streamB, Address.NON_EXIST);
assertThat(r.getSequencerView().nextToken(Collections.singleton(streamB), 0).getBackpointerMap())
.isEmpty();
assertThat(r.getSequencerView().nextToken(Collections.singleton(streamA), 1).getBackpointerMap())
.containsEntry(streamA, 0L);
assertThat(r.getSequencerView().nextToken(Collections.singleton(streamB), 1).getBackpointerMap())
.containsEntry(streamB, 1L);
}
}