You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
165 lines
3.5 KiB
165 lines
3.5 KiB
2 years ago
|
// Copyright 2017 Eric Zhou. All Rights Reserved.
|
||
|
//
|
||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
// you may not use this file except in compliance with the License.
|
||
|
// You may obtain a copy of the License at
|
||
|
//
|
||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||
|
//
|
||
|
// Unless required by applicable law or agreed to in writing, software
|
||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
// See the License for the specific language governing permissions and
|
||
|
// limitations under the License.
|
||
|
|
||
|
package base64Captcha
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"math/rand"
|
||
|
"testing"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
func TestSetGet(t *testing.T) {
|
||
|
s := NewMemoryStore(GCLimitNumber, Expiration)
|
||
|
id := "captcha id"
|
||
|
d := "random-string"
|
||
|
_ = s.Set(id, d)
|
||
|
d2 := s.Get(id, false)
|
||
|
if d2 != d {
|
||
|
t.Errorf("saved %v, getDigits returned got %v", d, d2)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestGetClear(t *testing.T) {
|
||
|
s := NewMemoryStore(GCLimitNumber, Expiration)
|
||
|
id := "captcha id"
|
||
|
d := "932839jfffjkdss"
|
||
|
_ = s.Set(id, d)
|
||
|
d2 := s.Get(id, true)
|
||
|
if d != d2 {
|
||
|
t.Errorf("saved %v, getDigitsClear returned got %v", d, d2)
|
||
|
}
|
||
|
d2 = s.Get(id, false)
|
||
|
if d2 != "" {
|
||
|
t.Errorf("getDigitClear didn't clear (%q=%v)", id, d2)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func BenchmarkSetCollect(b *testing.B) {
|
||
|
b.StopTimer()
|
||
|
d := "fdskfew9832232r"
|
||
|
s := NewMemoryStore(9999, -1)
|
||
|
ids := make([]string, 1000)
|
||
|
for i := range ids {
|
||
|
ids[i] = fmt.Sprintf("%d", rand.Int63())
|
||
|
}
|
||
|
b.StartTimer()
|
||
|
for i := 0; i < b.N; i++ {
|
||
|
for j := 0; j < 1000; j++ {
|
||
|
_ = s.Set(ids[j], d)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestMemoryStore_SetGoCollect(t *testing.T) {
|
||
|
s := NewMemoryStore(10, -1)
|
||
|
for i := 0; i <= 100; i++ {
|
||
|
_ = s.Set(fmt.Sprint(i), fmt.Sprint(i))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestMemoryStore_CollectNotExpire(t *testing.T) {
|
||
|
s := NewMemoryStore(10, time.Hour)
|
||
|
for i := 0; i < 50; i++ {
|
||
|
_ = s.Set(fmt.Sprint(i), fmt.Sprint(i))
|
||
|
}
|
||
|
|
||
|
// let background goroutine to go
|
||
|
time.Sleep(time.Second)
|
||
|
|
||
|
if v := s.Get("0", false); v != "0" {
|
||
|
t.Error("mem store get failed")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestNewMemoryStore(t *testing.T) {
|
||
|
type args struct {
|
||
|
collectNum int
|
||
|
expiration time.Duration
|
||
|
}
|
||
|
tests := []struct {
|
||
|
name string
|
||
|
args args
|
||
|
want Store
|
||
|
}{
|
||
|
{"", args{20, time.Hour}, nil},
|
||
|
{"", args{20, time.Hour * 5}, nil},
|
||
|
}
|
||
|
for _, tt := range tests {
|
||
|
t.Run(tt.name, func(t *testing.T) {
|
||
|
if got := NewMemoryStore(tt.args.collectNum, tt.args.expiration); got == nil {
|
||
|
t.Errorf("NewMemoryStore() = %v, want %v", got, tt.want)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func Test_memoryStore_Set(t *testing.T) {
|
||
|
thisStore := NewMemoryStore(10, time.Hour)
|
||
|
type args struct {
|
||
|
id string
|
||
|
value string
|
||
|
}
|
||
|
tests := []struct {
|
||
|
name string
|
||
|
s Store
|
||
|
args args
|
||
|
}{
|
||
|
{"", thisStore, args{RandomId(), RandomId()}},
|
||
|
}
|
||
|
for _, tt := range tests {
|
||
|
t.Run(tt.name, func(t *testing.T) {
|
||
|
_ = tt.s.Set(tt.args.id, tt.args.value)
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func Test_memoryStore_Verify(t *testing.T) {
|
||
|
thisStore := NewMemoryStore(10, time.Hour)
|
||
|
_ = thisStore.Set("xx", "xx")
|
||
|
got := thisStore.Verify("xx", "xx", false)
|
||
|
if !got {
|
||
|
t.Error("failed1")
|
||
|
}
|
||
|
got = thisStore.Verify("xx", "xx", true)
|
||
|
|
||
|
if !got {
|
||
|
t.Error("failed2")
|
||
|
}
|
||
|
got = thisStore.Verify("xx", "xx", true)
|
||
|
|
||
|
if got {
|
||
|
t.Error("failed3")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func Test_memoryStore_Get(t *testing.T) {
|
||
|
thisStore := NewMemoryStore(10, time.Hour)
|
||
|
_ = thisStore.Set("xx", "xx")
|
||
|
got := thisStore.Get("xx", false)
|
||
|
if got != "xx" {
|
||
|
t.Error("failed1")
|
||
|
}
|
||
|
got = thisStore.Get("xx", true)
|
||
|
if got != "xx" {
|
||
|
t.Error("failed2")
|
||
|
}
|
||
|
got = thisStore.Get("xx", false)
|
||
|
if got == "xx" {
|
||
|
t.Error("failed3")
|
||
|
}
|
||
|
|
||
|
}
|