Skip to content

Commit

Permalink
more tests
Browse files Browse the repository at this point in the history
  • Loading branch information
guumaster committed Apr 25, 2020
1 parent 6b11e67 commit 89ef61c
Show file tree
Hide file tree
Showing 5 changed files with 168 additions and 3 deletions.
2 changes: 1 addition & 1 deletion pkg/docker/compose.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ func ParseComposeFile(r io.Reader, projectName string) ([]string, error) {

err = yaml.Unmarshal(bytes, &data)
if err != nil {
return nil, err
return nil, fmt.Errorf("error parsing docker-compose content: %w", err)
}

var containers []string
Expand Down
43 changes: 43 additions & 0 deletions pkg/docker/compose_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package docker

import (
"sort"
"strings"
"testing"

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

func TestParseComposeFile(t *testing.T) {
var composeFile = `
version: "3"
services:
container1:
image: some_image:3.5
networks:
- networkName1
container2:
image: some_other_image:1.0
networks:
- networkName1
another-thing:
container_name: db
image: db:1.0
networks:
- networkName1
networks:
networkName1:
`

r := strings.NewReader(composeFile)
containers, err := ParseComposeFile(r, "test")
assert.NoError(t, err)

sort.Strings(containers)

assert.EqualValues(t, []string{"db", "test_container1", "test_container2"}, containers)
}
82 changes: 82 additions & 0 deletions pkg/docker/docker_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package docker

import (
"bytes"
"context"
"io/ioutil"
"net/http"
"testing"

"github.com/docker/docker/api/types"
"github.com/docker/docker/client"
"github.com/stretchr/testify/assert"
)

func TestGetContainerList(t *testing.T) {
cli := newClientWithResponse(t, map[string]string{
"/v1.22/networks": `[
{"Id": "networkId1", "Name": "networkName1" },
{"Id": "networkId2", "Name": "networkName2" }
]`,
"/v1.22/containers/json": `[{
"Id": "container_id1", "Names": ["container1"],
"NetworkSettings": { "Networks": { "networkName1": { "NetworkID": "networkID1", "IPAddress": "172.0.0.2" }}}
}, {
"Id": "container_id2", "Names": ["container2"],
"NetworkSettings": { "Networks": { "networkName1": { "NetworkID": "networkID1", "IPAddress": "172.0.0.3" }}}
}]`,
})

list, err := GetContainerList(context.Background(), cli, "")
assert.NoError(t, err)

assert.Len(t, list, 2)

assert.IsType(t, types.Container{}, list[0])
assert.IsType(t, types.Container{}, list[1])
assert.Equal(t, "networkID1", list[1].NetworkSettings.Networks["networkName1"].NetworkID)

assert.Equal(t, types.Container{
ID: "container_id1",
Names: []string{"container1"},

NetworkSettings: list[0].NetworkSettings, // simplify the comparison
}, list[0])
assert.Equal(t, types.Container{
ID: "container_id2",
Names: []string{"container2"},

NetworkSettings: list[1].NetworkSettings, // simplify the comparison
}, list[1])
}

type transportFunc func(*http.Request) (*http.Response, error)

func (tf transportFunc) RoundTrip(req *http.Request) (*http.Response, error) {
return tf(req)
}

func newClientWithResponse(t *testing.T, resp map[string]string) *client.Client {
t.Helper()

v := "1.22"
c, err := client.NewClient("tcp:https://fake:2345", v,
&http.Client{
Transport: transportFunc(func(req *http.Request) (*http.Response, error) {
url := req.URL.Path
b, ok := resp[url]
if !ok {
b = "{}"
}
return &http.Response{
StatusCode: http.StatusOK,
Body: ioutil.NopCloser(bytes.NewReader([]byte(b))),
}, nil
}),
},
map[string]string{})

assert.NoError(t, err)

return c
}
30 changes: 28 additions & 2 deletions pkg/file/enable_disable_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,8 @@ import (
"github.com/guumaster/hostctl/pkg/types"
)

func TestFile_Enable(t *testing.T) {
func TestFile_EnableDisable(t *testing.T) {
mem := createBasicFS(t)

f, err := mem.Open("/tmp/etc/hosts")
assert.NoError(t, err)

Expand Down Expand Up @@ -43,4 +42,31 @@ func TestFile_Enable(t *testing.T) {
err = m.Enable([]string{"unknown"})
assert.EqualError(t, err, types.ErrUnknownProfile.Error())
})

t.Run("Disable", func(t *testing.T) {
err = m.Disable([]string{"profile2"})
assert.NoError(t, err)
assert.Contains(t, m.GetDisabled(), "profile2")
})

t.Run("Disable Only", func(t *testing.T) {
err = m.Disable([]string{"profile1", "profile2"})
err = m.DisableOnly([]string{"default", "profile2"})
assert.NoError(t, err)
assert.Contains(t, m.GetEnabled(), "profile1")
assert.Contains(t, m.GetDisabled(), "profile2")
})

t.Run("Disable All", func(t *testing.T) {
err = m.DisableAll()
assert.NoError(t, err)
Disabled := m.GetDisabled()
assert.Contains(t, Disabled, "profile1")
assert.Contains(t, Disabled, "profile2")
})

t.Run("Disable error", func(t *testing.T) {
err = m.Disable([]string{"unknown"})
assert.EqualError(t, err, types.ErrUnknownProfile.Error())
})
}
14 changes: 14 additions & 0 deletions pkg/profile/reader_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,18 @@ func TestNewProfile(t *testing.T) {
assert.NoError(t, err)
assert.Equal(t, []string{"some.profile.loc", "first.loc"}, hosts)
})

t.Run("NewProfileFromReader non-uniq", func(t *testing.T) {
r := strings.NewReader(`
3.3.3.4 some.profile.loc
# non-route-line
3.3.3.4 first.loc
3.3.3.4 first.loc
`)
p, err := NewProfileFromReader(r, false)
assert.NoError(t, err)
hosts, err := p.GetHostNames("3.3.3.4")
assert.NoError(t, err)
assert.Equal(t, []string{"some.profile.loc", "first.loc", "first.loc"}, hosts)
})
}

0 comments on commit 89ef61c

Please sign in to comment.