Skip to content
This repository was archived by the owner on Mar 27, 2025. It is now read-only.

Commit 12284a6

Browse files
author
Federico Guerinoni
committed
Add in config file only what arduino-connector installs
In this case when install docker images and containers lists are both empty because there I will store only what application installs. Signed-off-by: Federico Guerinoni <guerra@develer.com>
1 parent 153c0d0 commit 12284a6

File tree

6 files changed

+49
-176
lines changed

6 files changed

+49
-176
lines changed

go.sum

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,7 @@ github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk=
270270
github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
271271
github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=
272272
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
273+
github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A=
273274
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
274275
github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
275276
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=

install.go

Lines changed: 15 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,6 @@ import (
4141
"time"
4242

4343
"github.com/arduino/arduino-connector/auth"
44-
"github.com/docker/docker/api/types"
45-
docker "github.com/docker/docker/client"
4644
mqtt "github.com/eclipse/paho.mqtt.golang"
4745
"github.com/facchinm/service"
4846
"github.com/kardianos/osext"
@@ -86,23 +84,9 @@ func createConfig() error {
8684
}
8785

8886
viper.Set("docker-installed", value)
89-
90-
if value {
91-
values, errDocker := retrieveDockerImages()
92-
if errDocker != nil {
93-
return errDocker
94-
}
95-
viper.Set("docker-images", values)
96-
97-
values, errDocker = retrieveDockerContainer()
98-
if errDocker != nil {
99-
return errDocker
100-
}
101-
viper.Set("docker-container", values)
102-
}
103-
104-
value = isNetManagerInstalled()
105-
viper.Set("network-manager-installed", value)
87+
viper.Set("docker-images", []string{})
88+
viper.Set("docker-container", []string{})
89+
viper.Set("network-manager-installed", isNetManagerInstalled())
10690

10791
err = viper.WriteConfigAs(dir + string(os.PathSeparator) + "arduino-connector.yml")
10892
if err != nil {
@@ -121,53 +105,24 @@ func isDockerInstalled() (bool, error) {
121105
return false, nil
122106
}
123107

124-
func retrieveDockerImages() ([]string, error) {
125-
imageListOptions := types.ImageListOptions{All: true}
126-
127-
cli, err := docker.NewClientWithOpts(docker.WithVersion("1.38"))
128-
if err != nil {
129-
return []string{}, err
130-
}
131-
132-
images, err := cli.ImageList(context.Background(), imageListOptions)
133-
if err != nil {
134-
return []string{}, err
135-
}
136-
137-
imgs := []string{}
138-
for _, v := range images {
139-
imgs = append(imgs, v.RepoTags[0])
140-
}
141-
return imgs, nil
142-
}
143-
144-
func retrieveDockerContainer() ([]string, error) {
145-
cli, err := docker.NewClientWithOpts(docker.WithVersion("1.38"))
146-
if err != nil {
147-
return []string{}, err
148-
}
149-
150-
containers, err := cli.ContainerList(context.Background(), types.ContainerListOptions{All: true})
151-
if err != nil {
152-
return []string{}, err
153-
}
154-
155-
cs := []string{}
156-
for _, v := range containers {
157-
cs = append(cs, v.ID)
158-
}
159-
160-
fmt.Println("containers when create config: ", cs)
161-
162-
return cs, nil
163-
}
164-
165108
func isNetManagerInstalled() bool {
166109
cmd := exec.Command("dpkg-query", "-l network-manager; echo $?")
167110
_, err := cmd.CombinedOutput()
168111
return err == nil
169112
}
170113

114+
func updateConfigWithContainer(c string) {
115+
cs := viper.GetStringSlice("docker-container")
116+
cs = append(cs, c)
117+
viper.Set("docker-container", cs)
118+
}
119+
120+
func updateConfigWithImage(i string) {
121+
is := viper.GetStringSlice("docker-images")
122+
is = append(is, i)
123+
viper.Set("docker-images", is)
124+
}
125+
171126
// Register creates the necessary certificates and configuration files
172127
func register(config Config, configFile, token string) {
173128
// Request token

install_test.go

Lines changed: 0 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,9 @@
11
package main
22

33
import (
4-
"reflect"
54
"testing"
6-
"time"
75

8-
"github.com/docker/docker/api/types"
9-
"github.com/docker/docker/api/types/container"
10-
"github.com/docker/docker/api/types/filters"
11-
docker "github.com/docker/docker/client"
126
"github.com/stretchr/testify/assert"
13-
"golang.org/x/net/context"
147
)
158

169
func TestInstallUbuntuDockerPath(t *testing.T) {
@@ -25,85 +18,6 @@ func TestInstallAlpineDockerPath(t *testing.T) {
2518
assert.True(t, err == nil)
2619
}
2720

28-
func TestInstallAlpineDockerImagesEmpty(t *testing.T) {
29-
values, err := retrieveDockerImages()
30-
assert.True(t, err == nil)
31-
assert.True(t, len(values) == 0)
32-
assert.True(t, reflect.DeepEqual(values, []string{}))
33-
}
34-
35-
func TestInstallAlpineDockerImages(t *testing.T) {
36-
cli, err := docker.NewClientWithOpts(docker.WithVersion("1.38"))
37-
assert.True(t, err == nil)
38-
39-
ctx := context.Background()
40-
_, err = cli.ImagePull(ctx, "alpine", types.ImagePullOptions{})
41-
time.Sleep(5 * time.Second)
42-
assert.True(t, err == nil)
43-
44-
defer func() {
45-
forceAllImagesArg, _ := filters.FromJSON(`{"dangling": false}`)
46-
_, err = cli.ImagesPrune(ctx, forceAllImagesArg)
47-
assert.True(t, err == nil)
48-
}()
49-
50-
values, err := retrieveDockerImages()
51-
assert.True(t, err == nil)
52-
assert.True(t, len(values) == 1)
53-
assert.True(t, reflect.DeepEqual(values, []string{"alpine:latest"}))
54-
}
55-
56-
func TestInstallAlpineDockerContainersEmpty(t *testing.T) {
57-
values, err := retrieveDockerContainer()
58-
assert.True(t, err == nil)
59-
assert.True(t, len(values) == 0)
60-
assert.True(t, reflect.DeepEqual(values, []string{}))
61-
}
62-
63-
func TestInstallAlpineDockerContainers(t *testing.T) {
64-
cli, err := docker.NewClientWithOpts(docker.WithVersion("1.38"))
65-
assert.True(t, err == nil)
66-
67-
ctx := context.Background()
68-
_, err = cli.ImagePull(ctx, "alpine", types.ImagePullOptions{})
69-
time.Sleep(5 * time.Second)
70-
assert.True(t, err == nil)
71-
72-
defer func() {
73-
filters := filters.NewArgs(filters.Arg("reference", "alpine"))
74-
images, errImagels := cli.ImageList(context.Background(), types.ImageListOptions{Filters: filters})
75-
assert.True(t, errImagels == nil)
76-
_, err = cli.ImageRemove(ctx, images[0].ID, types.ImageRemoveOptions{})
77-
time.Sleep(5 * time.Second)
78-
assert.True(t, err == nil)
79-
}()
80-
81-
createContResp, err := cli.ContainerCreate(ctx, &container.Config{
82-
Image: "alpine",
83-
Cmd: []string{"echo", "hello world"},
84-
}, nil, nil, "")
85-
time.Sleep(5 * time.Second)
86-
assert.True(t, err == nil)
87-
88-
defer func() {
89-
err = cli.ContainerRemove(ctx, createContResp.ID, types.ContainerRemoveOptions{})
90-
time.Sleep(5 * time.Second)
91-
assert.True(t, err == nil)
92-
}()
93-
94-
defer func() {
95-
forceAllImagesArg, _ := filters.FromJSON(`{"dangling": false}`)
96-
_, err = cli.ImagesPrune(ctx, forceAllImagesArg)
97-
time.Sleep(5 * time.Second)
98-
assert.True(t, err == nil)
99-
}()
100-
101-
values, err := retrieveDockerContainer()
102-
assert.True(t, err == nil)
103-
assert.True(t, len(values) == 1)
104-
assert.True(t, reflect.DeepEqual(values, []string{createContResp.ID}))
105-
}
106-
10721
func TestInstallUbuntuNetworkManager(t *testing.T) {
10822
assert.False(t, isNetManagerInstalled())
10923
}

scripts/functional-tests.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ set -euo pipefail
55
trap 'kill "$(pidof mosquitto)"' EXIT
66

77
mosquitto > /dev/null &
8-
go test -v --tags=functional --run="TestDocker"
9-
go test -v --run="TestUninstall"
8+
go test -race -v --tags=functional --run="TestDocker"
9+
go test -race -v --run="TestUninstall"

uninstall.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,6 @@ func removeContainers(s *Status) error {
113113
return nil
114114
}
115115

116-
fmt.Println("containers when uninstall : ", containers)
117-
118116
for _, v := range containers {
119117
err = s.dockerClient.ContainerRemove(context.Background(), v, types.ContainerRemoveOptions{Force: true})
120118
time.Sleep(5 * time.Second)

uninstall_test.go

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -149,19 +149,30 @@ func TestUninstallDockerAllContainer(t *testing.T) {
149149
time.Sleep(5 * time.Second)
150150
assert.True(t, err == nil)
151151

152-
_, err = cli.ContainerCreate(ctx, &container.Config{
152+
err = createConfig()
153+
assert.True(t, err == nil)
154+
155+
c, errCreate := cli.ContainerCreate(ctx, &container.Config{
153156
Image: "alpine",
154157
Cmd: []string{"echo", "hello world"},
155158
}, nil, nil, "")
156-
157159
time.Sleep(5 * time.Second)
158-
assert.True(t, err == nil)
160+
assert.True(t, errCreate == nil)
159161

160-
err = createConfig()
161-
assert.True(t, err == nil)
162+
updateConfigWithContainer(c.ID)
162163

163164
resp := dashboard.MqttSendAndReceiveTimeout(t, "/status/uninstall", "{}", 5*time.Minute)
164165
assert.True(t, resp == "INFO: OK\n")
166+
containers, errList := cli.ContainerList(ctx, types.ContainerListOptions{})
167+
assert.True(t, errList == nil)
168+
found := false
169+
for _, v := range containers {
170+
if v.ID == c.ID {
171+
found = true
172+
break
173+
}
174+
}
175+
assert.False(t, found)
165176
}
166177

167178
func TestUninstallNotAllDockerContainer(t *testing.T) {
@@ -181,47 +192,43 @@ func TestUninstallNotAllDockerContainer(t *testing.T) {
181192

182193
subscribeTopic(s.mqttClient, "0", "/status/uninstall/post", s, s.Uninstall, false)
183194

195+
err = createConfig()
196+
assert.True(t, err == nil)
197+
184198
ctx := context.Background()
185199
_, err = cli.ImagePull(ctx, "alpine", types.ImagePullOptions{})
186200
time.Sleep(5 * time.Second)
187201
assert.True(t, err == nil)
188202

189-
_, err = cli.ContainerCreate(ctx, &container.Config{
203+
containerMustKeep, err := cli.ContainerCreate(ctx, &container.Config{
190204
Image: "alpine",
191205
Cmd: []string{"echo", "hello world"},
192206
}, nil, nil, "")
193-
194207
time.Sleep(5 * time.Second)
195208
assert.True(t, err == nil)
196209

197-
err = createConfig()
198-
assert.True(t, err == nil)
199-
200-
idMustKeep, err := cli.ContainerCreate(ctx, &container.Config{
210+
containerMustRemove, err := cli.ContainerCreate(ctx, &container.Config{
201211
Image: "alpine",
202212
Cmd: []string{"echo", "hello world"},
203213
}, nil, nil, "")
204214

205-
defer func() {
206-
err = cli.ContainerRemove(ctx, idMustKeep.ID, types.ContainerRemoveOptions{})
207-
time.Sleep(5 * time.Second)
208-
assert.True(t, err == nil)
215+
time.Sleep(5 * time.Second)
216+
assert.True(t, err == nil)
217+
updateConfigWithContainer(containerMustRemove.ID)
209218

210-
_, err = cli.ImageRemove(ctx, "alpine", types.ImageRemoveOptions{})
219+
defer func() {
220+
err = cli.ContainerRemove(ctx, containerMustKeep.ID, types.ContainerRemoveOptions{})
211221
time.Sleep(5 * time.Second)
212222
assert.True(t, err == nil)
213223
}()
214224

215-
time.Sleep(5 * time.Second)
216-
assert.True(t, err == nil)
217-
218225
resp := dashboard.MqttSendAndReceiveTimeout(t, "/status/uninstall", "{}", 5*time.Minute)
219226
assert.True(t, resp == "INFO: OK\n")
220227
containers, err := cli.ContainerList(ctx, types.ContainerListOptions{All: true})
221228
assert.True(t, err == nil)
222229
found := false
223230
for _, v := range containers {
224-
if v.ID == idMustKeep.ID {
231+
if v.ID == containerMustKeep.ID {
225232
found = true
226233
break
227234
}
@@ -246,18 +253,16 @@ func TestUninstallAllImages(t *testing.T) {
246253

247254
subscribeTopic(s.mqttClient, "0", "/status/uninstall/post", s, s.Uninstall, false)
248255

256+
err = createConfig()
257+
assert.True(t, err == nil)
258+
249259
ctx := context.Background()
250260
_, err = cli.ImagePull(ctx, "alpine", types.ImagePullOptions{})
251261
time.Sleep(5 * time.Second)
252262
assert.True(t, err == nil)
253263

254-
err = createConfig()
255-
assert.True(t, err == nil)
264+
updateConfigWithImage("alpine")
256265

257266
resp := dashboard.MqttSendAndReceiveTimeout(t, "/status/uninstall", "{}", 5*time.Minute)
258267
assert.True(t, resp == "INFO: OK\n")
259-
260-
imgs, errImages := cli.ImageList(ctx, types.ImageListOptions{})
261-
assert.True(t, errImages == nil)
262-
assert.True(t, len(imgs) == 0)
263268
}

0 commit comments

Comments
 (0)