package com.pardot.rhombus; import com.datastax.driver.core.utils.UUIDs; import com.google.common.collect.Maps; import com.pardot.rhombus.cobject.CField; import com.pardot.rhombus.cobject.CObjectOrdering; import com.pardot.rhombus.cobject.shardingstrategy.*; import com.pardot.rhombus.util.UuidUtil; import com.pardot.rhombus.util.faker.FakeIdRange; import org.joda.time.DateTime; import org.junit.Test; import java.util.Date; import java.util.Iterator; import java.util.Map; import java.util.UUID; import static org.junit.Assert.*; /** * User: Rob Righter * Date: 3/14/14 */ public class FakeIdRangeTest { // @Test // public void makeTimeUUIDFromTimeUnitTest(){ // // long expectedTimestamp = System.currentTimeMillis(); // System.out.println(expectedTimestamp); // UUID actual = FakeIdRange.makeTimeUUIDFromLowestTimeUnit(expectedTimestamp); // System.out.println(actual.toString()); // UUIDs. // assertEquals(expectedTimestamp*100000L, actual.timestamp()); // // //assert that its always the same //// Long timestamp = 13948172300040000L; //// UUID uuid = FakeIdRange.makeTimeUUIDFromLowestTimeUnit(timestamp); //// assertEquals("ef35b740-8dc9-1031-802a-010000000000",uuid.toString()); // // //assert that the date converts to something sane // assertEquals("SOMETHING SANE",UuidUtil.getDateFromUUID(actual).toString());; // } @Test public void getMillisAtShardKeyMonthlyTest() throws RhombusException{ Long millistamp = System.currentTimeMillis(); UUID startingUUID = UUIDs.startOf(millistamp); //System.out.println("UUID of start is "+startingUUID+" (DATE= "+UuidUtil.getDateFromUUID(startingUUID)+" )"); TimebasedShardingStrategy shardingStrategy = new ShardingStrategyMonthly(); FakeIdRange subject = new FakeIdRange(CField.CDataType.TIMEUUID,startingUUID,95L,10L, shardingStrategy, "testing"); long counter = 90L; UUID id = (UUID)subject.getIdAtCounter(counter,shardingStrategy); //System.out.println("UUID of the id is "+id+" (DATE= "+UuidUtil.getDateFromUUID(id)+" ) Millis:"+UuidUtil.convertUUIDToJavaMillis(id)); long actual = subject.getCounterAtId(id); assertEquals(counter,actual); } @Test public void getMillisAtShardKeyWeeklyTest() throws RhombusException{ Long millistamp = System.currentTimeMillis(); UUID startingUUID = UUIDs.startOf(millistamp); //System.out.println("UUID of start is "+startingUUID+" (DATE= "+UuidUtil.getDateFromUUID(startingUUID)+" )"); TimebasedShardingStrategy shardingStrategy = new ShardingStrategyWeekly(); FakeIdRange subject = new FakeIdRange(CField.CDataType.TIMEUUID,startingUUID,950L,3L, shardingStrategy, "testing"); long counter = 8L; UUID id = (UUID)subject.getIdAtCounter(counter,shardingStrategy); //System.out.println("UUID of the id is "+id+" (DATE= "+UuidUtil.getDateFromUUID(id)+" ) Millis:"+UuidUtil.convertUUIDToJavaMillis(id)); long actual = subject.getCounterAtId(id); assertEquals(counter,actual); } @Test public void getMillisAtShardKeyDailyTest() throws RhombusException{ Long millistamp = System.currentTimeMillis(); UUID startingUUID = UUIDs.startOf(millistamp); //System.out.println("UUID of start is "+startingUUID+" (DATE= "+UuidUtil.getDateFromUUID(startingUUID)+" )"); TimebasedShardingStrategy shardingStrategy = new ShardingStrategyDaily(); FakeIdRange subject = new FakeIdRange(CField.CDataType.TIMEUUID,startingUUID,950L,3L, shardingStrategy, "testing"); long counter = 8L; UUID id = (UUID)subject.getIdAtCounter(counter,shardingStrategy); //System.out.println("UUID of the id is "+id+" (DATE= "+UuidUtil.getDateFromUUID(id)+" ) Millis:"+UuidUtil.convertUUIDToJavaMillis(id)); long actual = subject.getCounterAtId(id); assertEquals(counter,actual); } @Test public void getMillisAtShardKeyNoneTest() throws RhombusException{ Long millistamp = System.currentTimeMillis(); UUID startingUUID = UUIDs.startOf(millistamp); //System.out.println("UUID of start is "+startingUUID+" (DATE= "+UuidUtil.getDateFromUUID(startingUUID)+" )"); TimebasedShardingStrategy shardingStrategy = new ShardingStrategyNone(); FakeIdRange subject = new FakeIdRange(CField.CDataType.TIMEUUID,startingUUID,950L,3L, shardingStrategy, "testing"); long counter = 8L; UUID id = (UUID)subject.getIdAtCounter(counter,shardingStrategy); //System.out.println("UUID of the id is "+id+" (DATE= "+UuidUtil.getDateFromUUID(id)+" ) Millis:"+UuidUtil.convertUUIDToJavaMillis(id)); long actual = subject.getCounterAtId(id); assertEquals(counter,actual); } @Test public void getIteratorTestMonthly() throws RhombusException { Long millistamp = 946740000000L; millistamp = System.currentTimeMillis(); System.out.println(millistamp); UUID startingUUID = UUIDs.startOf(millistamp); System.out.println("UUID of start is "+startingUUID+" (DATE= "+UuidUtil.getDateFromUUID(startingUUID)+" )"); TimebasedShardingStrategy shardingStrategy = new ShardingStrategyMonthly(); int numberPerShard = 3; long totalNumberOfObjects = 950L; FakeIdRange subject = new FakeIdRange(CField.CDataType.TIMEUUID,startingUUID,totalNumberOfObjects,(long)numberPerShard, shardingStrategy, "testing"); Iterator<FakeIdRange.IdInRange> it = subject.getIterator(CObjectOrdering.ASCENDING); long counter = 0; int lastmonth = -1; int countSinceChange = 0; while(it.hasNext()){ counter++; FakeIdRange.IdInRange id = it.next(); DateTime dt = UuidUtil.getDateFromUUID((UUID)id.getId()); if(lastmonth == -1){ //initialization case countSinceChange = 1; lastmonth = dt.getMonthOfYear(); } if(dt.getMonthOfYear() == lastmonth){ assert(countSinceChange < numberPerShard); countSinceChange++; } else{ assertEquals(numberPerShard,countSinceChange); countSinceChange=1; }; lastmonth = dt.getMonthOfYear(); assertEquals(subject.getCounterAtId(id.getId()), id.getCounterValue()); } assertEquals(totalNumberOfObjects,counter); } @Test public void getIteratorTestWeekly() throws RhombusException { Long millistamp = 946740000000L; millistamp = System.currentTimeMillis(); System.out.println(millistamp); UUID startingUUID = UUIDs.startOf(millistamp); System.out.println("UUID of start is "+startingUUID+" (DATE= "+UuidUtil.getDateFromUUID(startingUUID)+" )"); TimebasedShardingStrategy shardingStrategy = new ShardingStrategyWeekly(); int numberPerShard = 3; long totalNumberOfObjects = 950L; FakeIdRange subject = new FakeIdRange(CField.CDataType.TIMEUUID,startingUUID,totalNumberOfObjects,(long)numberPerShard, shardingStrategy, "testing"); Iterator<FakeIdRange.IdInRange> it = subject.getIterator(CObjectOrdering.ASCENDING); long counter = 0; int lastweek = -1; int countSinceChange = 0; while(it.hasNext()){ counter++; FakeIdRange.IdInRange id = it.next(); DateTime dt = UuidUtil.getDateFromUUID((UUID)id.getId()); if(lastweek == -1){ //initialization case countSinceChange = 1; lastweek = dt.getWeekOfWeekyear(); } else if(dt.getWeekOfWeekyear() == lastweek){ assert(countSinceChange < numberPerShard); countSinceChange++; } else{ assertEquals(numberPerShard,countSinceChange); countSinceChange=1; }; lastweek = dt.getWeekOfWeekyear(); //System.out.println("countSinceChange = " + countSinceChange); //System.out.println("Actual Counter = " + counter); //System.out.println("Id Counter = " + id.getCounterValue()); //System.out.println("Counter at ID = " + subject.getCounterAtId(id.getId())); //System.out.println("Date on UUID is: " + UuidUtil.getDateFromUUID((UUID)id.getId())); assertEquals(subject.getCounterAtId(id.getId()), id.getCounterValue()); } assertEquals(totalNumberOfObjects,counter); } @Test public void getIteratorDailyWeekly() throws RhombusException { Long millistamp = System.currentTimeMillis(); System.out.println(millistamp); UUID startingUUID = UUIDs.startOf(millistamp); System.out.println("UUID of start is "+startingUUID+" (DATE= "+UuidUtil.getDateFromUUID(startingUUID)+" )"); TimebasedShardingStrategy shardingStrategy = new ShardingStrategyDaily(); int numberPerShard = 3; long totalNumberOfObjects = 950L; FakeIdRange subject = new FakeIdRange(CField.CDataType.TIMEUUID,startingUUID,totalNumberOfObjects,(long)numberPerShard, shardingStrategy, "testing"); Iterator<FakeIdRange.IdInRange> it = subject.getIterator(CObjectOrdering.ASCENDING); int counter = 0; Map<String,Long> shards = Maps.newTreeMap(); while(it.hasNext()){ counter++; FakeIdRange.IdInRange id = it.next(); DateTime dt = UuidUtil.getDateFromUUID((UUID)id.getId()); if(shards.get(dt.getDayOfYear()+"-"+dt.getYear()) == null){ shards.put(dt.getDayOfYear() + "-" + dt.getYear(), 1L); } else{ shards.put(dt.getDayOfYear()+"-"+dt.getYear(), shards.get(dt.getDayOfYear()+"-"+dt.getYear())+1L); } assertEquals(subject.getCounterAtId(id.getId()), id.getCounterValue()); } assertEquals(totalNumberOfObjects, counter); for(Long shardcount : shards.values()){ assert(Long.valueOf(numberPerShard) >= Long.valueOf(shardcount)); } } }