Skip to content

Commit

Permalink
Add --configDir global flag
Browse files Browse the repository at this point in the history
  • Loading branch information
fisuda committed Dec 11, 2021
1 parent babf9fc commit 38d96b4
Show file tree
Hide file tree
Showing 13 changed files with 514 additions and 41 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
## NGSI Go v0.9.0-next

- Hardening: Add --configDir global flag (#207)
- Hardening: Add feature to support OpenID for Keyrock (#206)
- Update: Update docker images (#205)
- Improve: Add --serial flag to print serial value as NGSI Go version (#204)
Expand Down
19 changes: 10 additions & 9 deletions docs/global.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
# Global Options

| Options | Description |
| -------------- | ------------------------------------------------ |
| --syslog LEVEL | specify logging LEVEL (off, err, info, debug) |
| --stderr LEVEL | specify logging LEVEL (off, err, info, debug) |
| --config FILE | specify configuration FILE |
| --cache FILE | specify cache FILE |
| --batch, -B | don't use previous args (batch) (default: false) |
| --help | show help (default: false) |
| --version, -v | print the version (default: false) |
| Options | Description |
| --------------- | ------------------------------------------------ |
| --syslog LEVEL | syslog logging LEVEL (off, err, info, debug) |
| --stderr LEVEL | stderr logging LEVEL (off, err, info, debug) |
| --configDir DIR | configuration DIR name |
| --config FILE | configuration FILE name |
| --cache FILE | cache FILE name |
| --batch, -B | don't use previous args (batch) (default: false) |
| --help | show help (default: false) |
| --version, -v | print the version (default: false) |

## syslog

Expand Down
1 change: 1 addition & 0 deletions e2e/cases/1000_common/0001_ngsi.test
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ COMMANDS:
GLOBAL OPTIONS:
--syslog LEVEL syslog logging LEVEL (off, err, info, debug)
--stderr LEVEL stderr logging LEVEL (err, info, debug)
--configDir DIR configuration DIR name
--config FILE configuration FILE name
--cache FILE cache FILE name
--batch, -B don't use previous args (batch) (default: false)
Expand Down
230 changes: 230 additions & 0 deletions e2e/cases/1000_common/0003_help.test

Large diffs are not rendered by default.

138 changes: 138 additions & 0 deletions e2e/cases/1000_common/1002_config.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
# MIT License
#
# Copyright (c) 2020-2021 Kazuhito Suda
#
# This file is part of NGSI Go
#
# https://github.com/lets-fiware/ngsi-go
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.

#
# 0000 settings clear
#
ngsi settings clear

```
```

#
# 0001 --config /tmp/a broker add
#
ngsi --config /tmp/a broker add --host orion --ngsiType v2 --brokerHost http://localhost:1026

```
```

#
# 0002 --config /tmp/a broker get
#
ngsi --config /tmp/a broker get --host orion

```
brokerHost http://localhost:1026
ngsiType v2
```

#
# 0011 --cache /tmp/b broker list
#
ngsi --cache /tmp/b broker list

```
orion orion-ld
```

#
# 0012 --cache /tmp/b version --host orion
#
ngsi --cache /tmp/b version --host orion

```
{
"orion" : {
"version" : "REGEX(.*)",
"uptime" : "REGEX(.*)",
"git_hash" : "REGEX(.*)",
"compile_time" : "REGEX(.*)",
"compiled_by" : "root",
"compiled_in" : "REGEX(.*)",
"release_date" : "REGEX(.*)",
"machine" : "x86_64",
"doc" : "https://fiware-orion.rtfd.io/en/REGEX(.*)/",
"libversions": {
"boost": "REGEX(.*)",
"libcurl": "REGEX(.*)",
"libmosquitto": "REGEX(.*)",
"libmicrohttpd": "REGEX(.*)",
"openssl": "REGEX(.*)",
"rapidjson": "REGEX(.*)",
"mongoc": "REGEX(.*)",
"bson": "REGEX(.*)"
}
}
}
```

#
# 0021 --configDir /tmp/configdir broker add
#
ngsi --configDir /tmp/configdir broker add --host orion --ngsiType v2 --brokerHost http://orion:1026

```
```

#
# 0022 --configDir /tmp/configdir version --host orion
#
ngsi --configDir /tmp/configdir version --host orion

```
{
"orion" : {
"version" : "REGEX(.*)",
"uptime" : "REGEX(.*)",
"git_hash" : "REGEX(.*)",
"compile_time" : "REGEX(.*)",
"compiled_by" : "root",
"compiled_in" : "REGEX(.*)",
"release_date" : "REGEX(.*)",
"machine" : "x86_64",
"doc" : "https://fiware-orion.rtfd.io/en/REGEX(.*)/",
"libversions": {
"boost": "REGEX(.*)",
"libcurl": "REGEX(.*)",
"libmosquitto": "REGEX(.*)",
"libmicrohttpd": "REGEX(.*)",
"openssl": "REGEX(.*)",
"rapidjson": "REGEX(.*)",
"mongoc": "REGEX(.*)",
"bson": "REGEX(.*)"
}
}
}
```

#
# 9999 settings clear
#
ngsi settings clear

```
```
5 changes: 5 additions & 0 deletions internal/ngsicli/common_flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ package ngsicli
var GlobalFlags = []Flag{
SyslogFlag,
StderrFlag,
ConfigDirFlag,
ConfigFlag,
CacheFlag,
MarginFlag,
Expand All @@ -54,6 +55,10 @@ var (
Usage: "stderr logging `LEVEL` (err, info, debug)",
Choices: []string{"off", "err", "info", "debug"},
}
ConfigDirFlag = &StringFlag{
Name: "configDir",
Usage: "configuration `DIR` name",
}
ConfigFlag = &StringFlag{
Name: "config",
Usage: "configuration `FILE` name",
Expand Down
4 changes: 4 additions & 0 deletions internal/ngsicli/helper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -687,6 +687,10 @@ var (
Name: "stderr",
Usage: "specify logging `LEVEL` (off, err, info, debug)",
}
configDirFlag = &StringFlag{
Name: "configDir",
Usage: "configuration `DIR` name",
}
configFlag = &StringFlag{
Name: "config",
Usage: "specify configuration `FILE`",
Expand Down
15 changes: 11 additions & 4 deletions internal/ngsicli/initcmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,27 +49,34 @@ func InitCmd(c *Context) (*ngsilib.NGSI, error) {
ngsi.BatchFlag = &b
}

if c.IsSet("configDir") && (c.IsSet("config") || c.IsSet("cache")) {
return nil, ngsierr.New(funcName, 1, "configDir cannot be specified with config or cache at the same time", nil)
}
var file *string
if c.IsSet("config") {
s := c.String("config")
file = &s
}
if c.IsSet("configDir") {
s := c.String("configDir")
ngsi.ConfigDir = &s
}

err := ngsi.InitConfig(file)
if err != nil {
return nil, ngsierr.New(funcName, 1, err.Error(), err)
return nil, ngsierr.New(funcName, 2, err.Error(), err)
}

prevArgs := ngsi.GetPreviousArgs()

err = initStdErrOption(ngsi, c, prevArgs)
if err != nil {
return nil, ngsierr.New(funcName, 2, err.Error(), err)
return nil, ngsierr.New(funcName, 3, err.Error(), err)
}

err = initSyslogOption(ngsi, c, prevArgs)
if err != nil {
return nil, ngsierr.New(funcName, 3, err.Error(), err)
return nil, ngsierr.New(funcName, 4, err.Error(), err)
}

initHiddenOptions(ngsi, c)
Expand All @@ -81,7 +88,7 @@ func InitCmd(c *Context) (*ngsilib.NGSI, error) {
tokenCache := initCacheFileOption(ngsi, c, prevArgs)
err = ngsi.InitTokenMgr(tokenCache)
if err != nil {
return nil, ngsierr.New(funcName, 4, err.Error(), err)
return nil, ngsierr.New(funcName, 5, err.Error(), err)
}

return ngsi, nil
Expand Down
72 changes: 68 additions & 4 deletions internal/ngsicli/initcmd_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,22 @@ func TestInitCmdBatchFlagFalse(t *testing.T) {
}
}

func TestInitCmdConfigDir(t *testing.T) {
_ = setupTestInitNGSI()

f := configDirFlag.Copy(true)
err := f.SetValue("/tmp")
assert.NoError(t, err)

c := &Context{Flags: []Flag{f}}

ngsi, err := InitCmd(c)

if assert.NoError(t, err) {
assert.Equal(t, "/tmp/ngsi-go-config.json", *ngsi.ConfigFile.FileName())
}
}

func TestInitCmdConfig(t *testing.T) {
_ = setupTestInitNGSI()

Expand Down Expand Up @@ -130,6 +146,54 @@ func TestInitCmdinsecureSkipVerifyFlagTrue(t *testing.T) {
}
}

func TestInitCmdErrorConfigDirConfig(t *testing.T) {
_ = setupTestInitNGSI()

var err error

f1 := configDirFlag.Copy(true)
err = f1.SetValue("/tmp")
assert.NoError(t, err)

f2 := configFlag.Copy(true)
err = f2.SetValue("config")
assert.NoError(t, err)

c := &Context{Flags: []Flag{f1, f2}}

_, err = InitCmd(c)

if assert.Error(t, err) {
ngsiErr := err.(*ngsierr.NgsiError)
assert.Equal(t, 1, ngsiErr.ErrNo)
assert.Equal(t, "configDir cannot be specified with config or cache at the same time", ngsiErr.Message)
}
}

func TestInitCmdErrorConfigDirCache(t *testing.T) {
_ = setupTestInitNGSI()

var err error

f1 := configDirFlag.Copy(true)
err = f1.SetValue("/tmp")
assert.NoError(t, err)

f2 := cacheFlag.Copy(true)
err = f2.SetValue("config")
assert.NoError(t, err)

c := &Context{Flags: []Flag{f1, f2}}

_, err = InitCmd(c)

if assert.Error(t, err) {
ngsiErr := err.(*ngsierr.NgsiError)
assert.Equal(t, 1, ngsiErr.ErrNo)
assert.Equal(t, "configDir cannot be specified with config or cache at the same time", ngsiErr.Message)
}
}

func TestInitCmdErrorInitConfig(t *testing.T) {
ngsi := setupTestInitNGSI()

Expand All @@ -140,7 +204,7 @@ func TestInitCmdErrorInitConfig(t *testing.T) {

if assert.Error(t, err) {
ngsiErr := err.(*ngsierr.NgsiError)
assert.Equal(t, 1, ngsiErr.ErrNo)
assert.Equal(t, 2, ngsiErr.ErrNo)
assert.Equal(t, "InitConfig error", ngsiErr.Message)
}
}
Expand All @@ -158,7 +222,7 @@ func TestInitCmdErrorInitStdErrOption(t *testing.T) {

if assert.Error(t, err) {
ngsiErr := err.(*ngsierr.NgsiError)
assert.Equal(t, 2, ngsiErr.ErrNo)
assert.Equal(t, 3, ngsiErr.ErrNo)
assert.Equal(t, "stderr logLevel error", ngsiErr.Message)
}
}
Expand All @@ -176,7 +240,7 @@ func TestInitCmdErrorInitSyslogOption(t *testing.T) {

if assert.Error(t, err) {
ngsiErr := err.(*ngsierr.NgsiError)
assert.Equal(t, 3, ngsiErr.ErrNo)
assert.Equal(t, 4, ngsiErr.ErrNo)
assert.Equal(t, "syslog logLevel error", ngsiErr.Message)
}
}
Expand All @@ -192,7 +256,7 @@ func TestInitCmdErrorInitTokenMgr(t *testing.T) {

if assert.Error(t, err) {
ngsiErr := err.(*ngsierr.NgsiError)
assert.Equal(t, 4, ngsiErr.ErrNo)
assert.Equal(t, 5, ngsiErr.ErrNo)
assert.Equal(t, "InitTOkenMgr error", ngsiErr.Message)
}
}
Expand Down
2 changes: 1 addition & 1 deletion internal/ngsilib/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ func initConfig(ngsi *NGSI, io IoLib) error {
saveFlag := false

if io.FileName() == nil {
home, err := getConfigDir(io)
home, err := getConfigDir(ngsi.ConfigDir, io)
if err != nil {
return ngsierr.New(funcName, 1, err.Error(), err)
}
Expand Down
Loading

0 comments on commit 38d96b4

Please sign in to comment.