Config file reading/writing.

This commit is contained in:
Andrey Smirnov
2013-12-27 19:31:32 +04:00
parent e5712f9745
commit a7fb971905
2 changed files with 97 additions and 0 deletions

47
utils/config.go Normal file
View File

@@ -0,0 +1,47 @@
package utils
import (
"encoding/json"
"os"
)
// ConfigStructure is structure of main configuration
type ConfigStructure struct {
RootDir string `json:"rootDir"`
DownloadConcurrency int `json:"downloadConcurrency"`
}
// Config is configuration for aptly, shared by all modules
var Config = ConfigStructure{
RootDir: "/var/aptly",
DownloadConcurrency: 4,
}
// LoadConfig loads configuration from json file
func LoadConfig(filename string, config *ConfigStructure) error {
f, err := os.Open(filename)
if err != nil {
return err
}
defer f.Close()
dec := json.NewDecoder(f)
return dec.Decode(&config)
}
// SaveConfig write configuration to json file
func SaveConfig(filename string, config *ConfigStructure) error {
f, err := os.Create(filename)
if err != nil {
return err
}
defer f.Close()
encoded, err := json.MarshalIndent(&config, "", " ")
if err != nil {
return err
}
_, err = f.Write(encoded)
return err
}

50
utils/config_test.go Normal file
View File

@@ -0,0 +1,50 @@
package utils
import (
. "launchpad.net/gocheck"
"os"
"path/filepath"
)
type ConfigSuite struct {
config ConfigStructure
}
var _ = Suite(&ConfigSuite{})
func (s *ConfigSuite) TestLoadConfig(c *C) {
configname := filepath.Join(c.MkDir(), "aptly.json")
f, _ := os.Create(configname)
f.WriteString(configFile)
f.Close()
err := LoadConfig(configname, &s.config)
c.Assert(err, IsNil)
c.Check(s.config.RootDir, Equals, "/opt/aptly/")
c.Check(s.config.DownloadConcurrency, Equals, 33)
}
func (s *ConfigSuite) TestSaveConfig(c *C) {
configname := filepath.Join(c.MkDir(), "aptly.json")
s.config.RootDir = "/tmp/aptly"
s.config.DownloadConcurrency = 5
err := SaveConfig(configname, &s.config)
c.Assert(err, IsNil)
f, _ := os.Open(configname)
defer f.Close()
st, _ := f.Stat()
buf := make([]byte, st.Size())
f.Read(buf)
c.Check(string(buf), Equals, ""+
"{\n"+
" \"rootDir\": \"/tmp/aptly\",\n"+
" \"downloadConcurrency\": 5\n"+
"}")
}
const configFile = `{"rootDir": "/opt/aptly/", "downloadConcurrency": 33}`