Kevacoin stratum server for solo-mining
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.
 
 
 
 
 
 

74 lines
2.2 KiB

package storage
import (
"gopkg.in/redis.v3"
"os"
"reflect"
"strings"
"testing"
)
var r *RedisClient
func TestMain(m *testing.M) {
client := redis.NewClient(&redis.Options{Addr: "127.0.0.1:6379"})
r = &RedisClient{client: client, prefix: "test"}
r.client.FlushAll()
os.Exit(m.Run())
}
func TestWriteBlock(t *testing.T) {
r.client.FlushAll()
r.WriteBlock("addy", 1000, 999, 0, "abcdef")
sharesRes := r.client.HGetAllMap("test:shares:round0").Val()
expectedRound := map[string]string{"addy": "1000"}
if !reflect.DeepEqual(sharesRes, expectedRound) {
t.Errorf("Invalid round data: %v", sharesRes)
}
blockRes := r.client.ZRevRangeWithScores("test:blocks:candidates", 0, 99999).Val()
blockRes = stripTimestampsFromZs(blockRes)
expectedCandidates := []redis.Z{redis.Z{0, "abcdef:*:999:1000"}}
if !reflect.DeepEqual(blockRes, expectedCandidates) {
t.Errorf("Invalid candidates data: %v, expected: %v", blockRes, expectedCandidates)
}
}
func TestWriteBlockAtSameHeight(t *testing.T) {
r.client.FlushAll()
r.WriteBlock("addy", 1000, 999, 1, "00000000")
r.WriteBlock("addy", 2000, 999, 1, "00000001")
r.WriteBlock("addy", 3000, 999, 1, "00000002")
sharesRes := r.client.HGetAllMap("test:shares:round1").Val()
expectedRound := map[string]string{"addy": "3000"}
if !reflect.DeepEqual(sharesRes, expectedRound) {
t.Errorf("Invalid round data: %v", sharesRes)
}
blockRes := r.client.ZRevRangeWithScores("test:blocks:candidates", 0, 99999).Val()
blockRes = stripTimestampsFromZs(blockRes)
expectedBlocks := []redis.Z{redis.Z{1, "00000002:*:999:3000"}, redis.Z{1, "00000001:*:999:2000"}, redis.Z{1, "00000000:*:999:1000"}}
if len(blockRes) != 3 {
t.Errorf("Invalid number of candidates: %v, expected: %v", len(blockRes), 3)
}
if !reflect.DeepEqual(blockRes, expectedBlocks) {
t.Errorf("Invalid candidates data: %v, expected: %v", blockRes, expectedBlocks)
}
}
func stripTimestampFromZ(z redis.Z) redis.Z {
k := strings.Split(z.Member, ":")
res := []string{k[0], "*", k[2], k[3]}
return redis.Z{Score: z.Score, Member: strings.Join(res, ":")}
}
func stripTimestampsFromZs(zs []redis.Z) []redis.Z {
var res []redis.Z
for _, z := range zs {
res = append(res, stripTimestampFromZ(z))
}
return res
}