Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
_obj
_test
.idea
vendor

# Architecture specific extensions/prefixes
*.[568vq]
Expand All @@ -28,3 +29,6 @@ _testmain.go
# Created by .ignore support plugin (hsz.mobi)

dockerize

# Test coverage related files
coverage.out
4 changes: 4 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,27 @@ require (
github.com/Masterminds/sprig/v3 v3.3.0
github.com/hpcloud/tail v1.0.0
github.com/jwilder/gojq v0.0.0-20161018055142-c550732d4a52
github.com/stretchr/testify v1.11.1
golang.org/x/net v0.48.0
)

require (
dario.cat/mergo v1.0.2 // indirect
github.com/Masterminds/goutils v1.1.1 // indirect
github.com/Masterminds/semver/v3 v3.4.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/elgs/gosplitargs v0.0.0-20241205072753-cbd889c0f906 // indirect
github.com/fsnotify/fsnotify v1.9.0 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/huandu/xstrings v1.5.0 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/shopspring/decimal v1.4.0 // indirect
github.com/spf13/cast v1.9.2 // indirect
golang.org/x/crypto v0.46.0 // indirect
golang.org/x/sys v0.39.0 // indirect
gopkg.in/fsnotify.v1 v1.4.7 // indirect
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
6 changes: 4 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,16 @@ github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp
github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME=
github.com/spf13/cast v1.9.2 h1:SsGfm7M8QOFtEzumm7UZrZdLLquNdzFYfIbEXntcFbE=
github.com/spf13/cast v1.9.2/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU=
golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0=
golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU=
golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY=
golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=
golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
Expand Down
148 changes: 148 additions & 0 deletions main_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
package main

import (
"os"
"testing"

"github.com/stretchr/testify/assert"
)

func TestMain(m *testing.M) {
os.Exit(m.Run())
}

func TestSliceVarString(t *testing.T) {
var sv sliceVar
sv.Set("test1")
sv.Set("test2")
result := sv.String()
assert.Equal(t, "test1,test2", result)
}

func TestHostFlagsVarString(t *testing.T) {
var hf hostFlagsVar
hf.Set("host1")
hf.Set("host2")
result := hf.String()
assert.Equal(t, "[host1 host2]", result)
}

func TestExists(t *testing.T) {
tempFile, err := os.CreateTemp("", "test-exists")
assert.NoError(t, err)
defer os.Remove(tempFile.Name())

existsResult, err := exists(tempFile.Name())
assert.NoError(t, err)
assert.True(t, existsResult)

nonExisting := "/path/that/does/not/exist"
existsResult, err = exists(nonExisting)
assert.NoError(t, err)
assert.False(t, existsResult)
}

func TestContains(t *testing.T) {
testMap := map[string]string{
"key1": "value1",
"key2": "value2",
}

assert.True(t, contains(testMap, "key1"))
assert.True(t, contains(testMap, "key2"))
assert.False(t, contains(testMap, "key3"))
}

func TestDefaultValue(t *testing.T) {
result, err := defaultValue("test-value")
assert.NoError(t, err)
assert.Equal(t, "test-value", result)

result, err = defaultValue("test-value", "default-value")
assert.NoError(t, err)
assert.Equal(t, "test-value", result)

result, err = defaultValue(nil, "default-value")
assert.NoError(t, err)
assert.Equal(t, "default-value", result)

_, err = defaultValue(nil, nil)
assert.Error(t, err)

_, err = defaultValue()
assert.Error(t, err)
}

func TestParseUrl(t *testing.T) {
url := parseUrl("http://example.com/path")
assert.Equal(t, "http", url.Scheme)
assert.Equal(t, "example.com", url.Host)
assert.Equal(t, "/path", url.Path)

url = parseUrl("https://api.example.com:8080/v1/users")
assert.Equal(t, "https", url.Scheme)
assert.Equal(t, "api.example.com:8080", url.Host)
assert.Equal(t, "/v1/users", url.Path)
}

func TestAdd(t *testing.T) {
result := add(5, 3)
assert.Equal(t, 8, result)

result = add(-1, 1)
assert.Equal(t, 0, result)

result = add(0, 0)
assert.Equal(t, 0, result)
}

func TestIsTrue(t *testing.T) {
assert.True(t, isTrue("true"))
assert.True(t, isTrue("TRUE"))
assert.True(t, isTrue("1"))
assert.True(t, isTrue("yes"))
assert.True(t, isTrue("on"))

assert.False(t, isTrue("false"))
assert.False(t, isTrue("FALSE"))
assert.False(t, isTrue("0"))
assert.False(t, isTrue("no"))
assert.False(t, isTrue("off"))
assert.False(t, isTrue(""))
assert.False(t, isTrue("invalid"))
}

func TestLoop(t *testing.T) {
ch, err := loop(3)
assert.NoError(t, err)

var result []int
for i := range ch {
result = append(result, i)
}
assert.Equal(t, []int{0, 1, 2}, result)

ch, err = loop(2, 5)
assert.NoError(t, err)

result = []int{}
for i := range ch {
result = append(result, i)
}
assert.Equal(t, []int{2, 3, 4}, result)

ch, err = loop(0, 10, 2)
assert.NoError(t, err)

result = []int{}
for i := range ch {
result = append(result, i)
}
assert.Equal(t, []int{0, 2, 4, 6, 8}, result)

_, err = loop()
assert.Error(t, err)

_, err = loop(1, 2, 3, 4)
assert.Error(t, err)
}
16 changes: 12 additions & 4 deletions template.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,11 +72,19 @@ func add(arg1, arg2 int) int {
}

func isTrue(s string) bool {
b, err := strconv.ParseBool(strings.ToLower(s))
if err == nil {
return b
lower := strings.ToLower(s)
switch lower {
case "true", "1", "yes", "on":
return true
case "false", "0", "no", "off":
return false
default:
b, err := strconv.ParseBool(lower)
if err == nil {
return b
}
return false
}
return false
}

func jsonQuery(jsonObj string, query string) (interface{}, error) {
Expand Down