0fed61192a
The things removed here have been live for more than 2 releases. License: MIT Signed-off-by: Hector Sanjuan <hector@protocol.ai>
240 lines
6.7 KiB
Go
240 lines
6.7 KiB
Go
package ipfscluster
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
var ccfgTestJSON = []byte(`
|
|
{
|
|
"id": "QmUfSFm12eYCaRdypg48m8RqkXfLW7A2ZeGZb2skeHHDGA",
|
|
"peername": "testpeer",
|
|
"private_key": "CAASqAkwggSkAgEAAoIBAQDpT16IRF6bb9tHsCbQ7M+nb2aI8sz8xyt8PoAWM42ki+SNoESIxKb4UhFxixKvtEdGxNE6aUUVc8kFk6wTStJ/X3IGiMetwkXiFiUxabUF/8A6SyvnSVDm+wFuavugpVrZikjLcfrf2xOVgnG3deQQvd/qbAv14jTwMFl+T+8d/cXBo8Mn/leLZCQun/EJEnkXP5MjgNI8XcWUE4NnH3E0ESSm6Pkm8MhMDZ2fmzNgqEyJ0GVinNgSml3Pyha3PBSj5LRczLip/ie4QkKx5OHvX2L3sNv/JIUHse5HSbjZ1c/4oGCYMVTYCykWiczrxBUOlcr8RwnZLOm4n2bCt5ZhAgMBAAECggEAVkePwfzmr7zR7tTpxeGNeXHtDUAdJm3RWwUSASPXgb5qKyXVsm5nAPX4lXDE3E1i/nzSkzNS5PgIoxNVU10cMxZs6JW0okFx7oYaAwgAddN6lxQtjD7EuGaixN6zZ1k/G6vT98iS6i3uNCAlRZ9HVBmjsOF8GtYolZqLvfZ5izEVFlLVq/BCs7Y5OrDrbGmn3XupfitVWYExV0BrHpobDjsx2fYdTZkmPpSSvXNcm4Iq2AXVQzoqAfGo7+qsuLCZtVlyTfVKQjMvE2ffzN1dQunxixOvev/fz4WSjGnRpC6QLn6Oqps9+VxQKqKuXXqUJC+U45DuvA94Of9MvZfAAQKBgQD7xmXueXRBMr2+0WftybAV024ap0cXFrCAu+KWC1SUddCfkiV7e5w+kRJx6RH1cg4cyyCL8yhHZ99Z5V0Mxa/b/usuHMadXPyX5szVI7dOGgIC9q8IijN7B7GMFAXc8+qC7kivehJzjQghpRRAqvRzjDls4gmbNPhbH1jUiU124QKBgQDtOaW5/fOEtOq0yWbDLkLdjImct6oKMLhENL6yeIKjMYgifzHb2adk7rWG3qcMrdgaFtDVfqv8UmMEkzk7bSkovMVj3SkLzMz84ii1SkSfyaCXgt/UOzDkqAUYB0cXMppYA7jxHa2OY8oEHdBgmyJXdLdzJxCp851AoTlRUSePgQKBgQCQgKgUHOUaXnMEx88sbOuBO14gMg3dNIqM+Ejt8QbURmI8k3arzqA4UK8Tbb9+7b0nzXWanS5q/TT1tWyYXgW28DIuvxlHTA01aaP6WItmagrphIelERzG6f1+9ib/T4czKmvROvDIHROjq8lZ7ERs5Pg4g+sbh2VbdzxWj49EQQKBgFEna36ZVfmMOs7mJ3WWGeHY9ira2hzqVd9fe+1qNKbHhx7mDJR9fTqWPxuIh/Vac5dZPtAKqaOEO8OQ6f9edLou+ggT3LrgsS/B3tNGOPvA6mNqrk/Yf/15TWTO+I8DDLIXc+lokbsogC+wU1z5NWJd13RZZOX/JUi63vTmonYBAoGBAIpglLCH2sPXfmguO6p8QcQcv4RjAU1c0GP4P5PNN3Wzo0ItydVd2LHJb6MdmL6ypeiwNklzPFwTeRlKTPmVxJ+QPg1ct/3tAURN/D40GYw9ojDhqmdSl4HW4d6gHS2lYzSFeU5jkG49y5nirOOoEgHy95wghkh6BfpwHujYJGw4",
|
|
"secret": "2588b80d5cb05374fa142aed6cbb047d1f4ef8ef15e37eba68c65b9d30df67ed",
|
|
"leave_on_shutdown": true,
|
|
"listen_multiaddress": "/ip4/127.0.0.1/tcp/10000",
|
|
"state_sync_interval": "1m0s",
|
|
"ipfs_sync_interval": "2m10s",
|
|
"replication_factor_min": 5,
|
|
"replication_factor_max": 5,
|
|
"monitor_ping_interval": "2s",
|
|
"disable_repinning": true
|
|
}
|
|
`)
|
|
|
|
func TestLoadJSON(t *testing.T) {
|
|
loadJSON := func(t *testing.T) (*Config, error) {
|
|
cfg := &Config{}
|
|
err := cfg.LoadJSON(ccfgTestJSON)
|
|
if err != nil {
|
|
return cfg, err
|
|
}
|
|
return cfg, nil
|
|
}
|
|
|
|
t.Run("basic", func(t *testing.T) {
|
|
cfg := &Config{}
|
|
err := cfg.LoadJSON(ccfgTestJSON)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
})
|
|
|
|
t.Run("peername", func(t *testing.T) {
|
|
cfg, err := loadJSON(t)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if cfg.Peername != "testpeer" {
|
|
t.Error("expected peername 'testpeer'")
|
|
}
|
|
})
|
|
|
|
t.Run("expected replication factor", func(t *testing.T) {
|
|
cfg, err := loadJSON(t)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if cfg.ReplicationFactorMin != 5 {
|
|
t.Error("expected replication factor min == 5")
|
|
}
|
|
})
|
|
|
|
t.Run("expected disable_repinning", func(t *testing.T) {
|
|
cfg, err := loadJSON(t)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if !cfg.DisableRepinning {
|
|
t.Error("expected disable_repinning to be true")
|
|
}
|
|
})
|
|
|
|
loadJSON2 := func(t *testing.T, f func(j *configJSON)) (*Config, error) {
|
|
cfg := &Config{}
|
|
j := &configJSON{}
|
|
json.Unmarshal(ccfgTestJSON, j)
|
|
f(j)
|
|
tst, err := json.Marshal(j)
|
|
if err != nil {
|
|
return cfg, err
|
|
}
|
|
err = cfg.LoadJSON(tst)
|
|
if err != nil {
|
|
return cfg, err
|
|
}
|
|
return cfg, nil
|
|
}
|
|
|
|
t.Run("bad id", func(t *testing.T) {
|
|
_, err := loadJSON2(t, func(j *configJSON) { j.ID = "abc" })
|
|
if err == nil {
|
|
t.Error("expected error decoding ID")
|
|
}
|
|
})
|
|
|
|
t.Run("empty default peername", func(t *testing.T) {
|
|
cfg, err := loadJSON2(t, func(j *configJSON) { j.Peername = "" })
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if cfg.Peername == "" {
|
|
t.Error("expected default peername")
|
|
}
|
|
})
|
|
|
|
t.Run("bad private key", func(t *testing.T) {
|
|
_, err := loadJSON2(t, func(j *configJSON) { j.PrivateKey = "abc" })
|
|
if err == nil {
|
|
t.Error("expected error parsing private key")
|
|
}
|
|
})
|
|
|
|
t.Run("bad listen multiaddress", func(t *testing.T) {
|
|
_, err := loadJSON2(t, func(j *configJSON) { j.ListenMultiaddress = "abc" })
|
|
if err == nil {
|
|
t.Error("expected error parsing listen_multiaddress")
|
|
}
|
|
})
|
|
|
|
t.Run("bad secret", func(t *testing.T) {
|
|
_, err := loadJSON2(t, func(j *configJSON) { j.Secret = "abc" })
|
|
if err == nil {
|
|
t.Error("expected error decoding secret")
|
|
}
|
|
})
|
|
|
|
t.Run("default replication factors", func(t *testing.T) {
|
|
cfg, err := loadJSON2(
|
|
t,
|
|
func(j *configJSON) {
|
|
j.ReplicationFactorMin = 0
|
|
j.ReplicationFactorMax = 0
|
|
},
|
|
)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if cfg.ReplicationFactorMin != -1 || cfg.ReplicationFactorMax != -1 {
|
|
t.Error("expected default replication factor")
|
|
}
|
|
})
|
|
|
|
t.Run("only replication factor min set to -1", func(t *testing.T) {
|
|
_, err := loadJSON2(t, func(j *configJSON) { j.ReplicationFactorMin = -1 })
|
|
if err == nil {
|
|
t.Error("expected error when only one replication factor is -1")
|
|
}
|
|
})
|
|
|
|
t.Run("replication factor min > max", func(t *testing.T) {
|
|
_, err := loadJSON2(
|
|
t,
|
|
func(j *configJSON) {
|
|
j.ReplicationFactorMin = 5
|
|
j.ReplicationFactorMax = 4
|
|
},
|
|
)
|
|
if err == nil {
|
|
t.Error("expected error when only rplMin > rplMax")
|
|
}
|
|
})
|
|
|
|
t.Run("default replication factor", func(t *testing.T) {
|
|
cfg, err := loadJSON2(
|
|
t,
|
|
func(j *configJSON) {
|
|
j.ReplicationFactorMin = 0
|
|
j.ReplicationFactorMax = 0
|
|
},
|
|
)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if cfg.ReplicationFactorMin != -1 || cfg.ReplicationFactorMax != -1 {
|
|
t.Error("expected default replication factors")
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestToJSON(t *testing.T) {
|
|
cfg := &Config{}
|
|
cfg.LoadJSON(ccfgTestJSON)
|
|
newjson, err := cfg.ToJSON()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
cfg = &Config{}
|
|
err = cfg.LoadJSON(newjson)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func TestDefault(t *testing.T) {
|
|
cfg := &Config{}
|
|
cfg.Default()
|
|
if err := cfg.Validate(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func TestApplyEnvVars(t *testing.T) {
|
|
os.Setenv("CLUSTER_PEERNAME", "envsetpeername")
|
|
cfg := &Config{}
|
|
cfg.Default()
|
|
cfg.ApplyEnvVars()
|
|
if cfg.Peername != "envsetpeername" {
|
|
t.Fatal("failed to override peername with env var")
|
|
}
|
|
}
|
|
|
|
func TestValidate(t *testing.T) {
|
|
cfg := &Config{}
|
|
cfg.Default()
|
|
cfg.ID = ""
|
|
if cfg.Validate() == nil {
|
|
t.Fatal("expected error validating")
|
|
}
|
|
|
|
cfg.Default()
|
|
cfg.MonitorPingInterval = 0
|
|
if cfg.Validate() == nil {
|
|
t.Fatal("expected error validating")
|
|
}
|
|
|
|
cfg.Default()
|
|
cfg.ReplicationFactorMin = 10
|
|
cfg.ReplicationFactorMax = 5
|
|
if cfg.Validate() == nil {
|
|
t.Fatal("expected error validating")
|
|
}
|
|
|
|
cfg.Default()
|
|
cfg.ReplicationFactorMin = 0
|
|
if cfg.Validate() == nil {
|
|
t.Fatal("expected error validating")
|
|
}
|
|
}
|