github.com/teng231/glock@v1.1.11/distributed_lock_test.go (about)

     1  package glock
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  	"sync"
     7  	"testing"
     8  	"time"
     9  )
    10  
    11  /*
    12  	Run test: go test -run TestDistributeLock
    13  	go test -bench BenchmarkDistributedLock100t  -benchmem
    14  	go test -bench BenchmarkDistributedLock10000t  -benchmem
    15  ?*/
    16  func TestDistributeLock(t *testing.T) {
    17  	dl, err := CreateDistributedLock("localhost:6379", "", "test2_", 100*time.Second)
    18  	if err != nil {
    19  		panic(err)
    20  	}
    21  	wg := &sync.WaitGroup{}
    22  	wg.Add(3)
    23  	go func() {
    24  		time.AfterFunc(500*time.Millisecond, func() {
    25  			lctx, err := dl.Lock("test-redsync")
    26  			if err != nil {
    27  				log.Print(err)
    28  			}
    29  			log.Print("locked2.1")
    30  			if err := dl.Unlock(lctx); err != nil {
    31  				panic(err)
    32  			}
    33  			log.Print("done 2.2")
    34  			wg.Done()
    35  		})
    36  
    37  	}()
    38  	go func() {
    39  		lctx, err := dl.Lock("test-redsync")
    40  		if err != nil {
    41  			log.Print(err)
    42  			log.Panic(err)
    43  		}
    44  		log.Print("locked3.1")
    45  		time.AfterFunc(2*time.Second, func() {
    46  			if err := dl.Unlock(lctx); err != nil {
    47  				panic(err)
    48  			}
    49  			log.Print("done 3.2")
    50  			wg.Done()
    51  		})
    52  
    53  	}()
    54  	go func() {
    55  		time.AfterFunc(900*time.Millisecond, func() {
    56  			lctx, err := dl.Lock("test-redsync")
    57  			if err != nil {
    58  				log.Print(err)
    59  				log.Panic(err)
    60  			}
    61  			log.Print("locked1.1")
    62  			time.AfterFunc(2*time.Second, func() {
    63  				if err := dl.Unlock(lctx); err != nil {
    64  					panic(err)
    65  				}
    66  				log.Print("done 1.2")
    67  				wg.Done()
    68  			})
    69  		})
    70  
    71  	}()
    72  	wg.Wait()
    73  }
    74  
    75  func BenchmarkDistributedLock100t(t *testing.B) {
    76  	dl, err := CreateDistributedLock("localhost:6379", "", "test2_", 4*time.Second)
    77  	if err != nil {
    78  		panic(err)
    79  	}
    80  	for i := 0; i < 100; i++ {
    81  		lctx, err := dl.Lock(fmt.Sprintf("test%v", i))
    82  		if err != nil {
    83  			log.Print(err)
    84  		}
    85  		if err := dl.Unlock(lctx); err != nil {
    86  			log.Print(err)
    87  		}
    88  	}
    89  }
    90  
    91  func BenchmarkDistributedLock10000t(t *testing.B) {
    92  	dl, err := CreateDistributedLock("localhost:6379", "", "test2_", 4*time.Second)
    93  	if err != nil {
    94  		panic(err)
    95  	}
    96  	for i := 0; i < 10000; i++ {
    97  		lctx, err := dl.Lock(fmt.Sprintf("test%v", i))
    98  		if err != nil {
    99  			log.Print(err)
   100  		}
   101  		if err := dl.Unlock(lctx); err != nil {
   102  			log.Print(err)
   103  		}
   104  	}
   105  }