github.com/flike/idgo@v0.0.0-20191108221704-166969ccb896/server/idgo_test.go (about)

     1  package server
     2  
     3  import (
     4  	"database/sql"
     5  	"fmt"
     6  	"sync"
     7  	"testing"
     8  
     9  	_ "github.com/go-sql-driver/mysql"
    10  )
    11  
    12  var wg sync.WaitGroup
    13  var db *sql.DB
    14  
    15  func init() {
    16  	var err error
    17  
    18  	db, err = sql.Open("mysql", "root:@tcp(127.0.0.1:3306)/test?charset=utf8")
    19  	if err != nil {
    20  		fmt.Println(err.Error())
    21  	}
    22  }
    23  
    24  func GetId(idGenerator *MySQLIdGenerator) {
    25  	defer wg.Done()
    26  	for i := 0; i < 100; i++ {
    27  		_, err := idGenerator.Next()
    28  		if err != nil {
    29  			fmt.Println(err.Error())
    30  		}
    31  	}
    32  }
    33  
    34  func TestMySQLIdgen(t *testing.T) {
    35  	idGenerator, err := NewMySQLIdGenerator(db, "mysql_victory")
    36  	if err != nil {
    37  		t.Fatal(err.Error())
    38  	}
    39  	err = idGenerator.Reset(1, false)
    40  	if err != nil {
    41  		t.Fatal(err.Error())
    42  	}
    43  	//10 goroutine
    44  	wg.Add(10)
    45  	for i := 0; i < 10; i++ {
    46  		go GetId(idGenerator)
    47  	}
    48  	wg.Wait()
    49  	id, err := idGenerator.Next()
    50  	if err != nil {
    51  		t.Fatal(err.Error())
    52  	}
    53  	t.Log(id)
    54  }
    55  
    56  func BenchmarkMySQLIdgen(b *testing.B) {
    57  	idGenerator, err := NewMySQLIdGenerator(db, "mysql_file")
    58  	if err != nil {
    59  		b.Fatal(err.Error())
    60  	}
    61  	err = idGenerator.Reset(1, false)
    62  	if err != nil {
    63  		b.Fatal(err.Error())
    64  	}
    65  
    66  	b.StartTimer()
    67  	for i := 0; i < 1000; i++ {
    68  		_, err = idGenerator.Next()
    69  		if err != nil {
    70  			b.Fatal(err.Error())
    71  		}
    72  	}
    73  
    74  	b.StopTimer()
    75  }