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.
87 lines
1.7 KiB
87 lines
1.7 KiB
7 years ago
|
package pserver
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"encoding/binary"
|
||
|
"fmt"
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
)
|
||
|
|
||
|
const testDir = "./test_data"
|
||
|
|
||
|
type myKV struct {
|
||
|
m map[string][]byte
|
||
|
}
|
||
|
|
||
|
func (m *myKV) GetKey(key string, timeout time.Duration) ([]byte, error) {
|
||
|
if m.m == nil {
|
||
|
m.m = make(map[string][]byte)
|
||
|
}
|
||
|
return m.m[key], nil
|
||
|
}
|
||
|
|
||
|
func (m *myKV) PutKey(key string, value []byte, timeout time.Duration, withLease bool) error {
|
||
|
if m.m == nil {
|
||
|
m.m = make(map[string][]byte)
|
||
|
}
|
||
|
m.m[key] = value
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func TestCheckpoint(t *testing.T) {
|
||
|
kv := &myKV{}
|
||
|
s, err := NewService(0, time.Hour, testDir, kv, nil)
|
||
|
assert.Nil(t, err)
|
||
|
err = s.checkpoint()
|
||
|
assert.Nil(t, err)
|
||
|
_, err = LoadCheckpoint(kv, 0)
|
||
|
assert.Nil(t, err)
|
||
|
}
|
||
|
|
||
|
func float32ToByte(f float32) []byte {
|
||
|
var buf bytes.Buffer
|
||
|
err := binary.Write(&buf, binary.LittleEndian, f)
|
||
|
if err != nil {
|
||
|
fmt.Println("binary.Write failed:", err)
|
||
|
}
|
||
|
return buf.Bytes()
|
||
|
}
|
||
|
|
||
|
func TestCheckpointWithData(t *testing.T) {
|
||
|
kv := &myKV{}
|
||
|
s, err := NewService(0, time.Hour, testDir, kv, nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
var content []byte
|
||
|
for i := 0; i < 50000; i++ {
|
||
|
content = append(content, float32ToByte(float32(i))...)
|
||
|
}
|
||
|
|
||
|
p1 := Parameter{Name: "p1", ElementType: 1, Content: content}
|
||
|
err = s.InitParam(ParameterWithConfig{Param: p1}, nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
err = s.FinishInitParams(0, nil)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
var p2 Parameter
|
||
|
err = s.GetParam(p1.Name, &p2)
|
||
|
assert.Nil(t, err)
|
||
|
assert.Equal(t, p1, p2)
|
||
|
|
||
|
err = s.checkpoint()
|
||
|
assert.Nil(t, err)
|
||
|
cp, err := LoadCheckpoint(kv, 0)
|
||
|
assert.Nil(t, err)
|
||
|
s1, err := NewService(0, time.Hour, testDir, kv, cp)
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
var p3 Parameter
|
||
|
err = s1.GetParam(p1.Name, &p3)
|
||
|
assert.Nil(t, err)
|
||
|
assert.Equal(t, p1, p3)
|
||
|
}
|