From 0fc499eb80999a2c99ebef2eb52f6a84a521f6c8 Mon Sep 17 00:00:00 2001 From: Federico Guerinoni Date: Tue, 25 Aug 2020 17:16:08 +0200 Subject: [PATCH 01/12] Prepare first teest for apt list Signed-off-by: Federico Guerinoni --- handlers_apt_repositories.go | 8 +------ handlers_apt_repositories_test.go | 32 ++++++++++++++++++++++++++ handlers_containers_functional_test.go | 14 ----------- tests_helper.go | 14 +++++++++++ 4 files changed, 47 insertions(+), 21 deletions(-) create mode 100644 handlers_apt_repositories_test.go diff --git a/handlers_apt_repositories.go b/handlers_apt_repositories.go index a22e1891..d2665d85 100644 --- a/handlers_apt_repositories.go +++ b/handlers_apt_repositories.go @@ -28,25 +28,19 @@ import ( // AptRepositoryListEvent sends a list of available repositories func (s *Status) AptRepositoryListEvent(client mqtt.Client, msg mqtt.Message) { - // Get packages from system all, err := apt.ParseAPTConfigFolder("/etc/apt") if err != nil { s.Error("/apt/repos/list", fmt.Errorf("Retrieving repositories: %s", err)) return } - // Send result data, err := json.Marshal(all) if err != nil { s.Error("/apt/repos/list", fmt.Errorf("Json marshal result: %s", err)) return } - //var out bytes.Buffer - //json.Indent(&out, data, "", " ") - //fmt.Println(string(out.Bytes())) - - s.Info("/apt/repos/list", string(data)) + s.SendInfo(s.topicPertinence+"/apt/repos/list", string(data)) } // AptRepositoryAddEvent adds a repository to the apt configuration diff --git a/handlers_apt_repositories_test.go b/handlers_apt_repositories_test.go new file mode 100644 index 00000000..c2ccbd90 --- /dev/null +++ b/handlers_apt_repositories_test.go @@ -0,0 +1,32 @@ +package main + +import ( + "fmt" + "log" + "testing" + "time" + + mqtt "github.com/eclipse/paho.mqtt.golang" +) + +func TestAptList(t *testing.T) { + ui := NewMqttTestClientLocal() + defer ui.Close() + + s := NewStatus(program{}.Config, nil, nil, "") + s.mqttClient = mqtt.NewClient(mqtt.NewClientOptions().AddBroker("tcp://localhost:1883").SetClientID("arduino-connector")) + if token := s.mqttClient.Connect(); token.Wait() && token.Error() != nil { + log.Fatal(token.Error()) + } + defer s.mqttClient.Disconnect(100) + + subscribeTopic(s.mqttClient, "0", "/apt/repos/list/post", s, s.AptRepositoryListEvent, false) + + resp := ui.MqttSendAndReceiveTimeout(t, "/apt/repos/list", "{}", 1*time.Second) + + if resp == "" { + t.Error("response is empty") + } + + fmt.Println(resp) +} diff --git a/handlers_containers_functional_test.go b/handlers_containers_functional_test.go index 7047e0a5..2a53fd06 100644 --- a/handlers_containers_functional_test.go +++ b/handlers_containers_functional_test.go @@ -23,20 +23,6 @@ import ( "golang.org/x/net/context" ) -// NewMqttTestClientLocal creates mqtt client in localhost:1883 -func NewMqttTestClientLocal() *MqttTestClient { - uiOptions := mqtt.NewClientOptions().AddBroker("tcp://localhost:1883").SetClientID("UI") - ui := mqtt.NewClient(uiOptions) - if token := ui.Connect(); token.Wait() && token.Error() != nil { - panic(token.Error()) - } - - return &MqttTestClient{ - ui, - "", - } -} - type testStatus struct { appStatus *Status ui *MqttTestClient diff --git a/tests_helper.go b/tests_helper.go index 41d25c4d..4317225f 100644 --- a/tests_helper.go +++ b/tests_helper.go @@ -68,6 +68,20 @@ func NewMqttTestClient() *MqttTestClient { } } +// NewMqttTestClientLocal creates mqtt client in localhost:1883 +func NewMqttTestClientLocal() *MqttTestClient { + uiOptions := mqtt.NewClientOptions().AddBroker("tcp://localhost:1883").SetClientID("UI") + ui := mqtt.NewClient(uiOptions) + if token := ui.Connect(); token.Wait() && token.Error() != nil { + panic(token.Error()) + } + + return &MqttTestClient{ + ui, + "", + } +} + // Close disconnect client func (tmc *MqttTestClient) Close() { tmc.client.Disconnect(100) From b0104bfd5234b287fb1d05516729fd96d7c61804 Mon Sep 17 00:00:00 2001 From: Federico Guerinoni Date: Wed, 26 Aug 2020 14:41:22 +0200 Subject: [PATCH 02/12] Create script to run apt test in one command This type of test should be performed on docker container guerra1994/go-mosquitto-ubuntu-env or in local machine properly configured. Signed-off-by: Federico Guerinoni --- handlers_apt_repositories_test.go | 3 --- scripts/apt-tests.sh | 8 ++++++++ 2 files changed, 8 insertions(+), 3 deletions(-) create mode 100755 scripts/apt-tests.sh diff --git a/handlers_apt_repositories_test.go b/handlers_apt_repositories_test.go index c2ccbd90..e0c42a0a 100644 --- a/handlers_apt_repositories_test.go +++ b/handlers_apt_repositories_test.go @@ -1,7 +1,6 @@ package main import ( - "fmt" "log" "testing" "time" @@ -27,6 +26,4 @@ func TestAptList(t *testing.T) { if resp == "" { t.Error("response is empty") } - - fmt.Println(resp) } diff --git a/scripts/apt-tests.sh b/scripts/apt-tests.sh new file mode 100755 index 00000000..9914a3ad --- /dev/null +++ b/scripts/apt-tests.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +set -euo pipefail + +trap 'kill "$(pidof mosquitto)"' EXIT + +mosquitto > /dev/null & +go test -v --run="TestApt" \ No newline at end of file From a594e7de49adbaa879b716ca15d670501127c2ca Mon Sep 17 00:00:00 2001 From: Federico Guerinoni Date: Wed, 26 Aug 2020 14:45:07 +0200 Subject: [PATCH 03/12] Update GH Actions for support apt-tests In this case I also renamed functional-tests script in docker-tests because is more consistent. Signed-off-by: Federico Guerinoni --- .github/workflows/build.yml | 2 +- .github/workflows/tests.yml | 10 +++++----- scripts/{functional-tests.sh => docker-tests.sh} | 0 3 files changed, 6 insertions(+), 6 deletions(-) rename scripts/{functional-tests.sh => docker-tests.sh} (100%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2bd10683..256947d1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,4 +1,4 @@ -name: Build +name: build on: [push, pull_request] diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index bfcda9cc..356afcc4 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -11,11 +11,11 @@ jobs: - name: check out code uses: actions/checkout@v2 - - name: download mod - run: go mod download - - - name: run functional tests - run: ./scripts/functional-tests.sh + - name: run docker tests + run: ./scripts/docker-tests.sh - name: run auth tests run: go test -v ./auth + + - name: run apt tests + run: ./scripts/apt-tests.sh diff --git a/scripts/functional-tests.sh b/scripts/docker-tests.sh similarity index 100% rename from scripts/functional-tests.sh rename to scripts/docker-tests.sh From 4aaa1b19e6b3b8db0a2def66e0b146c093776320 Mon Sep 17 00:00:00 2001 From: Federico Guerinoni Date: Wed, 26 Aug 2020 17:37:11 +0200 Subject: [PATCH 04/12] Test error for API apt/add Signed-off-by: Federico Guerinoni --- handlers_apt_repositories.go | 4 ++-- handlers_apt_repositories_test.go | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/handlers_apt_repositories.go b/handlers_apt_repositories.go index d2665d85..b59dcacc 100644 --- a/handlers_apt_repositories.go +++ b/handlers_apt_repositories.go @@ -1,7 +1,7 @@ // // This file is part of arduino-connector // -// Copyright (C) 2017-2018 Arduino AG (http://www.arduino.cc/) +// Copyright (C) 2017-2020 Arduino AG (http://www.arduino.cc/) // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -60,7 +60,7 @@ func (s *Status) AptRepositoryAddEvent(client mqtt.Client, msg mqtt.Message) { return } - s.Info("/apt/repos/add", "OK") + s.SendInfo(s.topicPertinence+"/apt/repos/add", "OK") } // AptRepositoryRemoveEvent removes a repository from the apt configuration diff --git a/handlers_apt_repositories_test.go b/handlers_apt_repositories_test.go index e0c42a0a..2905a464 100644 --- a/handlers_apt_repositories_test.go +++ b/handlers_apt_repositories_test.go @@ -2,10 +2,12 @@ package main import ( "log" + "strings" "testing" "time" mqtt "github.com/eclipse/paho.mqtt.golang" + "github.com/stretchr/testify/assert" ) func TestAptList(t *testing.T) { @@ -27,3 +29,22 @@ func TestAptList(t *testing.T) { t.Error("response is empty") } } + +func TestAptAddError(t *testing.T) { + ui := NewMqttTestClientLocal() + defer ui.Close() + + s := NewStatus(program{}.Config, nil, nil, "") + s.mqttClient = mqtt.NewClient(mqtt.NewClientOptions().AddBroker("tcp://localhost:1883").SetClientID("arduino-connector")) + if token := s.mqttClient.Connect(); token.Wait() && token.Error() != nil { + log.Fatal(token.Error()) + } + defer s.mqttClient.Disconnect(100) + + subscribeTopic(s.mqttClient, "0", "/apt/repos/add/post", s, s.AptRepositoryAddEvent, true) + + resp := ui.MqttSendAndReceiveTimeout(t, "/apt/repos/add", "{test}", 1*time.Second) + + assert.True(t, strings.HasPrefix(resp, "ERROR")) + assert.True(t, strings.Contains(resp, "Unmarshal")) +} From 5d4fc80d9403290c32469542e6e9f9a5f2c583f0 Mon Sep 17 00:00:00 2001 From: Federico Guerinoni Date: Thu, 27 Aug 2020 14:00:51 +0200 Subject: [PATCH 05/12] Add AptAdd test with right data Signed-off-by: Federico Guerinoni --- handlers_apt_repositories_test.go | 32 +++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/handlers_apt_repositories_test.go b/handlers_apt_repositories_test.go index 2905a464..0463e060 100644 --- a/handlers_apt_repositories_test.go +++ b/handlers_apt_repositories_test.go @@ -1,11 +1,13 @@ package main import ( + "encoding/json" "log" "strings" "testing" "time" + apt "github.com/arduino/go-apt-client" mqtt "github.com/eclipse/paho.mqtt.golang" "github.com/stretchr/testify/assert" ) @@ -48,3 +50,33 @@ func TestAptAddError(t *testing.T) { assert.True(t, strings.HasPrefix(resp, "ERROR")) assert.True(t, strings.Contains(resp, "Unmarshal")) } + +func TestAptAdd(t *testing.T) { + ui := NewMqttTestClientLocal() + defer ui.Close() + + s := NewStatus(program{}.Config, nil, nil, "") + s.mqttClient = mqtt.NewClient(mqtt.NewClientOptions().AddBroker("tcp://localhost:1883").SetClientID("arduino-connector")) + if token := s.mqttClient.Connect(); token.Wait() && token.Error() != nil { + log.Fatal(token.Error()) + } + defer s.mqttClient.Disconnect(100) + + subscribeTopic(s.mqttClient, "0", "/apt/repos/add/post", s, s.AptRepositoryAddEvent, true) + + var params struct { + Repository *apt.Repository `json:"repository"` + } + + params.Repository = &apt.Repository{ + URI: "www.test.io", + } + + data, err := json.Marshal(params) + if err != nil { + t.Error(err) + } + + resp := ui.MqttSendAndReceiveTimeout(t, "/apt/repos/add", string(data), 1*time.Second) + assert.Equal(t, "INFO: OK\n", resp) +} From 0480a640195885646b94bd21053a3466b4f1837d Mon Sep 17 00:00:00 2001 From: Federico Guerinoni Date: Thu, 27 Aug 2020 16:56:49 +0200 Subject: [PATCH 06/12] WIP: Add remove tests, but strange behavior It seems that repository is already removed but is not right because in /etc/apt/sources.list.d/managed.list is still present. Signed-off-by: Federico Guerinoni --- handlers_apt_repositories_test.go | 55 +++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/handlers_apt_repositories_test.go b/handlers_apt_repositories_test.go index 0463e060..d99a8c22 100644 --- a/handlers_apt_repositories_test.go +++ b/handlers_apt_repositories_test.go @@ -79,4 +79,59 @@ func TestAptAdd(t *testing.T) { resp := ui.MqttSendAndReceiveTimeout(t, "/apt/repos/add", string(data), 1*time.Second) assert.Equal(t, "INFO: OK\n", resp) + + // TODO: check if is it really added on list, I think apt.ParseAPTConfigFolder("/etc/apt") doens't read + // all repository +} + +func TestAptRemoveError(t *testing.T) { + ui := NewMqttTestClientLocal() + defer ui.Close() + + s := NewStatus(program{}.Config, nil, nil, "") + s.mqttClient = mqtt.NewClient(mqtt.NewClientOptions().AddBroker("tcp://localhost:1883").SetClientID("arduino-connector")) + if token := s.mqttClient.Connect(); token.Wait() && token.Error() != nil { + log.Fatal(token.Error()) + } + defer s.mqttClient.Disconnect(100) + + subscribeTopic(s.mqttClient, "0", "/apt/repos/remove/post", s, s.AptRepositoryRemoveEvent, true) + + resp := ui.MqttSendAndReceiveTimeout(t, "/apt/repos/remove", "{test}", 1*time.Second) + + assert.True(t, strings.HasPrefix(resp, "ERROR")) + assert.True(t, strings.Contains(resp, "Unmarshal")) +} + +func TestAptRemove(t *testing.T) { + ui := NewMqttTestClientLocal() + defer ui.Close() + + s := NewStatus(program{}.Config, nil, nil, "") + s.mqttClient = mqtt.NewClient(mqtt.NewClientOptions().AddBroker("tcp://localhost:1883").SetClientID("arduino-connector")) + if token := s.mqttClient.Connect(); token.Wait() && token.Error() != nil { + log.Fatal(token.Error()) + } + defer s.mqttClient.Disconnect(100) + + subscribeTopic(s.mqttClient, "0", "/apt/repos/remove/post", s, s.AptRepositoryRemoveEvent, true) + + var params struct { + Repository *apt.Repository `json:"repository"` + } + + params.Repository = &apt.Repository{ + URI: "www.test.io", + } + + data, err := json.Marshal(params) + if err != nil { + t.Error(err) + } + + resp := ui.MqttSendAndReceiveTimeout(t, "/apt/repos/remove", string(data), 1*time.Second) + assert.Equal(t, "INFO: OK\n", resp) + + // TODO: check if is it really removed on list, I think apt.ParseAPTConfigFolder("/etc/apt") doens't read + // all repository } From ac2ce784e7a28f569ac16f88c6582b020313747c Mon Sep 17 00:00:00 2001 From: Federico Guerinoni Date: Mon, 31 Aug 2020 17:44:23 +0200 Subject: [PATCH 07/12] Improve test with correct repository Signed-off-by: Federico Guerinoni --- handlers_apt_repositories.go | 2 +- handlers_apt_repositories_test.go | 45 ++++++++++++++++++++++++++----- 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/handlers_apt_repositories.go b/handlers_apt_repositories.go index b59dcacc..94855ee4 100644 --- a/handlers_apt_repositories.go +++ b/handlers_apt_repositories.go @@ -80,7 +80,7 @@ func (s *Status) AptRepositoryRemoveEvent(client mqtt.Client, msg mqtt.Message) return } - s.Info("/apt/repos/remove", "OK") + s.SendInfo(s.topicPertinence+"/apt/repos/remove", "OK") } // AptRepositoryEditEvent modifies a repository definition in the apt configuration diff --git a/handlers_apt_repositories_test.go b/handlers_apt_repositories_test.go index d99a8c22..ce6d4e69 100644 --- a/handlers_apt_repositories_test.go +++ b/handlers_apt_repositories_test.go @@ -2,6 +2,7 @@ package main import ( "encoding/json" + "fmt" "log" "strings" "testing" @@ -69,7 +70,12 @@ func TestAptAdd(t *testing.T) { } params.Repository = &apt.Repository{ - URI: "www.test.io", + Enabled: false, + SourceRepo: true, + URI: "http://ppa.launchpad.net/test/ubuntu", + Distribution: "zesty", + Components: "main", + Comment: "", } data, err := json.Marshal(params) @@ -80,8 +86,20 @@ func TestAptAdd(t *testing.T) { resp := ui.MqttSendAndReceiveTimeout(t, "/apt/repos/add", string(data), 1*time.Second) assert.Equal(t, "INFO: OK\n", resp) - // TODO: check if is it really added on list, I think apt.ParseAPTConfigFolder("/etc/apt") doens't read - // all repository + defer func() { + err = apt.RemoveRepository(params.Repository, "/etc/apt") + if err != nil { + t.Error(err) + } + }() + + all, err := apt.ParseAPTConfigFolder("/etc/apt") + if err != nil { + s.Error("/apt/repos/list", fmt.Errorf("Retrieving repositories: %s", err)) + return + } + + assert.True(t, all.Contains(params.Repository)) } func TestAptRemoveError(t *testing.T) { @@ -121,7 +139,17 @@ func TestAptRemove(t *testing.T) { } params.Repository = &apt.Repository{ - URI: "www.test.io", + Enabled: false, + SourceRepo: true, + URI: "http://ppa.launchpad.net/test/ubuntu", + Distribution: "zesty", + Components: "main", + Comment: "", + } + + errAdd := apt.AddRepository(params.Repository, "/etc/apt") + if errAdd != nil { + t.Error(errAdd) } data, err := json.Marshal(params) @@ -132,6 +160,11 @@ func TestAptRemove(t *testing.T) { resp := ui.MqttSendAndReceiveTimeout(t, "/apt/repos/remove", string(data), 1*time.Second) assert.Equal(t, "INFO: OK\n", resp) - // TODO: check if is it really removed on list, I think apt.ParseAPTConfigFolder("/etc/apt") doens't read - // all repository + all, err := apt.ParseAPTConfigFolder("/etc/apt") + if err != nil { + s.Error("/apt/repos/list", fmt.Errorf("Retrieving repositories: %s", err)) + return + } + + assert.False(t, all.Contains(params.Repository)) } From 1a32215db44232016b4a14f500f866e177821d2c Mon Sep 17 00:00:00 2001 From: Federico Guerinoni Date: Tue, 1 Sep 2020 11:55:42 +0200 Subject: [PATCH 08/12] Add test for apt Edit API Signed-off-by: Federico Guerinoni --- handlers_apt_repositories.go | 2 +- handlers_apt_repositories_test.go | 85 +++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+), 1 deletion(-) diff --git a/handlers_apt_repositories.go b/handlers_apt_repositories.go index 94855ee4..18a0abe7 100644 --- a/handlers_apt_repositories.go +++ b/handlers_apt_repositories.go @@ -101,5 +101,5 @@ func (s *Status) AptRepositoryEditEvent(client mqtt.Client, msg mqtt.Message) { return } - s.Info("/apt/repos/edit", "OK") + s.SendInfo(s.topicPertinence+"/apt/repos/edit", "OK") } diff --git a/handlers_apt_repositories_test.go b/handlers_apt_repositories_test.go index ce6d4e69..c63fa9a0 100644 --- a/handlers_apt_repositories_test.go +++ b/handlers_apt_repositories_test.go @@ -168,3 +168,88 @@ func TestAptRemove(t *testing.T) { assert.False(t, all.Contains(params.Repository)) } + +func TestAptEditError(t *testing.T) { + ui := NewMqttTestClientLocal() + defer ui.Close() + + s := NewStatus(program{}.Config, nil, nil, "") + s.mqttClient = mqtt.NewClient(mqtt.NewClientOptions().AddBroker("tcp://localhost:1883").SetClientID("arduino-connector")) + if token := s.mqttClient.Connect(); token.Wait() && token.Error() != nil { + log.Fatal(token.Error()) + } + defer s.mqttClient.Disconnect(100) + + subscribeTopic(s.mqttClient, "0", "/apt/repos/edit/post", s, s.AptRepositoryEditEvent, true) + + resp := ui.MqttSendAndReceiveTimeout(t, "/apt/repos/edit", "{test}", 1*time.Second) + + assert.True(t, strings.HasPrefix(resp, "ERROR")) + assert.True(t, strings.Contains(resp, "Unmarshal")) +} + +func TestAptEdit(t *testing.T) { + ui := NewMqttTestClientLocal() + defer ui.Close() + + s := NewStatus(program{}.Config, nil, nil, "") + s.mqttClient = mqtt.NewClient(mqtt.NewClientOptions().AddBroker("tcp://localhost:1883").SetClientID("arduino-connector")) + if token := s.mqttClient.Connect(); token.Wait() && token.Error() != nil { + log.Fatal(token.Error()) + } + defer s.mqttClient.Disconnect(100) + + subscribeTopic(s.mqttClient, "0", "/apt/repos/edit/post", s, s.AptRepositoryEditEvent, true) + + var params struct { + OldRepository *apt.Repository `json:"old_repository"` + NewRepository *apt.Repository `json:"new_repository"` + } + + params.OldRepository = &apt.Repository{ + Enabled: false, + SourceRepo: true, + URI: "http://ppa.launchpad.net/OldTest/ubuntu", + Distribution: "zesty", + Components: "main", + Comment: "old", + } + + params.NewRepository = &apt.Repository{ + Enabled: false, + SourceRepo: true, + URI: "http://ppa.launchpad.net/NewTest/ubuntu", + Distribution: "zesty", + Components: "main", + Comment: "new", + } + + errAdd := apt.AddRepository(params.OldRepository, "/etc/apt") + if errAdd != nil { + t.Error(errAdd) + } + + defer func() { + err := apt.RemoveRepository(params.NewRepository, "/etc/apt") + if err != nil { + t.Error(err) + } + }() + + data, err := json.Marshal(params) + if err != nil { + t.Error(err) + } + + resp := ui.MqttSendAndReceiveTimeout(t, "/apt/repos/edit", string(data), 1*time.Second) + assert.Equal(t, "INFO: OK\n", resp) + + all, err := apt.ParseAPTConfigFolder("/etc/apt") + if err != nil { + s.Error("/apt/repos/list", fmt.Errorf("Retrieving repositories: %s", err)) + return + } + + assert.True(t, all.Contains(params.NewRepository)) + assert.False(t, all.Contains(params.OldRepository)) +} From f74fab6debb20561fd447cf36ab9c431806346b2 Mon Sep 17 00:00:00 2001 From: Federico Guerinoni Date: Tue, 1 Sep 2020 15:33:13 +0200 Subject: [PATCH 09/12] Add Dockerfile for image guerra/go-mosquitto-ubuntu-env Signed-off-by: Federico Guerinoni --- test/go-mosquitto-ubuntu-env | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 test/go-mosquitto-ubuntu-env diff --git a/test/go-mosquitto-ubuntu-env b/test/go-mosquitto-ubuntu-env new file mode 100644 index 00000000..9699775d --- /dev/null +++ b/test/go-mosquitto-ubuntu-env @@ -0,0 +1,16 @@ +FROM ubuntu +LABEL maintainer="guerinoni.federico@gmail.com" + +RUN apt-get update +RUN apt-get -y install \ + curl \ + gcc \ + mosquitto + +RUN curl -O https://dl.google.com/go/go1.15.linux-amd64.tar.gz +RUN tar xvf go1.15.linux-amd64.tar.gz +RUN mv go /usr/local + +ENV PATH=$PATH:/usr/local/go/bin + +WORKDIR /home \ No newline at end of file From 04be35a4bc0f6a5060c498b09853664a9a1c3f3b Mon Sep 17 00:00:00 2001 From: Federico Guerinoni Date: Tue, 1 Sep 2020 19:56:06 +0200 Subject: [PATCH 10/12] Fix style of tests error check Signed-off-by: Federico Guerinoni --- handlers_apt_repositories_test.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/handlers_apt_repositories_test.go b/handlers_apt_repositories_test.go index c63fa9a0..ba0cb462 100644 --- a/handlers_apt_repositories_test.go +++ b/handlers_apt_repositories_test.go @@ -28,9 +28,7 @@ func TestAptList(t *testing.T) { resp := ui.MqttSendAndReceiveTimeout(t, "/apt/repos/list", "{}", 1*time.Second) - if resp == "" { - t.Error("response is empty") - } + assert.NotEmpty(t, resp) } func TestAptAddError(t *testing.T) { From de68dfd7aae0f7d475f7b7dfa209f1251dca315e Mon Sep 17 00:00:00 2001 From: Federico Guerinoni Date: Wed, 16 Sep 2020 18:48:40 +0200 Subject: [PATCH 11/12] Put mosquitto/mqtt tests all in same script Signed-off-by: Federico Guerinoni --- .github/workflows/tests.yml | 9 +++------ scripts/docker-tests.sh | 8 -------- scripts/{apt-tests.sh => mqtt-tests.sh} | 3 ++- 3 files changed, 5 insertions(+), 15 deletions(-) delete mode 100755 scripts/docker-tests.sh rename scripts/{apt-tests.sh => mqtt-tests.sh} (59%) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 356afcc4..26f5b000 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -11,11 +11,8 @@ jobs: - name: check out code uses: actions/checkout@v2 - - name: run docker tests - run: ./scripts/docker-tests.sh + - name: run mqtt tests + run: ./scripts/mqtt-tests.sh - name: run auth tests - run: go test -v ./auth - - - name: run apt tests - run: ./scripts/apt-tests.sh + run: go test -v ./auth \ No newline at end of file diff --git a/scripts/docker-tests.sh b/scripts/docker-tests.sh deleted file mode 100755 index 08b796ce..00000000 --- a/scripts/docker-tests.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -trap 'kill "$(pidof mosquitto)"' EXIT - -mosquitto > /dev/null & -go test -v --tags=functional --run="TestDocker" \ No newline at end of file diff --git a/scripts/apt-tests.sh b/scripts/mqtt-tests.sh similarity index 59% rename from scripts/apt-tests.sh rename to scripts/mqtt-tests.sh index 9914a3ad..40ddab09 100755 --- a/scripts/apt-tests.sh +++ b/scripts/mqtt-tests.sh @@ -5,4 +5,5 @@ set -euo pipefail trap 'kill "$(pidof mosquitto)"' EXIT mosquitto > /dev/null & -go test -v --run="TestApt" \ No newline at end of file +go test -v --tags=functional --run=TestDocker +go test -v --run=TestApt \ No newline at end of file From 2c63aa15e132d30d11311bb7efa34b5fdc0cc2e4 Mon Sep 17 00:00:00 2001 From: Fabio Falzoi Date: Fri, 25 Sep 2020 11:11:05 +0200 Subject: [PATCH 12/12] Update documentation to point to new Docker image --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 8d26b28c..6285e467 100644 --- a/README.md +++ b/README.md @@ -71,10 +71,10 @@ See [API](./API.md) ## Functional tests -This type of tests are executed all locally and you need to configure a dedicated docker container: -- `docker pull guerra1994/go-mqtt-docker-env` -- follow the steps [here](https://hub.docker.com/r/guerra1994/go-mqtt-docker-env) to run it -- run mosquitto broker in background mode using `mosquitto > /dev/null 2>&1 &` +These tests can be executed locally. To do that, you need to configure a dedicated docker container: +- get the image `docker pull guerra1994/go-docker-mqtt-ubuntu-env` +- enter the container `docker run -it -v $(pwd):/home --privileged --name gmd guerra1994/go-docker-mqtt-ubuntu-env` +- run the mosquitto MQTT broker in background mode `mosquitto > /dev/null 2>&1 &` - then run your test, for example `go test -v --tags=functional --run="TestDockerPsApi"`