445b7f3388
add retry logic when calls to API fail. if API reconnects fail, restart lotus-daemon as it means lotus-daemon is likely unhealthy. wait for lotus node's chain to sync during each check cycle, to avoid restarting lotus-daemon if needing to sync. handle SIGTERM properly. general cleanup and refactor of code, getting ready of unnecessary channels
167 lines
5.0 KiB
Go
167 lines
5.0 KiB
Go
package main
|
|
|
|
import (
|
|
"testing"
|
|
|
|
cid "github.com/ipfs/go-cid"
|
|
mh "github.com/multiformats/go-multihash"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestAppendCIDsToWindow(t *testing.T) {
|
|
assert := assert.New(t)
|
|
var window CidWindow
|
|
threshold := 3
|
|
cid0 := makeCID("0")
|
|
cid1 := makeCID("1")
|
|
cid2 := makeCID("2")
|
|
cid3 := makeCID("3")
|
|
window = appendCIDsToWindow(window, []cid.Cid{cid0}, threshold)
|
|
window = appendCIDsToWindow(window, []cid.Cid{cid1}, threshold)
|
|
window = appendCIDsToWindow(window, []cid.Cid{cid2}, threshold)
|
|
window = appendCIDsToWindow(window, []cid.Cid{cid3}, threshold)
|
|
assert.Len(window, 3)
|
|
assert.Equal(window[0][0], cid1)
|
|
assert.Equal(window[1][0], cid2)
|
|
assert.Equal(window[2][0], cid3)
|
|
}
|
|
|
|
func TestCheckWindow(t *testing.T) {
|
|
assert := assert.New(t)
|
|
threshold := 3
|
|
|
|
var healthyHeadCheckWindow CidWindow
|
|
healthyHeadCheckWindow = appendCIDsToWindow(healthyHeadCheckWindow, []cid.Cid{
|
|
makeCID("abcd"),
|
|
}, threshold)
|
|
healthyHeadCheckWindow = appendCIDsToWindow(healthyHeadCheckWindow, []cid.Cid{
|
|
makeCID("bbcd"),
|
|
makeCID("bbfe"),
|
|
}, threshold)
|
|
healthyHeadCheckWindow = appendCIDsToWindow(healthyHeadCheckWindow, []cid.Cid{
|
|
makeCID("bbcd"),
|
|
makeCID("bbfe"),
|
|
}, threshold)
|
|
ok := checkWindow(healthyHeadCheckWindow, threshold)
|
|
assert.True(ok)
|
|
|
|
var healthyHeadCheckWindow1 CidWindow
|
|
healthyHeadCheckWindow1 = appendCIDsToWindow(healthyHeadCheckWindow1, []cid.Cid{
|
|
makeCID("bbcd"),
|
|
makeCID("bbfe"),
|
|
}, threshold)
|
|
healthyHeadCheckWindow1 = appendCIDsToWindow(healthyHeadCheckWindow1, []cid.Cid{
|
|
makeCID("bbcd"),
|
|
makeCID("bbfe"),
|
|
makeCID("abcd"),
|
|
}, threshold)
|
|
healthyHeadCheckWindow1 = appendCIDsToWindow(healthyHeadCheckWindow1, []cid.Cid{
|
|
makeCID("abcd"),
|
|
}, threshold)
|
|
ok = checkWindow(healthyHeadCheckWindow1, threshold)
|
|
assert.True(ok)
|
|
|
|
var healthyHeadCheckWindow2 CidWindow
|
|
healthyHeadCheckWindow2 = appendCIDsToWindow(healthyHeadCheckWindow2, []cid.Cid{
|
|
makeCID("bbcd"),
|
|
makeCID("bbfe"),
|
|
}, threshold)
|
|
healthyHeadCheckWindow2 = appendCIDsToWindow(healthyHeadCheckWindow2, []cid.Cid{
|
|
makeCID("abcd"),
|
|
}, threshold)
|
|
ok = checkWindow(healthyHeadCheckWindow2, threshold)
|
|
assert.True(ok)
|
|
|
|
var healthyHeadCheckWindow3 CidWindow
|
|
healthyHeadCheckWindow3 = appendCIDsToWindow(healthyHeadCheckWindow3, []cid.Cid{
|
|
makeCID("abcd"),
|
|
}, threshold)
|
|
healthyHeadCheckWindow3 = appendCIDsToWindow(healthyHeadCheckWindow3, []cid.Cid{
|
|
makeCID("bbcd"),
|
|
makeCID("bbfe"),
|
|
}, threshold)
|
|
ok = checkWindow(healthyHeadCheckWindow3, threshold)
|
|
assert.True(ok)
|
|
|
|
var healthyHeadCheckWindow4 CidWindow
|
|
healthyHeadCheckWindow4 = appendCIDsToWindow(healthyHeadCheckWindow4, []cid.Cid{
|
|
makeCID("bbcd"),
|
|
makeCID("bbfe"),
|
|
}, threshold)
|
|
ok = checkWindow(healthyHeadCheckWindow4, threshold)
|
|
assert.True(ok)
|
|
|
|
var healthyHeadCheckWindow5 CidWindow
|
|
healthyHeadCheckWindow5 = appendCIDsToWindow(healthyHeadCheckWindow5, []cid.Cid{
|
|
makeCID("bbcd"),
|
|
makeCID("bbfe"),
|
|
makeCID("bbff"),
|
|
}, 5)
|
|
healthyHeadCheckWindow5 = appendCIDsToWindow(healthyHeadCheckWindow5, []cid.Cid{
|
|
makeCID("bbcd"),
|
|
makeCID("bbfe"),
|
|
}, 5)
|
|
healthyHeadCheckWindow5 = appendCIDsToWindow(healthyHeadCheckWindow5, []cid.Cid{
|
|
makeCID("abcd"),
|
|
}, 5)
|
|
healthyHeadCheckWindow5 = appendCIDsToWindow(healthyHeadCheckWindow5, []cid.Cid{
|
|
makeCID("cbcd"),
|
|
makeCID("cbfe"),
|
|
}, 5)
|
|
healthyHeadCheckWindow5 = appendCIDsToWindow(healthyHeadCheckWindow5, []cid.Cid{
|
|
makeCID("cbcd"),
|
|
makeCID("cbfe"),
|
|
}, 5)
|
|
ok = checkWindow(healthyHeadCheckWindow5, threshold)
|
|
assert.True(ok)
|
|
|
|
var unhealthyHeadCheckWindow CidWindow
|
|
unhealthyHeadCheckWindow = appendCIDsToWindow(unhealthyHeadCheckWindow, []cid.Cid{
|
|
makeCID("abcd"),
|
|
makeCID("fbcd"),
|
|
}, threshold)
|
|
unhealthyHeadCheckWindow = appendCIDsToWindow(unhealthyHeadCheckWindow, []cid.Cid{
|
|
makeCID("abcd"),
|
|
makeCID("fbcd"),
|
|
}, threshold)
|
|
unhealthyHeadCheckWindow = appendCIDsToWindow(unhealthyHeadCheckWindow, []cid.Cid{
|
|
makeCID("abcd"),
|
|
makeCID("fbcd"),
|
|
}, threshold)
|
|
ok = checkWindow(unhealthyHeadCheckWindow, threshold)
|
|
assert.False(ok)
|
|
|
|
var unhealthyHeadCheckWindow1 CidWindow
|
|
unhealthyHeadCheckWindow1 = appendCIDsToWindow(unhealthyHeadCheckWindow1, []cid.Cid{
|
|
makeCID("abcd"),
|
|
makeCID("fbcd"),
|
|
}, threshold)
|
|
unhealthyHeadCheckWindow1 = appendCIDsToWindow(unhealthyHeadCheckWindow1, []cid.Cid{
|
|
makeCID("abcd"),
|
|
makeCID("fbcd"),
|
|
}, threshold)
|
|
ok = checkWindow(unhealthyHeadCheckWindow1, threshold)
|
|
assert.True(ok)
|
|
|
|
var unhealthyHeadCheckWindow2 CidWindow
|
|
unhealthyHeadCheckWindow2 = appendCIDsToWindow(unhealthyHeadCheckWindow2, []cid.Cid{
|
|
makeCID("abcd"),
|
|
}, threshold)
|
|
unhealthyHeadCheckWindow2 = appendCIDsToWindow(unhealthyHeadCheckWindow2, []cid.Cid{
|
|
makeCID("abcd"),
|
|
}, threshold)
|
|
unhealthyHeadCheckWindow2 = appendCIDsToWindow(unhealthyHeadCheckWindow2, []cid.Cid{
|
|
makeCID("abcd"),
|
|
}, threshold)
|
|
ok = checkWindow(unhealthyHeadCheckWindow2, threshold)
|
|
assert.False(ok)
|
|
}
|
|
|
|
func makeCID(s string) cid.Cid {
|
|
h1, err := mh.Sum([]byte(s), mh.SHA2_256, -1)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
return cid.NewCidV1(0x55, h1)
|
|
}
|