vspd/internal/webapi/helpers_test.go
2023-09-13 09:03:05 +01:00

146 lines
4.6 KiB
Go

// Copyright (c) 2020-2022 The Decred developers
// Use of this source code is governed by an ISC
// license that can be found in the LICENSE file.
package webapi
import (
"testing"
"github.com/decred/dcrd/chaincfg/v3"
)
func TestIsValidVoteChoices(t *testing.T) {
// Mainnet vote version 4 contains 2 agendas - sdiffalgorithm and lnsupport.
// Both agendas have vote choices yes/no/abstain.
voteVersion := uint32(4)
params := chaincfg.MainNetParams()
var tests = []struct {
voteChoices map[string]string
valid bool
}{
// Empty vote choices are allowed.
{map[string]string{}, true},
// Valid agenda, valid vote choice.
{map[string]string{"lnsupport": "yes"}, true},
{map[string]string{"sdiffalgorithm": "no", "lnsupport": "yes"}, true},
// Invalid agenda, valid vote choice.
{map[string]string{"": "yes"}, false},
{map[string]string{"Fake agenda": "yes"}, false},
// Valid agenda, invalid vote choice.
{map[string]string{"lnsupport": "1234"}, false},
{map[string]string{"sdiffalgorithm": ""}, false},
// One valid choice, one invalid choice.
{map[string]string{"sdiffalgorithm": "no", "lnsupport": "1234"}, false},
{map[string]string{"sdiffalgorithm": "1234", "lnsupport": "no"}, false},
// One valid agenda, one invalid agenda.
{map[string]string{"fake": "abstain", "lnsupport": "no"}, false},
{map[string]string{"sdiffalgorithm": "abstain", "": "no"}, false},
}
for _, test := range tests {
err := validConsensusVoteChoices(params, voteVersion, test.voteChoices)
if (err == nil) != test.valid {
t.Fatalf("isValidVoteChoices failed for votechoices '%v': %v",
test.voteChoices, err)
}
}
}
func TestIsValidTSpendPolicy(t *testing.T) {
// A valid tspend hash is 32 bytes (64 characters).
validHash := "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
anotherValidHash := "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
var tests = []struct {
tspendPolicy map[string]string
valid bool
}{
// Empty vote choices are allowed.
{map[string]string{}, true},
// Valid tspend hash, valid vote choice.
{map[string]string{validHash: "yes"}, true},
{map[string]string{validHash: ""}, true},
{map[string]string{validHash: "no", anotherValidHash: "yes"}, true},
// Invalid tspend hash.
{map[string]string{"": "yes"}, false},
{map[string]string{"a": "yes"}, false},
{map[string]string{"non hex characters": "yes"}, false},
{map[string]string{validHash + "a": "yes"}, false},
// Valid tspend hash, invalid vote choice.
{map[string]string{validHash: "1234"}, false},
// // One valid choice, one invalid choice.
{map[string]string{validHash: "no", anotherValidHash: "1234"}, false},
{map[string]string{validHash: "1234", anotherValidHash: "no"}, false},
// One valid tspend hash, one invalid tspend hash.
{map[string]string{"fake": "abstain", anotherValidHash: "no"}, false},
{map[string]string{validHash: "abstain", "": "no"}, false},
}
for _, test := range tests {
err := validTSpendPolicy(test.tspendPolicy)
if (err == nil) != test.valid {
t.Fatalf("validTSpendPolicy failed for policy '%v': %v",
test.tspendPolicy, err)
}
}
}
func TestIsValidTreasuryPolicy(t *testing.T) {
// A valid treasury key is 33 bytes (66 characters).
validKey := "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
anotherValidKey := "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
var tests = []struct {
treasuryPolicy map[string]string
valid bool
}{
// Empty vote choices are allowed.
{map[string]string{}, true},
// Valid treasury key, valid vote choice.
{map[string]string{validKey: "yes"}, true},
{map[string]string{validKey: ""}, true},
{map[string]string{validKey: "no", anotherValidKey: "yes"}, true},
// Invalid treasury key.
{map[string]string{"": "yes"}, false},
{map[string]string{"a": "yes"}, false},
{map[string]string{"non hex characters": "yes"}, false},
{map[string]string{validKey + "a": "yes"}, false},
// Valid treasury key, invalid vote choice.
{map[string]string{validKey: "1234"}, false},
// // One valid choice, one invalid choice.
{map[string]string{validKey: "no", anotherValidKey: "1234"}, false},
{map[string]string{validKey: "1234", anotherValidKey: "no"}, false},
// One valid treasury key, one invalid treasury key.
{map[string]string{"fake": "abstain", anotherValidKey: "no"}, false},
{map[string]string{validKey: "abstain", "": "no"}, false},
}
for _, test := range tests {
err := validTreasuryPolicy(test.treasuryPolicy)
if (err == nil) != test.valid {
t.Fatalf("validTreasuryPolicy failed for policy '%v': %v",
test.treasuryPolicy, err)
}
}
}