voucher/internal/pkg/uid/generator_test.go

133 lines
2.5 KiB
Go

package uid
import (
"fmt"
"github.com/bwmarrin/snowflake"
"hash/fnv"
"math"
"sync"
"testing"
"github.com/redis/go-redis/v9"
)
func TestSignGenerator_GetNumber(t *testing.T) {
rdb := redis.NewClient(&redis.Options{
Addr: "47.97.27.195:6379",
Password: "lansexiongdi@666",
DB: 15,
})
number, err := NewSignGenerator(rdb).SetWorkerID(1).SetServerID(2).GetNumber()
if err != nil {
t.Error(err)
return
}
t.Log(number)
}
func TestSignGenerator_Num(t *testing.T) {
rdb := redis.NewClient(&redis.Options{
Addr: "47.97.27.195:6379",
Password: "lansexiongdi@666",
DB: 15,
})
var ids sync.Map
var wg sync.WaitGroup
const concurrency = 2000
wg.Add(concurrency)
for i := 0; i < concurrency; i++ {
go func() {
defer wg.Done()
id, err := NewSignGenerator(rdb).SetWorkerID(1).SetServerID(2).GetNumber()
if err != nil {
t.Error(err)
return
}
if _, exists := ids.LoadOrStore(id, true); exists {
t.Errorf("duplicate ID generated")
}
}()
}
wg.Wait()
}
func TestSignGenerator_ReverseNumber(t *testing.T) {
reverseNumber := NewSignGenerator(nil).ReverseNumber(556081583078248449)
t.Log(reverseNumber)
}
func Test_GenerateNo(t *testing.T) {
//no := GenerateNo()
//
//t.Log(len(no))
//t.Log(no)
//p := os.Getpid()
//
//t.Log(p)
//t.Log(p % 1000)
//uid := uuid.New().String()
//t.Log(len(uid))
//t.Log(uid)
//serverIdStr, _ := os.Hostname()
serverIdStr := "lsxddeMac-mini1111111dddddddddddddwffdsf"
t.Log(serverIdStr)
id := hashMod(serverIdStr)
t.Log(id)
node, err := snowflake.NewNode(int64(id))
if err != nil {
t.Error(err)
return
}
nid := node.Generate().String()
t.Log(nid)
t.Log(len(nid))
}
func hashMod(hashStr string) int {
hash := fnv.New32a()
_, _ = hash.Write([]byte(hashStr))
hashValue := hash.Sum32()
return int(math.Mod(float64(hashValue), 32))
}
func GenerateSnowflakeID(nodeID int64) (string, error) {
if nodeID < 0 || nodeID > 1023 {
return "", fmt.Errorf("invalid node ID: %d", nodeID)
}
node, err := snowflake.NewNode(nodeID)
if err != nil {
return "", err
}
return node.Generate().String(), nil
}
func TestGenerateID(t *testing.T) {
nodeID := int64(1) // 确保唯一
node, _ := snowflake.NewNode(nodeID)
var ids sync.Map
var wg sync.WaitGroup
const concurrency = 2000
wg.Add(concurrency)
for i := 0; i < concurrency; i++ {
go func() {
defer wg.Done()
id := node.Generate().String()
if _, exists := ids.LoadOrStore(id, true); exists {
t.Errorf("duplicate ID generated")
}
}()
}
wg.Wait()
}