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

Commit f7bd2c5

Browse files
author
Federico Guerinoni
committed
Add test to check uninstall of network-manager
Signed-off-by: Federico Guerinoni <guerra@develer.com>
1 parent 787ed21 commit f7bd2c5

File tree

3 files changed

+74
-8
lines changed

3 files changed

+74
-8
lines changed

install.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,9 @@ func retrieveDockerContainer() ([]string, error) {
158158
}
159159

160160
func isNetManagerInstalled() bool {
161-
cmd := exec.Command("dpkg-query", "-l network-manager; echo $?")
162-
_, err := cmd.CombinedOutput()
163-
return err == nil
161+
cmd := exec.Command("bash", "-c", "dpkg --get-selections | grep network-manager")
162+
out, _ := cmd.CombinedOutput()
163+
return !strings.Contains(string(out), "deinstall") && len(out) != 0
164164
}
165165

166166
func updateConfigWithContainer(c string) {

uninstall.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ import (
66
"strings"
77
"time"
88

9-
"github.com/arduino/go-apt-client"
10-
9+
apt "github.com/arduino/go-apt-client"
1110
"github.com/docker/docker/api/types"
1211
mqtt "github.com/eclipse/paho.mqtt.golang"
1312
"github.com/kardianos/osext"
@@ -154,8 +153,9 @@ func removeNetworkManager() error {
154153
}
155154

156155
viper.SetConfigFile(dir + string(os.PathSeparator) + "arduino-connector.yml")
157-
net := viper.GetBool("network-manager")
158-
if net {
156+
beforeNotInstalled := viper.GetBool("network-manager-installed")
157+
nowInstalled := isNetManagerInstalled()
158+
if !beforeNotInstalled && nowInstalled {
159159
toRemove := append([]*apt.Package{}, &apt.Package{Name: "network-manager"})
160160
_, err = apt.Remove(toRemove...)
161161
if err != nil {

uninstall_test.go

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package main
33
import (
44
"log"
55
"os"
6+
"os/exec"
67
"testing"
78
"time"
89

@@ -114,7 +115,7 @@ func TestUninstallGenerateScript(t *testing.T) {
114115

115116
subscribeTopic(s.mqttClient, "0", "/status/uninstall/post", s, s.Uninstall, false)
116117

117-
resp := dashboard.MqttSendAndReceiveTimeout(t, "/status/uninstall", "{}", 50*time.Millisecond)
118+
resp := dashboard.MqttSendAndReceiveTimeout(t, "/status/uninstall", "{}", 500*time.Millisecond)
118119
assert.True(t, resp == "INFO: OK\n")
119120

120121
dir, _ := osext.ExecutableFolder()
@@ -266,3 +267,68 @@ func TestUninstallAllImages(t *testing.T) {
266267
resp := dashboard.MqttSendAndReceiveTimeout(t, "/status/uninstall", "{}", 5*time.Minute)
267268
assert.True(t, resp == "INFO: OK\n")
268269
}
270+
271+
func TestUninstallNetworkManagerNotRemove(t *testing.T) {
272+
dashboard := newMqttTestClientLocal()
273+
defer dashboard.Close()
274+
275+
s := NewStatus(Config{}, nil, nil, "")
276+
s.mqttClient = mqtt.NewClient(mqtt.NewClientOptions().AddBroker("tcp://localhost:1883").SetClientID("arduino-connector"))
277+
if token := s.mqttClient.Connect(); token.Wait() && token.Error() != nil {
278+
log.Fatal(token.Error())
279+
}
280+
defer s.mqttClient.Disconnect(100)
281+
282+
subscribeTopic(s.mqttClient, "0", "/status/uninstall/post", s, s.Uninstall, false)
283+
284+
c := exec.Command("bash", "-c", "apt-get install -y network-manager")
285+
_, errCmd := c.CombinedOutput()
286+
assert.True(t, errCmd == nil)
287+
288+
defer func() {
289+
c := exec.Command("bash", "-c", "apt-get remove -y network-manager")
290+
_, err := c.CombinedOutput()
291+
assert.True(t, err == nil)
292+
293+
assert.False(t, isNetManagerInstalled())
294+
}()
295+
296+
errConfig := createConfig()
297+
assert.True(t, errConfig == nil)
298+
299+
assert.True(t, isNetManagerInstalled())
300+
301+
resp := dashboard.MqttSendAndReceiveTimeout(t, "/status/uninstall", "{}", 5*time.Minute)
302+
assert.True(t, resp == "INFO: OK\n")
303+
assert.True(t, isNetManagerInstalled())
304+
}
305+
306+
func TestUninstallNetworkManager(t *testing.T) {
307+
dashboard := newMqttTestClientLocal()
308+
defer dashboard.Close()
309+
310+
s := NewStatus(Config{}, nil, nil, "")
311+
s.mqttClient = mqtt.NewClient(mqtt.NewClientOptions().AddBroker("tcp://localhost:1883").SetClientID("arduino-connector"))
312+
if token := s.mqttClient.Connect(); token.Wait() && token.Error() != nil {
313+
log.Fatal(token.Error())
314+
}
315+
defer s.mqttClient.Disconnect(100)
316+
317+
subscribeTopic(s.mqttClient, "0", "/status/uninstall/post", s, s.Uninstall, false)
318+
319+
err := createConfig()
320+
assert.True(t, err == nil)
321+
322+
assert.False(t, isNetManagerInstalled())
323+
324+
c := exec.Command("bash", "-c", "apt-get install -y network-manager")
325+
_, err = c.CombinedOutput()
326+
assert.True(t, err == nil)
327+
328+
assert.True(t, isNetManagerInstalled())
329+
330+
resp := dashboard.MqttSendAndReceiveTimeout(t, "/status/uninstall", "{}", 5*time.Minute)
331+
assert.True(t, resp == "INFO: OK\n")
332+
333+
assert.False(t, isNetManagerInstalled())
334+
}

0 commit comments

Comments
 (0)