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
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.(string), ":") |
|
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 |
|
}
|
|
|