Merge pull request #659 from ipfs/fix/update-json-config

Fix/update json config
This commit is contained in:
Hector Sanjuan 2019-02-06 22:43:51 +00:00 committed by GitHub
commit 4324889c79
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 123 additions and 12 deletions

View File

@ -178,26 +178,26 @@ type jsonConfig struct {
Observations jsonSection `json:"observations,omitempty"`
}
func (jcfg *jsonConfig) getSection(i SectionType) jsonSection {
func (jcfg *jsonConfig) getSection(i SectionType) *jsonSection {
switch i {
case Consensus:
return jcfg.Consensus
return &jcfg.Consensus
case API:
return jcfg.API
return &jcfg.API
case IPFSConn:
return jcfg.IPFSConn
return &jcfg.IPFSConn
case State:
return jcfg.State
return &jcfg.State
case PinTracker:
return jcfg.PinTracker
return &jcfg.PinTracker
case Monitor:
return jcfg.Monitor
return &jcfg.Monitor
case Allocator:
return jcfg.Allocator
return &jcfg.Allocator
case Informer:
return jcfg.Informer
return &jcfg.Informer
case Observations:
return jcfg.Observations
return &jcfg.Observations
default:
return nil
}
@ -356,7 +356,7 @@ func (cfg *Manager) LoadJSON(bs []byte) error {
if t == Cluster {
continue
}
err := loadSectionJSON(sections[t], jcfg.getSection(t))
err := loadSectionJSON(sections[t], *jcfg.getSection(t))
if err != nil {
return err
}
@ -445,7 +445,7 @@ func (cfg *Manager) ToJSON() ([]byte, error) {
continue
}
jsection := jcfg.getSection(t)
err := updateJSONConfigs(cfg.sections[t], &jsection)
err := updateJSONConfigs(cfg.sections[t], jsection)
if err != nil {
return nil, err
}

111
config/config_test.go Normal file
View File

@ -0,0 +1,111 @@
// Package config provides interfaces and utilities for different Cluster
// components to register, read, write and validate configuration sections
// stored in a central configuration file.
package config_test
import (
"bytes"
"testing"
"github.com/ipfs/ipfs-cluster/config"
)
type mockCfg struct {
config.Saver
}
func (m *mockCfg) ConfigKey() string {
return "mock"
}
func (m *mockCfg) LoadJSON([]byte) error {
return nil
}
func (m *mockCfg) ToJSON() ([]byte, error) {
return []byte(`{"a":"b"}`), nil
}
func (m *mockCfg) Default() error {
return nil
}
func (m *mockCfg) Validate() error {
return nil
}
func setupConfigManager() *config.Manager {
cfg := config.NewManager()
mockCfg := &mockCfg{}
cfg.RegisterComponent(config.Cluster, mockCfg)
for _, sect := range config.SectionTypes() {
cfg.RegisterComponent(sect, mockCfg)
}
return cfg
}
func TestManager_ToJSON(t *testing.T) {
want := []byte(`{
"cluster": {
"a": "b"
},
"consensus": {
"mock": {
"a": "b"
}
},
"api": {
"mock": {
"a": "b"
}
},
"ipfs_connector": {
"mock": {
"a": "b"
}
},
"state": {
"mock": {
"a": "b"
}
},
"pin_tracker": {
"mock": {
"a": "b"
}
},
"monitor": {
"mock": {
"a": "b"
}
},
"allocator": {
"mock": {
"a": "b"
}
},
"informer": {
"mock": {
"a": "b"
}
},
"observations": {
"mock": {
"a": "b"
}
}
}`)
cfgMgr := setupConfigManager()
err := cfgMgr.Default()
if err != nil {
t.Fatal(err)
}
got, err := cfgMgr.ToJSON()
if err != nil {
t.Error(err)
}
if !bytes.Equal(got, want) {
t.Errorf("mismatch between got: %s and want: %s", got, want)
}
}