Package org.makersoft.shards.unit.id.uuid

Source Code of org.makersoft.shards.unit.id.uuid.ShardedUUIDGeneratorTests

/*
* @(#)ShardedUUIDGeneratorTests.java 2012-8-22 下午2:00:03
*
* Copyright (c) 2011-2012 Makersoft.org all rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
*
*/
package org.makersoft.shards.unit.id.uuid;

import java.io.Serializable;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.makersoft.shards.ShardId;
import org.makersoft.shards.id.IdGenerator;
import org.makersoft.shards.id.uuid.ShardedUUIDGenerator;
import org.makersoft.shards.session.impl.ShardedSqlSessionImpl;

/**
* UUID生成单元测试.
*
* @version 2012-8-22 下午2:00:03
* @author Feng Kuok
*/
public class ShardedUUIDGeneratorTests {

  public static final ShardId shardId = new ShardId(0);

  public IdGenerator idGenerator;

  @BeforeClass
  public static void init() {
    ShardedSqlSessionImpl.setCurrentSubgraphShardId(shardId);
  }

  @Before
  public void setup() {
    idGenerator = new ShardedUUIDGenerator();
  }

  @Test
  public void testGenerate() throws Exception {
    Assert.assertNotNull(idGenerator);

    Serializable id = idGenerator.generate(null, null);

    Assert.assertNotNull(id);
  }

  @Test
  public void testMultiThreadGenerate() throws Exception {
    ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime()
        .availableProcessors());
    final CopyOnWriteArrayList<Serializable> list = new CopyOnWriteArrayList<Serializable>();

    for (int i = 0; i < 10000; i++) {
      executorService.execute(new Runnable() {

        @Override
        public void run() {
          ShardedSqlSessionImpl.setCurrentSubgraphShardId(shardId);
          Serializable id = idGenerator.generate(null, null);
          list.addIfAbsent(id); // 不重复则添加
        }
      });
    }

    executorService.shutdown();
    while (!executorService.isTerminated()) {
      // wait for completed all task;
    }

    // 验证所有id不重复
    Assert.assertEquals(10000, list.size());

  }

  @Test
  public void testExtractShardId() throws Exception {
    Assert.assertNotNull(idGenerator);

    ShardId shardId = idGenerator.extractShardId(idGenerator.generate(null, null));

    Assert.assertEquals(ShardedUUIDGeneratorTests.shardId, shardId);
  }
}
TOP

Related Classes of org.makersoft.shards.unit.id.uuid.ShardedUUIDGeneratorTests

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.