From f59e59c029a0332e7fd63e0cd5ea7fb30eb7d991 Mon Sep 17 00:00:00 2001 From: Shulhan Date: Mon, 15 May 2023 20:37:59 +0700 Subject: all: add function loadConfig The loadConfig load the configuration from raw bytes. This replace part of newConfig with loadConfig to minimize duplicate. The idea of loadConfig is to simplify testing later. --- config.go | 39 ++++++++++++++++++++++++++------------- config_test.go | 7 +++++++ 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/config.go b/config.go index f5feb9e..813c222 100644 --- a/config.go +++ b/config.go @@ -33,33 +33,46 @@ func newConfig(file string) (cfg *config, err error) { var ( logp = `newConfig` - in *ini.Ini - dir string + content []byte + isNotExist bool ) - cfg = &config{ - Issuers: make(map[string]string), - file: file, - } - - in, err = ini.Open(file) + content, err = os.ReadFile(file) if err != nil { if !errors.Is(err, fs.ErrNotExist) { return nil, fmt.Errorf(`%s: Open %q: %w`, logp, file, err) } - cfg.isNotExist = true + isNotExist = true } - if cfg.isNotExist { - dir = filepath.Dir(file) + if isNotExist { + var dir = filepath.Dir(file) err = os.MkdirAll(dir, 0700) if err != nil { return nil, fmt.Errorf(`%s: MkdirAll %q: %w`, logp, dir, err) } - return cfg, nil } - err = in.Unmarshal(cfg) + cfg, err = loadConfig(content) + if err != nil { + return nil, fmt.Errorf(`%s: %w`, logp, err) + } + + cfg.isNotExist = isNotExist + cfg.file = file + + return cfg, nil +} + +// loadConfig load configuration from raw bytes. +func loadConfig(content []byte) (cfg *config, err error) { + var logp = `loadConfig` + + cfg = &config{ + Issuers: make(map[string]string), + } + + err = ini.Unmarshal(content, cfg) if err != nil { return nil, fmt.Errorf(`%s: %w`, logp, err) } diff --git a/config_test.go b/config_test.go index 772ea1e..c0b1993 100644 --- a/config_test.go +++ b/config_test.go @@ -18,6 +18,13 @@ func TestNewConfig(t *testing.T) { } var cases = []testCase{{ + desc: `With file not exist`, + configFile: `testdata/config-not-exist`, + expConfig: &config{ + file: `testdata/config-not-exist`, + isNotExist: true, + }, + }, { desc: `With openssh rsa`, configFile: `testdata/rsa.conf`, expConfig: &config{ -- cgit v1.3