1
0
mirror of https://github.com/amir20/dozzle.git synced 2026-01-04 12:05:07 +01:00

Adds tests and uses filterName instead. (#85)

* Adding:
- ability to restrict view to container by regex match on container name
- instructions for building/running locally

* refactoring based on comments

* Updates tests

* Fixes readme
This commit is contained in:
Amir Raminfar
2019-07-22 12:38:52 -07:00
committed by GitHub
parent 1d411b490b
commit 6a44ebaa5c
5 changed files with 92 additions and 21 deletions

View File

@@ -1,21 +1,24 @@
package docker
import (
"strconv"
"bytes"
"context"
"encoding/binary"
"fmt"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/events"
"github.com/docker/docker/api/types/filters"
"github.com/docker/docker/client"
"io"
"log"
"sort"
"strconv"
"strings"
)
type dockerClient struct {
cli dockerProxy
cli dockerProxy
filter string
}
type dockerProxy interface {
@@ -27,21 +30,47 @@ type dockerProxy interface {
// Client is a proxy around the docker client
type Client interface {
ListContainers() ([]Container, error)
FindContainer(string) (Container, error)
ContainerLogs(context.Context, string, int) (<-chan string, <-chan error)
Events(context.Context) (<-chan events.Message, <-chan error)
}
// NewClient creates a new instance of Client
func NewClient() Client {
func NewClient(filter string) Client {
cli, err := client.NewClientWithOpts(client.FromEnv)
if err != nil {
log.Fatal(err)
}
return &dockerClient{cli}
return &dockerClient{cli, filter}
}
func (d *dockerClient) FindContainer(id string) (Container, error) {
var container Container
containers, err := d.ListContainers()
if err != nil {
return container, err
}
found := false
for _, c := range containers {
if c.ID == id {
container = c
found = true
break
}
}
if found == false {
return container, fmt.Errorf("Unable to find container with id: %s", id)
}
return container, nil
}
func (d *dockerClient) ListContainers() ([]Container, error) {
list, err := d.cli.ContainerList(context.Background(), types.ContainerListOptions{})
containerListOptions := types.ContainerListOptions{
Filters: filters.NewArgs(filters.KeyValuePair{Key: "name", Value: d.filter}),
}
list, err := d.cli.ContainerList(context.Background(), containerListOptions)
if err != nil {
return nil, err
}

View File

@@ -41,7 +41,7 @@ func (m *mockedProxy) ContainerLogs(ctx context.Context, id string, options type
func Test_dockerClient_ListContainers_null(t *testing.T) {
proxy := new(mockedProxy)
proxy.On("ContainerList", mock.Anything, mock.Anything).Return(nil, nil)
client := &dockerClient{proxy}
client := &dockerClient{proxy, ""}
list, err := client.ListContainers()
assert.Empty(t, list, "list should be empty")
@@ -53,7 +53,7 @@ func Test_dockerClient_ListContainers_null(t *testing.T) {
func Test_dockerClient_ListContainers_error(t *testing.T) {
proxy := new(mockedProxy)
proxy.On("ContainerList", mock.Anything, mock.Anything).Return(nil, errors.New("test"))
client := &dockerClient{proxy}
client := &dockerClient{proxy, ""}
list, err := client.ListContainers()
assert.Nil(t, list, "list should be nil")
@@ -76,7 +76,7 @@ func Test_dockerClient_ListContainers_happy(t *testing.T) {
proxy := new(mockedProxy)
proxy.On("ContainerList", mock.Anything, mock.Anything).Return(containers, nil)
client := &dockerClient{proxy}
client := &dockerClient{proxy, ""}
list, err := client.ListContainers()
require.NoError(t, err, "error should not return an error.")
@@ -112,7 +112,7 @@ func Test_dockerClient_ContainerLogs_happy(t *testing.T) {
options := types.ContainerLogsOptions{ShowStdout: true, ShowStderr: true, Follow: true, Tail: "300", Timestamps: true}
proxy.On("ContainerLogs", mock.Anything, id, options).Return(reader, nil)
client := &dockerClient{proxy}
client := &dockerClient{proxy, ""}
messages, _ := client.ContainerLogs(context.Background(), id, 300)
actual, _ := <-messages
@@ -129,7 +129,7 @@ func Test_dockerClient_ContainerLogs_error(t *testing.T) {
proxy.On("ContainerLogs", mock.Anything, id, mock.Anything).Return(nil, errors.New("test"))
client := &dockerClient{proxy}
client := &dockerClient{proxy, ""}
messages, err := client.ContainerLogs(context.Background(), id, 300)