package com.tesora.dve.locking;
/*
* #%L
* Tesora Inc.
* Database Virtualization Engine
* %%
* Copyright (C) 2011 - 2014 Tesora Inc.
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* #L%
*/
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
import java.net.InetSocketAddress;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class IntentEntryTest {
InetSocketAddress member1 = new InetSocketAddress("localhost",1111);
InetSocketAddress member2 = new InetSocketAddress("localhost",2222);
InetSocketAddress member3 = new InetSocketAddress("localhost",3333);
InetSocketAddress member4 = new InetSocketAddress("localhost",4444);
InetSocketAddress member5 = new InetSocketAddress("localhost",5555);
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void testIsFor() throws Exception {
InetSocketAddress member1Copy = new InetSocketAddress("localhost",1111);
InetSocketAddress differentHostSamePort = new InetSocketAddress("127.0.0.2",1111);
IntentEntry entry = new IntentEntry(member1, LockMode.UNLOCKED,0L,0L);
assertTrue(entry.isFor(member1));
assertTrue(entry.isFor(member1Copy));
assertFalse(entry.isFor(member2));
assertFalse(entry.isFor(differentHostSamePort));
}
@Test
public void testIsPublishedBeforeAfter() throws Exception {
IntentEntry one = new IntentEntry(member1,LockMode.UNLOCKED,100L,300L);
IntentEntry two = new IntentEntry(member2,LockMode.UNLOCKED,200L,200L);
IntentEntry three = new IntentEntry(member3,LockMode.UNLOCKED,300L,100L);
//before
assertFalse(one.isPublishedBefore(one));
assertTrue(one.isPublishedBefore(two));
assertTrue(one.isPublishedBefore(three));
assertFalse(two.isPublishedBefore(one));
assertFalse(two.isPublishedBefore(two));
assertTrue(two.isPublishedBefore(three));
assertFalse(three.isPublishedBefore(one));
assertFalse(three.isPublishedBefore(two));
assertFalse(three.isPublishedBefore(three));
//after
assertFalse(one.isPublishedAfter(one));
assertFalse(one.isPublishedAfter(two));
assertFalse(one.isPublishedAfter(three));
assertTrue(two.isPublishedAfter(one));
assertFalse(two.isPublishedAfter(two));
assertFalse(two.isPublishedAfter(three));
assertTrue(three.isPublishedAfter(one));
assertTrue(three.isPublishedAfter(two));
assertFalse(three.isPublishedAfter(three));
}
@Test
public void testBeforeAfterSameTimestampDifferentMembers() throws Exception {
IntentEntry one = new IntentEntry(member1,LockMode.UNLOCKED,200L,100L);
IntentEntry two = new IntentEntry(member2,LockMode.UNLOCKED,200L,100L);
//before
assertTrue(one.isPublishedBefore(two));
assertFalse(two.isPublishedBefore(one));
//after
assertFalse(one.isPublishedAfter(two));
assertTrue(two.isPublishedAfter(one));
}
@Test
public void testIsAckedBy() throws Exception {
IntentEntry one = new IntentEntry(member1,LockMode.UNLOCKED,250L,100L);
IntentEntry two = new IntentEntry(member2,LockMode.UNLOCKED,200L,200L);
IntentEntry three = new IntentEntry(member3,LockMode.UNLOCKED,300L,300L);
assertTrue(one.isAckedBy(one));
assertTrue(one.isAckedBy(two));
assertTrue(one.isAckedBy(three));
assertTrue(two.isAckedBy(one));
assertTrue(two.isAckedBy(two));
assertTrue(two.isAckedBy(three));
assertFalse(three.isAckedBy(one));
assertFalse(three.isAckedBy(two));
assertTrue(three.isAckedBy(three));
}
@Test
public void testIsAnAcquire() throws Exception {
assertFalse(new IntentEntry(member1, LockMode.UNLOCKED, 0L, 0L).isAnAcquire());
assertFalse(new IntentEntry(member1,LockMode.SHARED,0L,0L).isAnAcquire());
assertFalse(new IntentEntry(member1,LockMode.EXCLUSIVE,0L,0L).isAnAcquire());
assertTrue(new IntentEntry(member1, LockMode.ACQUIRING_SHARED, 0L, 0L).isAnAcquire());
assertTrue(new IntentEntry(member1, LockMode.ACQUIRING_EXCLUSIVE, 0L, 0L).isAnAcquire());
assertTrue(new IntentEntry(member1, LockMode.ACQUIRING_EXCLUSIVE_WITH_SHARE, 0L, 0L).isAnAcquire());
}
@Test
public void testCompareTo() throws Exception {
IntentEntry one = new IntentEntry(member1,LockMode.UNLOCKED,100L,500L);
IntentEntry two = new IntentEntry(member2,LockMode.UNLOCKED,200L,400L);
IntentEntry three = new IntentEntry(member3,LockMode.UNLOCKED,300L,300L);
IntentEntry four = new IntentEntry(member3,LockMode.UNLOCKED,400L,200L);
IntentEntry five = new IntentEntry(member3,LockMode.UNLOCKED,500L,100L);
List<IntentEntry> sortedByUpdateOrAcquire = Arrays.asList(three,two,four,five,one);
Collections.sort(sortedByUpdateOrAcquire);
assertEquals(Arrays.asList(five,four,three,two,one),sortedByUpdateOrAcquire);
}
}